Herramientas

Mirar de cerca el mundo de los archivos objeto es mas fácil usando las siguientes herramientas:

Todos los cuales son parte de el paquete binutils.

formato de salida de "objdump -t"

Usualmente hago el volcado de los símbolos de un archivo usando objdump -t. Parece dificil de encontrar alguna documentacion del formato de salida por eso he incluido algunas notas rápidas al respecto. El uso típico de esta herramienta deberia verse algo como lo siguiente :

[trevor]$ objdump -t add.o      

add.o:     file format elf32-i386

SYMBOL TABLE:
00000000 l    df *ABS*     00000000 add.c
00000000 l    d  .text     00000000 
00000000 l    d  .data     00000000 
00000000 l    d  .bss      00000000 
00000000 l    d  .comment  00000000 
00000000 g     F .text     0000000b add

        

Aquí esta lo que yo entiendo de las descripciones de las columnas. Esta información proviene de navegar a través de bfd/syms.c:bfd_print_symbol_vandf() (donde "vandf" significa "value and flags (valores y banderas)").

Figura 1. Salida de objdump -t

Las banderas que se describieron anteriormente son parte de un juego más grande de símbolos y atributos que se definen en bfd/bfd.h. Debajo podras encontrar el juego entero de banderas (o atributos) y sus respectivos significados.

Note

Hay que darse cuenta que objdump -t no intenta desplegar los valores de todas las posibles banderas, solo las 11 mencionadas abajo.

Tabla 1. BSF_ banderas/atributos

Definición SimboloDescripción
0x00000 BSF_NO_FLAGSlugar para ninguna bandera definida
0x00001 BSF_LOCALEl simbolo tiene alcanze local (ej. un static en C). VALUE(1) es el offset del simbolo en la sección de datos.
0x00002 BSF_GLOBALEl simbolo tiene alcanze global (ej. datos inicializados en C). VALUE(2) es el offset del simbolo en la sección de datos.
BSF_GLOBAL BSF_EXPORTEste simbolo tiene alcanze global y esta exportado. El mismo que BSF_GLOBAL.
0x00008 BSF_DEBUGGINGEl simbolo es un registro para depuración. Los Valores (VALUEs) son arbitrarios, a menos que este establecido BSF_DEBUGGING_RELOC .
0x00010ELFBSF_FUNCTIONPunto de entrada a la Función.
0x00020 BSF_KEEPusados por el enlazador
0x00040 BSF_KEEP_G
0x00080 BSF_WEAKSímbolo global débil. Este simbolo es anulable (sin warning) por un símbolo global regular del mismo nombre.
0x00100ELFBSF_SECTION_SYMEste símbolo apunta la sección.
0x00200 BSF_OLD_COMMONEste símbolo es usado para *COM*, pero se asigna al instante.
0x00400COFFBSF_NOT_AT_ENDEste símbolo aparece donde se declara y no al final de la secció:n.
0x00800 BSF_CONSTRUCTOREste símbolo indica el comienzo de la seccion de un constructor.
0x01000 BSF_WARNINGLa presencia de este símbolo actua para indicar que hay un warning (advertencia) en el siguiente símbolo.
0x02000 BSF_INDIRECTEste símbolo es un apuntador indirecto al símbolo con el mismo nombre de símbolo.
0x04000ELFBSF_FILEEste símbolo contiene un nombre de archivo.
0x08000ELFBSF_DYNAMICEste símbolo esta asociado con enlazamiento dinamico.
0x10000ELFBSF_OBJECTEste símbolo denota un objeto de dato.
0x20000 BSF_DEBUGGING_RELOCEste es un símbolo de depuración. VALUE(1) (VALOR) es el offset en la seccion de datos. BSF_DEBUGGING deberia establecerse también.
0x40000ELFBSF_THREAD_LOCALEste símbolo se usa para almacenamiento local de hilos.