web-dev-qa-db-fra.com

Quelle est la différence entre les fichiers ELF et les fichiers bin?

Les images finales produites par les fournisseurs contiennent à la fois un fichier bin et un fichier ELf au format de chargeur étendu, quelle est la différence entre les deux, en particulier l’utilité du fichier ELF.

86
Manik Mahajan

Un fichier Bin est un pur fichier binaire sans correction de mémoire ni relocalisation. Il est plus que probable qu'il ait des instructions explicites à charger à une adresse mémoire spécifique. Tandis que....

ELF Les fichiers sont des formats exécutables pouvant être reliés qui consistent en une liste de symboles et une table pouvant être déplacée, 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 en fonction du décalage de l'adresse de la mémoire où ils ont été chargés. En général, les fichiers ELF comportent un certain nombre de sections, telles que "données", "texte", "bss", pour n'en nommer que quelques-unes ... c'est dans ces sections que le temps d'exécution peut calculer où ajuster les références en mémoire du symbole dynamiquement au moment de l'exécution.

81
t0mm13b

Un fichier bin est constitué uniquement des bits et des octets contenus dans la rom ou d'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 de la corbeille, mais il est entouré de nombreuses autres informations, informations de débogage possibles, symboles, permettant de distinguer le code des données contenues dans le fichier binaire. Autorise plus d'un bloc de données binaires (lorsque vous en versez un dans un bac, vous obtenez un gros fichier de bac avec des données de remplissage pour le placer dans le bloc suivant). Vous indique combien de binaires vous avez et combien de données bss sont là qui veulent être initialisées à zéro (les outils gnu ont des problèmes pour créer des fichiers bin correctement).

Le format de fichier elf est un standard, arm publie ses améliorations/variations sur le standard. Je recommande à chacun d'écrire un programme d'analyse syntaxique 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 gnou en général en créant des fichiers .bin ainsi qu'en déboguant des scripts d'éditeur de liens et d'autres choses qui peuvent aider à gâcher votre sortie bin ou elf.

32
old_timer

quelques ressources:

  1. ELF pour l’architecture ARM
    http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044d/IHI0044D_aaelf.pdf
  2. ELF de wiki
    http://en.wikipedia.org/wiki/Executable_and_Linkable_Format

Le format ELF est généralement la sortie par défaut de la compilation. si vous utilisez GNU, vous pouvez le convertir 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é à la plupart des IDE tels que ADS cependant):

 fromelf -bin -o [binary-output-file] [elf-input-file]
29
wenlujon