Le format Windows Portable Executable a ses propres petites nuances, alors voici un guide rapide sur leur fonctionnement.

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, il peut donc être utilisé sur n'importe quelle machine Windows exécutant la même version du système d'exploitation et la même architecture de processeur pour lesquels le fichier a été compilé.

Alors, disséquons le format de fichier Windows PE et découvrons sa structure et ses composants.

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

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 ou Common Object File Format est un ensemble standardisé de conventions pour représenter les instructions binaires. COFF aide à maintenir la compatibilité multiplateforme car tous les formats de fichiers COFF suivent le même ensemble de règles et de conventions pour l'organisation du code et des données. Bien que COFF ait été initialement développé pour être utilisé sur les systèmes *NIX, il est désormais 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 Systèmes Windows 32 bits et 64 bits. Contrairement à COFF, qui fournit un format standardisé pour les fichiers objets, Windows PE fournit un format standardisé 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 système à gérer les données relatives à l'exécutable. Les en-têtes d'un fichier PE aident le chargeur 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 a également sa propre itération du COFF; il s'appelle Executable Link File ou en bref, binaire ELF. Vous pouvez vérifier si un fichier est ELF ou non en exécutant le commande de fichier sous Linux avec le nom de fichier comme premier argument.

La structure d'un exécutable portable Windows

Le format de fichier Portable Executable se compose de plusieurs composants, chacun ayant un objectif spécifique. Ces composants comprennent :

  • 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 du code exécutable, des données et des ressources.
  • L'en-tête PE, qui fournit des informations sur la structure globale et les exigences du fichier.
  • 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.
  • Et 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 fonctionnent 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. Apprenons exactement ce que fait chaque composant.

En-tête DOS

La première partie d'un fichier PE s'appelle l'en-tête DOS. Une petite quantité de code exécutable est stockée dans l'en-tête DOS qui peut également être exécuté sur une machine DOS.

Ce code est également appelé le stub MS-DOS et est utilisé pour lancer 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 Portable Executable 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 un .EXE.

En-têtes de section

Les sections sont implémentées pour organiser les nombreux composants d'un exécutable tels que le code, les données et les ressources telles que les chaînes de texte, les images, etc. Les en-têtes de section incluent des informations concernant la taille et l'emplacement de chaque section, ainsi que tous 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, les données et les ressources réels 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.

Maintenant, vous savez tout sur le format de fichier exécutable portable de Windows

L'exécutable portable Windows est un format de fichier robuste et polyvalent utilisé pour produire une grande variété d'applications et de composants système Windows. En comprenant la structure du format de fichier PE, les développeurs peuvent créer des applications efficaces qui tirent parti des caractéristiques distinctives de Windows.

En plus d'acquérir une compréhension approfondie de la plate-forme sur laquelle votre application sera exécutée, en suivant quelques bonnes pratiques pratiques de codage, vous serez en mesure de maximiser la qualité de l'application quelle que soit la plate-forme sur laquelle elle est exécutée sur.