Les images finales produites par les compleurs contiennent à la fois un fichier bin et un fichier ELf au format chargeur étendu, quelle est la différence entre les deux, en particulier l'utilité du fichier ELF.
Les images finales produites par les compleurs contiennent à la fois un fichier bin et un fichier ELf au format chargeur étendu, quelle est la différence entre les deux, en particulier l'utilité du fichier ELF.
Réponses:
Un fichier Bin est un fichier binaire pur sans réparation ni déplacement de mémoire, il a plus que probablement des instructions explicites à charger à une adresse mémoire spécifique. Tandis que....
Les fichiers ELF sont un format exécutable pouvant être lié qui se compose d'une recherche de symboles et d'une table déplaçable, c'est-à-dire qu'il peut être chargé à n'importe quelle adresse mémoire par le noyau et automatiquement, tous les symboles utilisés sont ajustés au décalage de cette adresse mémoire où il a été chargé dans. Habituellement, les fichiers ELF ont un certain nombre de sections, telles que 'data', 'text', 'bss', pour n'en nommer que quelques-unes ... c'est dans ces sections où le run-time peut calculer où ajuster les références mémoire du symbole dynamiquement au moment de l'exécution.
Un fichier bin est juste les bits et octets qui entrent dans la rom ou une adresse particulière à partir de laquelle vous exécuterez le programme. Vous pouvez prendre ces données et les charger directement telles quelles, vous devez savoir quelle est l'adresse de base car elle ne s'y trouve normalement pas.
Un fichier elf contient les informations bin mais il est entouré de beaucoup d'autres informations, des informations de débogage possibles, des symboles, peuvent distinguer le code des données dans le binaire. Permet plus d'un morceau de données binaires (lorsque vous en videz un dans un bac, vous obtenez un gros fichier bin avec des données de remplissage pour le remplir dans le bloc suivant). Vous indique la quantité de binaires dont vous disposez et la quantité de données bss qui veulent être initialisées à zéro (les outils gnu ont des problèmes pour créer correctement les fichiers bin).
Le format de fichier elf est un standard, arm publie ses améliorations / variations sur le standard. Je recommande à tout le monde d'écrire un programme d'analyse elfe pour comprendre ce qu'il y a dedans, ne vous embêtez pas avec une bibliothèque, il est assez simple d'utiliser simplement les informations et les structures de la spécification. Aide à surmonter les problèmes de gnu en général en créant des fichiers .bin ainsi qu'en déboguant les scripts de l'éditeur de liens et d'autres choses qui peuvent aider à gâcher votre sortie bin ou elf.
quelques ressources:
Le format ELF est généralement la sortie par défaut de la compilation. si vous utilisez des chaînes d'outils GNU, vous pouvez le traduire au format binaire en utilisant objcopy, tel que:
arm-elf-objcopy -O binary [elf-input-file] [binary-output-file]
ou en utilisant l'utilitaire fromELF (intégré dans la plupart des IDE tels que ADS):
fromelf -bin -o [binary-output-file] [elf-input-file]
Je veux juste corriger un point ici. Le fichier ELF est produit par l'éditeur de liens, pas par le compilateur.
La mission du compilateur se termine après la production des fichiers objets (* .o) à partir des fichiers de code source. Linker relie tous les fichiers .o ensemble et produit l'ELF.
ld
documentation : Habituellement, la dernière étape de la compilation d'un programme consiste à exécuter ld.
NOP
sans-f
(ou-fbin
), il se compile en un seul octet0x90
, au lieu d'un conteneur ELF de 400 octets avec-felf32
. Donc juste le code brut, pas de métadonnées de conteneur. NASM dit qu'il est principalement utilisé pour les fichiers MS-DOS .COM et .SYS .section
les directives sont généralement ignorées et ne génèrent qu'un alignement.