symbols - ¿Cuáles son los significados de las columnas de la tabla de símbolos mostrada por readelf?
(4)
¿Podría alguien explicar las columnas que se muestran de la tabla de símbolos usando readelf
?
Considera lo siguiente:
La tabla de símbolos .symtab
contiene 1203 entradas:
Num: Value Size Type Bind Vis Ndx Name
310: a0008120 0 NOTYPE GLOBAL DEFAULT ABS _gp
734: a0000010 32 OBJECT GLOBAL DEFAULT 77 v
818: 9d000018 496 FUNC GLOBAL DEFAULT 71 main
849: a0000124 4 OBJECT GLOBAL DEFAULT 78 phrase
955: a0000000 9 OBJECT GLOBAL DEFAULT 77 peppers
1020: a000023c 192 OBJECT GLOBAL DEFAULT 80 bins
-
Num:
= El número de símbolo -
Value
= La dirección del símbolo -
Size
= El tamaño del símbolo -
Type
= tipo de símbolo:Func
= Función,Object
,File
(nombre de archivo de origen),Section
= sección de memoria,Notype
= símbolo absoluto sin tipo o indefinido -
Bind
=GLOBAL
vinculante significa que el símbolo es visible fuera del archivo.LOCAL
vinculaciónLOCAL
solo está visible en el archivo.WEAK
es como global, el símbolo puede ser anulado. -
Vis
= Los símbolos pueden ser predeterminados, protegidos, ocultos o internos. -
Ndx
= El número de sección en el que se encuentra el símbolo. ABS significa absoluto: no se ajusta a la reubicación de ninguna dirección de sección -
Name
= nombre del símbolo
Creo que el campo Ndx muestra el número de sección donde se define ese símbolo.
Haga un readelf -a <file>
, y descubra a qué sección corresponde la dirección para un símbolo dado.
Apuesto a que el número de sección de esa sección aparecerá en el campo Ndx.
Está bien, esta pregunta es antigua, pero el viejo y buen Google la proporciona si está buscando readelf symboltable y NDX;
Esto es lo que descubrí:
El código C compilado con avr-gcc:
int XYZ = 123;
int ABC;
cuando el archivo elf generado se analiza usando
readelf --symbols KoreOS.elf
obtienes como resultado:
Num: Value Size Type Bind Vis Ndx Name
...
148: 0080200b 2 OBJECT GLOBAL DEFAULT 2 XYZ
...
258: 00803878 2 OBJECT GLOBAL DEFAULT 3 ABC
...
Uso la columna NDX como pista si la variable está inicializada o no. Pero no encontré documentación en ninguna parte, así que solo estoy adivinando.
saludos, Dominik
Tu también puedes:
man readelf
o mira estos tutoriales: