Generación y conversión de archivos ELF y BIN

Gcc compila archivos ELF. Por lo general, gcc -o test test.c, el archivo de prueba generado está en formato ELF, puede ejecutarlo escribiendo ./test en linuxshell.

Los archivos bin son archivos ejecutables comprimidos, con el formato ELF eliminado. Es una representación directa de la imagen de la memoria. Se puede ejecutar cuando el sistema no está cargado con un sistema operativo.

ELF archivo (formato ejecutable y enlace) contiene una tabla de símbolos, montaje y similares .
El archivo BIN es una imagen de memoria hecha al extraer el segmento de código, el segmento de datos y algunos segmentos personalizados en el archivo elf.
 

En Embedded, si el sistema está encendido y no hay un sistema operativo OS, si el archivo de formato ELF está grabado y contiene algunos elementos de formato ELF, la operación de armado encontrará estas instrucciones, lo que provocará un error. Si se usa arm-softfloat-linux -gnu-objcopy genera archivos bin de ensamblaje puro, y el programa se puede ejecutar paso a paso.

Ambos archivos se pueden ejecutar

La máquina solo reconoce BIN al final. La razón del formato ELF es que cuando hay un sistema operativo, el sistema operativo analizará el código, los datos, etc. de acuerdo con el ELF, y aún se ejecutará en BIN. Dado que la información en el archivo elf es relativamente completa, se puede usar para ejecutar en un modo de seguimiento de un solo paso. La clave es mirar el cargador.

 

Durante el desarrollo incrustado, compilamos un archivo * .S y finalmente generamos un archivo bin. El comando de compilación es aproximadamente el siguiente:

CC = arm-softfloat-linux-gnu-gcc

LD = arm-softfloat-linux-gnu-ld

OBJCOPY = arm-softfloat-linux-gnu-objcopy

 

$ (CC) -g $ (CFLAG) -c boot.S # Primero genera el archivo boot.S para arrancar.o

$ (LD) -g-Bstatic -T $ (LDFILE) -Ttext 0x12345600 boot.o --start-group -Map boot.map -oboot.elf # Luego genera boot.o en boot.elf, boot.elf generalmente es Se puede ejecutar un archivo ejecutable, similar al archivo de prueba en gcc-o test test.c, escribiendo ./test en LinuxShell.

$ (OBJCOPY) -O binario boot.elf boot.bin # Luego reemplace boot.elf-> boot.bin, esto puede reducir el tamaño del código.

 

Ejecute arm-softfloat-linux-gnu-objdump-h boot.elf para ver la información del archivo, pero si se convierte en

arm-softfloat-linux-gnu-objdump-h boot.bin generará un error, para ver la información del archivo boot.bin, ingrese:

arm-softfloat-linux-gnu-objdump-h -b binary -m arm boot.bin servirá. Jaja, también aprendí un truco ahora, en el que el parámetro -h puede ser reemplazado por -D, -S, -s, etc. Utilice arm-softfloat-linux-gnu-objdump - significado de la ayuda en el visor

Publicado 25 artículos originales · elogiado 8 · 20,000+ visitas

Supongo que te gusta

Origin blog.csdn.net/boazheng/article/details/104299236
Recomendado
Clasificación