Red de conocimiento informático - Computadora portátil - conjunto de herramientas binutils

conjunto de herramientas binutils

GNU binutils es un conjunto de herramientas binarias. Incluye principalmente:

ld: conector gnu

as: ensamblador gnu.

También incluye:

addr2line: convierte direcciones en nombres de archivos y números de línea

nm: enumera los símbolos del archivo de destino

<; p > objdump: muestra información sobre los archivos de destino

readelf: muestra información sobre los archivos en formato elf

objcopy:

ar: crea, modifica y descomprime estático; archivo de bibliotecas;

tamaño: muestra el tamaño parcial del archivo de destino;

cadenas: enumera las cadenas imprimibles en el archivo de destino

c++filt; : Filtrar símbolos c++ en símbolos c reconocidos

ranlib: Genera el índice de archivos .o en el archivo de biblioteca

c++filt: Filtrar símbolos c++ en símbolos c reconocidos; ;

ranlib: genera el índice de archivos .o en el archivo de la biblioteca

ar: crea, modifica y descomprime archivos de la biblioteca estática

tamaño: muestra; Tamaño parcial del archivo de destino;

cadenas: enumera las cadenas imprimibles en el archivo de destino. o Índice del archivo;

tira: descarta la información del símbolo en el archivo del programa.

Lo anterior es el conjunto de herramientas binutils, que utiliza principalmente BFD (Biblioteca de descriptores de archivos binarios). Para operaciones de bajo nivel, muchos conjuntos de herramientas también utilizan la biblioteca de códigos de operación para ensamblar y desarmar instrucciones de la máquina.

Entonces, ¿cuáles son más importantes?

Los más obvios son: objdump, readelf, addr2line y nm, ya que son necesarios para informar errores y necesitar depuración. Por supuesto, ld y as también son muy importantes, pero se usan para compilar y vincular, y los comandos son muy complejos, por lo que deben enumerarse por separado para su explicación.

Los segundos más importantes son: objcopy, ar, size, string, porque rara vez se usan y generalmente están escritos en el archivo MAKE.

Los menos importantes son: c++filt, ranlib, strip, porque sus funciones pueden ser completamente reemplazadas por los importantes binutils anteriores.

addr2line:

addr2line 0x401110 -f -e test.elf

addr2line 0x401110 --demangle -f -e test.elf

Esto le dará el nombre del símbolo y el archivo fuente en esa dirección. El requisito previo para usar addr2line es que la tabla de símbolos exista en el archivo del programa, es decir, el parámetro de depuración -g se usa al compilar.

Se puede utilizar junto con nm para obtener mejores resultados.

nm -n test.elf

nm --demangle -n test.elf

Utilice nm para encontrar el símbolo correspondiente, así como la dirección del símbolo y ubicación del símbolo.

La dirección del símbolo se puede utilizar para usar addr2line para encontrar el nombre del archivo fuente en el que se coloca el símbolo.

La posición de los símbolos en nm es la siguiente:

objdump -D -S test.elf

objcopy -j .text test.elf onlytest. elf

p>

objcopy -R . texto test.elf notext.elf

objcopy --strip-debug test.elf == strip test.elf

ar crs libtest.a foo.o bar.o ====ranlib libtest.a agregar índice solo similar a

Al final, no importa cómo uses las herramientas binarias Lo importante es que sepa aproximadamente qué hace cada herramienta. Cuando necesite usarla, puede usar -help para descubrir cómo usarla lo antes posible. Lo que es más importante es comprender el principio elfo y la esencia de los principios de BFD, códigos de operación y otras cosas.