conjunto de herramientas binutils
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 destinoreadelf: 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.