Quest-ce quun exécutable portable (PE)?


Meilleure réponse

Exécutable portable

Le format Portable Executable est un format de fichier pour les exécutables, le code objet, les DLL, les fichiers FON Font et autres utilisés dans les versions 32 bits et 64 bits des systèmes dexploitation Windows. Le format PE est une structure de données qui encapsule les informations nécessaires au chargeur du système dexploitation Windows pour gérer le code exécutable encapsulé.

Cela inclut des références de bibliothèques dynamiques pour la liaison, lexportation et limportation dAPI, les données de gestion des ressources et les threads -données de stockage local (TLS). Sur les systèmes dexploitation NT, le format PE est utilisé pour EXE, DLL, SYS (pilote de périphérique) et dautres types de fichiers. La spécification EFI (Extensible Firmware Interface) indique que PE est le format exécutable standard dans les environnements EFI.

Réponse

La portabilité du code source C signifie que, tant que la plate-forme cible souhaitée dispose dun compilateur C fonctionnel disponible, vous pouvez déplacer votre code source C vers cette plateforme cible en le recompilant, sans avoir à le modifier. Comme presque toutes les plates-formes cibles ont un compilateur C disponible, C est considéré comme un langage de programmation très portable.

Cela dit, écrire simplement du code en C fait pas garantir la portabilité. Vous devez faire preuve de discipline pour éviter décrire du code non portable. Par exemple, lécriture de code qui effectue lune des opérations suivantes entraînera un code non portable:

  • Fait des hypothèses sur la taille de tous les types de données, autres que char.
  • Fait hypothèses sur la façon dont les données sont alignées dans la mémoire et dans les structures.
  • Fait des hypothèses sur la façon dont les données sont empaquetées / remplies dans les structures.
  • Fait des hypothèses sur lordre des octets (big endian vs little endian) .
  • Utilise une extension de compilateur non standard, qui peut ne pas être disponible sur toutes les implémentations de compilateur.
  • Utilise une extension de bibliothèque non standard, qui peut ne pas être disponible sur toutes les plates-formes.
  • Dépend de tout comportement défini par limplémentation, qui peut fonctionner différemment dans une implémentation de compilateur différente.
  • Contient tout comportement non défini, qui pourrait semblent fonctionner dans un environnement, mais pourraient se comporter de manière imprévisible dans un autre environnement.
  • Effectue des appels dAPI (interface de programmation dapplication) vers système, qui peut ne pas être disponible dans tous les environnements.
  • Fait des hypothèses sur des adresses mémoire spécifiques (par exemple, quune adresse mémoire spécifique est mappée à un registre de périphérique matériel, etc.).
  • Fait des hypothèses sur la taille dun pointeur, ou quun pointeur a la même taille quun int.
  • Fait des hypothèses sur la façon dont les arguments sont passés (sur la pile ou dans des registres spécifiques).
  • Contient nimporte quel code source du langage dassemblage en ligne.
  • Utilise une fonctionnalité la plus récente et la meilleure du langage C qui nest peut-être pas encore prise en charge par certaines implémentations de compilateur (et, dans certains cas, peut ne jamais lêtre pris en charge).
  • Sappuie sur une bibliothèque qui fait lune des choses ci-dessus.

Cette liste nest pas exhaustive.

Si vous le pouvez t éviter dutiliser du code non portable, alors votre meilleur pari est disoler ce code non portable dans un fichier source séparé. Ensuite, lorsque vous avez besoin de déplacer le code vers une nouvelle plate-forme cible, il est très clair quel sous-ensemble du code source doit être modifié.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *