Dlaczego nm nie pokazuje żadnych symboli dla /lib/i386-linux-gnu/libc.so.6?


31

Spodziewałem się zobaczyć liczbę symboli w pliku libc.so.6 , w tym printf . Użyłem narzędzia nm , aby je znaleźć, jednak napisano, że w libc.so.6 nie ma żadnego symbolu.

Odpowiedzi:


54

Prawdopodobnie pozbawiono go zwykłych symboli, a pozostały dynamiczne symbole, które można uzyskać nm -D.


11

@PSkocik odpowiedział na to pytanie. Chcę tylko dodać więcej szczegółów. Istnieją dwa rodzaje sekcji symboli w ELF: .symtabi .dynsym(zobacz szczegóły w Standardowej podstawowej specyfikacji rdzenia systemu Linux, znanej również jako LSB_5.0.0 ). .symtabjest dla kroku łączenia samej wspólnej biblioteki lib. Po zakończeniu łączenia .symtabsekcja nie jest już potrzebna. .dynsymSekcja zawiera ważnych symboli, które mają być przeszukiwane przez linker dynamiczny w czasie wykonywania. nmdomyślnie zrzuca tylko symbole w .symtabsekcji.

LSB_5.0.0 Sekcja 10.2.2.1, „Typy ELF Sekcja”, mówi zgodny dzielone lib powinien mieć albo .symtabalbo .dynsym, ale nie jednocześnie. W ramach biblioteki ABI libc jest usuwany z wersji .symtabzgodnej ze specyfikacją.


0

Dowiedz się, czy jest to obiekt współdzielony, czy zwykły plik ASCII. Jeśli jest to obiekt współdzielony, powinieneś zobaczyć „ELF 32-bitowy obiekt współdzielony LSB”

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

libc.so.6jest owalnie wspólnym przedmiotem.
Gilles „SO- przestań być zły”

Nigdy nie zakładam w środowisku Linux. Biorąc pod uwagę, że ktoś mógł dotknąć katalogów głównych. Tak, z nazwy jest to oczywiście obiekt udostępniania. I weryfikacja nie zaszkodzi; gdy nie otrzymujesz oczekiwanej wydajności.
jncc99
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.