Dlaczego nie mogę bezpośrednio pobrać zawartości sekcji „.bss”?

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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *