Hvorfor kan jeg ikke direkte få innholdet i `.bss`-delen?

Testen er på Linux 32bit.

Jeg bruker denne kommandoen for å få konteksten til .text .rodata og .data seksjon:

objdump -s -j .text elf_binary objdump -s -j .rodata elf_binary objdump -s -j .data elf_binary 

Men i utgangspunktet når jeg prøvde å bruke dette for å få innholdet til .bss -delen, får jeg alltid feilen vist nedenfor:

objdump -s -j .bss elf_binary objdump: section ".bss" mentioned in a -j option, but not found in any input file 

I utgangspunktet hvordan kan jeg få innholdet i .bss -seksjonen fra ELF-binær?

Svar

.bss har ikke noe innhold. Det er bare et tips til lasteren om å forhåndslokalisere litt plass når du starter programmet. Det vil være alle 0ene ved utførelsen og vil ikke inneholde nyttig informasjon til programmet skriver til det. Etter det kan du bruke en feilsøking for å dumpe minnet og utforske innholdet.

Sjekk Wikipedia -siden for mer informasjon.

Svar

.bss blokken startet med symbol ( også kalt Uninitialized datasegment – bss er en gammel monteringsinstruksjon på en gammel IBM-chip) -seksjonen skal inneholde global variables og static variables ikke initialisert eller initialisert til 0 eller NULL. .bss -delen er vanligvis ikke eksisterende før programmet begynner å kjøres. Dette er grunnen til at du ikke kan hente innholdet statisk. Det er ganske viktig å merke seg at denne delen bidrar til å redusere programmet » s størrelse & gjør det raskere å laste inn.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *