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.
źródło
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.
Prawdopodobnie pozbawiono go zwykłych symboli, a pozostały dynamiczne symbole, które można uzyskać nm -D
.
@PSkocik odpowiedział na to pytanie. Chcę tylko dodać więcej szczegółów. Istnieją dwa rodzaje sekcji symboli w ELF: .symtab
i .dynsym
(zobacz szczegóły w Standardowej podstawowej specyfikacji rdzenia systemu Linux, znanej również jako LSB_5.0.0 ). .symtab
jest dla kroku łączenia samej wspólnej biblioteki lib. Po zakończeniu łączenia .symtab
sekcja nie jest już potrzebna. .dynsym
Sekcja zawiera ważnych symboli, które mają być przeszukiwane przez linker dynamiczny w czasie wykonywania. nm
domyślnie zrzuca tylko symbole w .symtab
sekcji.
LSB_5.0.0 Sekcja 10.2.2.1, „Typy ELF Sekcja”, mówi zgodny dzielone lib powinien mieć albo .symtab
albo .dynsym
, ale nie jednocześnie. W ramach biblioteki ABI libc jest usuwany z wersji .symtab
zgodnej ze specyfikacją.
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.6
jest owalnie wspólnym przedmiotem.