Test odbywa się na 32-bitowym systemie Linux.
Używam tego polecenia, aby uzyskać kontekst .text
.rodata
i .data
sekcja:
objdump -s -j .text elf_binary objdump -s -j .rodata elf_binary objdump -s -j .data elf_binary
Ale w zasadzie kiedy próbuję użyć tego do pobrania zawartości sekcji .bss
, zawsze pojawia się błąd pokazany poniżej:
objdump -s -j .bss elf_binary objdump: section ".bss" mentioned in a -j option, but not found in any input file
Zasadniczo, jak mogę uzyskać zawartość sekcji .bss
z pliku binarnego ELF?
Odpowiedź
.bss
nie zawiera treści. Jest to po prostu wskazówka dla programu ładującego, aby wstępnie przydzielić trochę miejsca podczas uruchamiania programu. Podczas wykonywania będą wszystkie zera i nie będą zawierać żadnych przydatnych informacji, dopóki program do nich nie zapisze. Następnie możesz użyć debuggera, aby zrzucić pamięć i zbadać jej zawartość.
Więcej informacji znajdziesz na stronie Wikipedii.
Odpowiedź
.bss
blok rozpoczynający się od symbolu ( zwany także Niezainicjowanym segmentem danych – bss
to stara instrukcja asemblera na starym chipie IBM) sekcja ma zawierać global variables
i static variables
niezainicjowany lub zainicjowany na 0 lub NULL. Sekcja .bss
zwykle nie istnieje, dopóki program nie zacznie się uruchamiać, dlatego nie można „pobrać jej zawartości statycznie. Należy zauważyć, że ta sekcja pomaga zredukować program” Rozmiar s & przyspiesza ładowanie.