¿Por qué nm no muestra símbolos para /lib/i386-linux-gnu/libc.so.6?

31

Esperaba ver varios símbolos en el archivo libc.so.6 , incluido printf . Utilicé la herramienta nm para encontrarlos, sin embargo, dice que no hay ningún símbolo en libc.so.6.

masec
fuente

Respuestas:

54

Probablemente tiene sus símbolos regulares despojados y lo que queda son sus símbolos dinámicos, con los que puede obtener nm -D.

PSkocik
fuente
11

@PSkocik respondió esto. Solo quiero agregar más detalles. Hay dos tipos de secciones de símbolos en ELF: .symtaby .dynsym(consulte la Especificación básica básica de Linux, también conocida como LSB_5.0.0 , para más detalles). .symtabes para el paso de vinculación de la propia biblioteca compartida. Una vez que finaliza la vinculación, la .symtabsección ya no es necesaria. La .dynsymsección contiene símbolos importantes que el vinculador dinámico debe buscar en tiempo de ejecución. nmde forma predeterminada solo vuelca los símbolos en la .symtabsección.

LSB_5.0.0 Sección 10.2.2.1, “Tipos de sección ELF”, dice que una lib compartida conforme debe tener uno .symtabo .dynsymambos no. Como parte de la biblioteca ABI, libc se elimina de la .symtabespecificación.

kula85
fuente
0

Averigüe si es un objeto compartido o un archivo ASCII normal. Si es un objeto compartido, debería ver "Objeto compartido LSB ELF de 32 bits"

file /lib/i386-linux-gnu/libc.so.6
jncc99
fuente
libc.so.6es obviamente un objeto compartido.
Gilles 'SO- deja de ser malvado'
Nunca asumo en un entorno Linux. Teniendo en cuenta que alguien podría haber tocado los directorios raíz. Sí, por su nombre, obviamente, es un objeto compartido. Y, no hace daño verificar; cuando no está obteniendo el resultado esperado.
jncc99