Las imágenes finales producidas por los compiladores contienen tanto el archivo bin como el archivo ELf con formato de cargador extendido, cuál es la diferencia entre los dos, especialmente la utilidad del archivo ELF.
Las imágenes finales producidas por los compiladores contienen tanto el archivo bin como el archivo ELf con formato de cargador extendido, cuál es la diferencia entre los dos, especialmente la utilidad del archivo ELF.
Respuestas:
Un archivo Bin es un archivo binario puro sin reparaciones o reubicaciones de memoria, lo más probable es que tenga instrucciones explícitas para cargarse en una dirección de memoria específica. Mientras....
Los archivos ELF tienen un formato ejecutable enlazable que consiste en búsquedas de símbolos y una tabla reubicable, es decir, el kernel puede cargarlos en cualquier dirección de memoria y, automáticamente, todos los símbolos utilizados se ajustan al desplazamiento desde esa dirección de memoria donde fue cargado en. Por lo general, los archivos ELF tienen varias secciones, como 'datos', 'texto', 'bss', por nombrar solo algunas ... es dentro de esas secciones donde el tiempo de ejecución puede calcular dónde ajustar las referencias de memoria del símbolo dinámicamente en tiempo de ejecución.
Un archivo bin son solo los bits y bytes que van a la rom o una dirección particular desde la que ejecutará el programa. Puede tomar estos datos y cargarlos directamente tal como están, aunque necesita saber cuál es la dirección base, ya que normalmente no está allí.
Un archivo elf contiene la información del contenedor, pero está rodeado de mucha otra información, información de depuración posible, símbolos que pueden distinguir el código de los datos dentro del binario. Permite más de un fragmento de datos binarios (cuando vuelca uno de estos en un contenedor, obtiene un archivo de contenedor grande con datos de relleno para rellenarlo en el siguiente bloque). Le dice cuánto binario tiene y cuántos datos bss hay que desea inicializar a ceros (las herramientas gnu tienen problemas para crear archivos bin correctamente).
El formato de archivo elf es estándar, arm publica sus mejoras / variaciones en el estándar. Recomiendo a todos que escriban un programa de análisis elf para comprender lo que hay allí, no se molesten con una biblioteca, es bastante simple usar la información y las estructuras en la especificación. Ayuda a superar los problemas de GNU en general al crear archivos .bin, así como a depurar scripts del enlazador y otras cosas que pueden ayudar a estropear la salida de bin o elf.
algunos recursos:
El formato ELF es generalmente la salida predeterminada de la compilación. si usa cadenas de herramientas GNU, puede traducirlo a formato binario usando objcopy, como:
arm-elf-objcopy -O binary [elf-input-file] [binary-output-file]
o usando la utilidad fromELF (aunque integrada en la mayoría de los IDE como ADS):
fromelf -bin -o [binary-output-file] [elf-input-file]
Solo quiero corregir un punto aquí. El archivo ELF lo genera el vinculador, no el compilador.
La misión del compilador finaliza después de producir los archivos objeto (* .o) a partir de los archivos de código fuente. El vinculador vincula todos los archivos .o y genera el ELF.
ld
documentación : Por lo general, el último paso para compilar un programa es ejecutar ld.
NOP
sin-f
(o-fbin
), se compila en un solo byte0x90
, en lugar de un contenedor ELF de 400 bytes con-felf32
. Así que solo el código sin formato, no los metadatos del contenedor. NASM dice que se usa principalmente para archivos .COM y .SYS de MS-DOS .section
Las directivas se ignoran en su mayoría y solo generan alineación.