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.
fuente
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.
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 respondió esto. Solo quiero agregar más detalles. Hay dos tipos de secciones de símbolos en ELF: .symtab
y .dynsym
(consulte la Especificación básica básica de Linux, también conocida como LSB_5.0.0 , para más detalles). .symtab
es para el paso de vinculación de la propia biblioteca compartida. Una vez que finaliza la vinculación, la .symtab
sección ya no es necesaria. La .dynsym
sección contiene símbolos importantes que el vinculador dinámico debe buscar en tiempo de ejecución. nm
de forma predeterminada solo vuelca los símbolos en la .symtab
secció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 .symtab
o .dynsym
ambos no. Como parte de la biblioteca ABI, libc se elimina de la .symtab
especificación.
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
libc.so.6
es obviamente un objeto compartido.