symbols elf

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ón LOCAL 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