Un exécutable portable Windows (PE) est le format de fichier natif de Windows pour les exécutables et autres types de fichiers binaires. Le format de fichier PE est conçu pour être indépendant de la plate-forme, de sorte qu’il peut être utilisé sur n’importe quelle machine Windows fonctionnant avec la même version du système d’exploitation et la même architecture de processeur que celles pour lesquelles le fichier a été compilé.


Décortiquons donc le format de fichier Windows PE et découvrons sa structure et ses composants.

Qu’est-ce qu’un fichier exécutable portable Windows ?

ordinateur portable avec code à l'écran

Avant d’explorer le format Windows Portable Executable, il est important de clarifier les bases. Prenons un peu de recul et découvrons le concept sous-jacent de Windows PE-COFF.

Lorsque vous compilez le code source d’un programme, le compilateur génère un fichier objet (.obj). Ce fichier objet contient des instructions pour l’ordinateur au format binaire.

COFF (Common Object File Format) est un ensemble normalisé de conventions pour la représentation des instructions binaires. COFF permet de maintenir la compatibilité entre les plates-formes, car tous les formats de fichiers COFF suivent le même ensemble de règles et de conventions pour organiser le code et les données. Bien que COFF ait été développé à l’origine pour les systèmes *NIX, il est aujourd’hui omniprésent sur toutes les plates-formes.

Le format de fichier Windows Portable Executable (PE) est une modification de COFF et a été développé pour être utilisé exclusivement sur les systèmes Windows 32 bits et 64 bits. Contrairement à COFF, qui fournit un format normalisé pour les fichiers objets, Windows PE fournit un format normalisé pour les exécutables et les fichiers de bibliothèque.

Il contient des sections et des en-têtes qui fournissent des informations sur l’exécutable en question et aident le chargeur du système à gérer les données relatives à l’exécutable. Les en-têtes d’un fichier PE aident le chargeur du système à mapper le fichier sur la mémoire, à résoudre les dépendances telles que les exportations/importations d’API, à gérer les ressources et à préparer le fichier pour l’exécution.

Linux possède également sa propre itération du COFF, appelée Executable Link File (fichier de liaison exécutable) ou, en abrégé, ELF binary (binaire ELF). Vous pouvez vérifier si un fichier est ELF ou non en exécutant la commande commande file sous Linux avec le nom de fichier comme premier argument.

La structure d’un exécutable portable Windows

Diagramme de la structure d'un exécutable portable Windows

Le format de fichier Portable Executable se compose de plusieurs éléments, chacun ayant une fonction spécifique. Ces composants sont les suivants :

  • Les en-têtes de section, qui décrivent la disposition et les caractéristiques de chaque section du fichier Les sections elles-mêmes, qui contiennent le code exécutable, les données et les ressources.
  • L’en-tête PE, qui fournit des informations sur la structure globale du fichier et ses exigences.
  • L’en-tête DOS, qui comprend un petit programme qui s’exécute lorsque le fichier est exécuté sur un système DOS.
  • Enfin, les en-têtes de section PE, qui décrivent l’emplacement et les attributs de chaque section dans le fichier.

Dans l’ensemble, ces composants travaillent ensemble pour créer un format structuré qui permet au système d’exploitation de charger, d’exécuter et de gérer correctement le code exécutable contenu dans le fichier. Voyons ce que fait exactement chaque composant.

En-tête DOS

La première partie d’un fichier PE s’appelle l’en-tête DOS. L’en-tête DOS contient une petite quantité de code exécutable qui peut également être exécuté sur une machine DOS.

Ce code est également appelé stub MS-DOS et est utilisé pour afficher un message d’erreur sur les systèmes qui ne prennent pas en charge le fichier PE.

En-tête PE

L’en-tête de l’exécutable portable donne des informations sur l’exécutable, comme la taille du fichier, l’emplacement des différentes parties et les ressources dont l’exécutable a besoin. L’en-tête PE contient également des informations sur le type d’exécutable, qu’il s’agisse d’un fichier Windows .DLL ou d’un fichier .EXE.

En-têtes de section

Les sections sont mises en œuvre pour organiser les nombreux composants d’un exécutable, tels que le code, les données et les ressources (chaînes de texte, images, etc.). Les en-têtes de section comprennent des informations concernant la taille et l’emplacement de chaque section, ainsi que les drapeaux associés.

Les drapeaux associés à chaque en-tête de section peuvent indiquer divers attributs de la section, par exemple si elle est exécutable, inscriptible ou lisible. Ces drapeaux aident le système d’exploitation à charger et à gérer correctement le contenu de chaque section pendant l’exécution du programme.

Sections

Les sections elles-mêmes comprennent le code réel, les données et les ressources de l’exécutable. Chaque segment est aligné sur une certaine limite de mémoire et possède son propre ensemble d’attributs qui affectent la façon dont le système d’exploitation le gère.

Vous savez maintenant tout sur le format de fichier exécutable portable de Windows

Le format de fichier Windows Portable Executable est un format de fichier robuste et polyvalent utilisé pour produire une grande variété d’applications Windows et de composants système. En comprenant la structure du format de fichier PE, les développeurs peuvent créer des applications efficaces qui tirent parti des caractéristiques propres à Windows.

Outre une connaissance approfondie de la plate-forme sur laquelle votre application sera exécutée, le respect de quelques bonnes pratiques de codage standard vous permettra de maximiser la qualité de l’application, quelle que soit la plate-forme sur laquelle elle est exécutée.