Perché nm non mostra simboli per /lib/i386-linux-gnu/libc.so.6?


31

Mi aspettavo di vedere il numero di simboli nel file libc.so.6 incluso printf . Ho usato lo strumento nm per trovarli, tuttavia dice che non esiste alcun simbolo in libc.so.6.

Risposte:


54

Probabilmente ha i suoi simboli regolari spogliati e ciò che rimane sono i suoi simboli dinamici, che puoi ottenere nm -D.


11

@PSkocik ha risposto a questa domanda. Voglio solo aggiungere più dettagli. Esistono due tipi di sezioni di simboli in ELF: .symtabe .dynsym(per i dettagli, consultare la specifica del core di base standard Linux, nota anche come LSB_5.0.0 ). .symtabè per il passaggio di collegamento della stessa libreria condivisa. Una volta terminato il collegamento, la .symtabsezione non è più necessaria. La .dynsymsezione contiene simboli importanti che dovrebbero essere cercati dal linker dinamico in fase di esecuzione. nmdi default scarica solo i simboli nella .symtabsezione.

LSB_5.0.0 Sezione 10.2.2.1, "Tipi di sezione ELF", afferma che una lib condivisa conforme dovrebbe avere uno .symtabo .dynsymentrambi. Come parte della libreria ABI, libc viene rimosso .symtabdall'essere conforme alle specifiche.


0

Scopri se si tratta di un oggetto condiviso o di un normale file ASCII. Se si tratta di un oggetto condiviso, dovresti vedere "Oggetto condiviso LSB a 32 bit ELF"

file /lib/i386-linux-gnu/libc.so.6

libc.so.6è un oggetto condiviso in precedenza.
Gilles 'SO- smetti di essere malvagio'

Non presumo mai in un ambiente Linux. Considerando che qualcuno avrebbe potuto toccare le directory principali. Sì, per nome è ovviamente un oggetto condiviso. E non fa male verificare; quando non si ottiene l'output previsto.
jncc99,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.