| Entendiendo el Mecanismo de Inicio (Initcall) del Kernel de Linux: Creando funciones Dinámicas de apuntadores de Llamadas a Tablas | ||
|---|---|---|
| <<< Anterior | Introducción | Siguiente >>> |
Mirar de cerca el mundo de los archivos objeto es mas fácil usando las siguientes herramientas:
objdump,
nm, y
readelf
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)").
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.
![]() | 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 | Simbolo | Descripción | |
|---|---|---|---|
| 0x00000 | BSF_NO_FLAGS | lugar para ninguna bandera definida | |
| 0x00001 | BSF_LOCAL | El simbolo tiene alcanze local (ej. un static en C). VALUE(1) es el offset del simbolo en la sección de datos. | |
| 0x00002 | BSF_GLOBAL | El 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_EXPORT | Este simbolo tiene alcanze global y esta exportado. El mismo que BSF_GLOBAL. | |
| 0x00008 | BSF_DEBUGGING | El simbolo es un registro para depuración. Los Valores (VALUEs) son arbitrarios, a menos que este establecido BSF_DEBUGGING_RELOC . | |
| 0x00010 | ELF | BSF_FUNCTION | Punto de entrada a la Función. |
| 0x00020 | BSF_KEEP | usados por el enlazador | |
| 0x00040 | BSF_KEEP_G | ||
| 0x00080 | BSF_WEAK | Símbolo global débil. Este simbolo es anulable (sin warning) por un símbolo global regular del mismo nombre. | |
| 0x00100 | ELF | BSF_SECTION_SYM | Este símbolo apunta la sección. |
| 0x00200 | BSF_OLD_COMMON | Este símbolo es usado para *COM*, pero se asigna al instante. | |
| 0x00400 | COFF | BSF_NOT_AT_END | Este símbolo aparece donde se declara y no al final de la secció:n. |
| 0x00800 | BSF_CONSTRUCTOR | Este símbolo indica el comienzo de la seccion de un constructor. | |
| 0x01000 | BSF_WARNING | La presencia de este símbolo actua para indicar que hay un warning (advertencia) en el siguiente símbolo. | |
| 0x02000 | BSF_INDIRECT | Este símbolo es un apuntador indirecto al símbolo con el mismo nombre de símbolo. | |
| 0x04000 | ELF | BSF_FILE | Este símbolo contiene un nombre de archivo. |
| 0x08000 | ELF | BSF_DYNAMIC | Este símbolo esta asociado con enlazamiento dinamico. |
| 0x10000 | ELF | BSF_OBJECT | Este símbolo denota un objeto de dato. |
| 0x20000 | BSF_DEBUGGING_RELOC | Este es un símbolo de depuración. VALUE(1) (VALOR) es el offset en la seccion de datos. BSF_DEBUGGING deberia establecerse también. | |
| 0x40000 | ELF | BSF_THREAD_LOCAL | Este símbolo se usa para almacenamiento local de hilos. |
| <<< Anterior | Inicio | Siguiente >>> |
| Arquitectura | Arriba | Motivación |