De ce nu pot obține direct conținutul secțiunii `.bss`?

Testul este pe Linux pe 32 de biți.

Folosesc această comandă pentru a obține contextul .text .rodata și .data secțiune:

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

Dar practic când am încercat să folosesc acest lucru pentru a obține conținutul secțiunii .bss, primesc întotdeauna eroarea prezentată mai jos:

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

Practic, cum pot obține conținutul secțiunii .bss din binarul ELF?

Răspuns

.bss nu are conținut. Este pur și simplu un sfat pentru încărcător pentru a prealoca un spațiu la pornirea programului. Va fi tot 0 la execuție și nu va păstra nicio informație utilă până când programul nu îi scrie. După aceea, puteți utiliza un depanator pentru a arunca memoria și a explora conținutul acesteia.

Verificați pagina Wikipedia pentru mai multe informații.

Răspuns

Blocul .bss început de simbol ( numit și segment de date neinițializat – bss este o instrucțiune de asamblare veche pe un cip antic IBM) secțiunea ar trebui să conțină global variables și static variables neinițializat sau inițializat la 0 sau NULL. Secțiunea .bss este de obicei inexistentă până când programul dvs. începe să se execute, acesta fiind motivul pentru care „nu-i puteți recupera conținutul în mod static. Este destul de important să rețineți că această secțiune ajută la reducerea programului” Dimensiunea s & face ca încărcarea să fie mai rapidă.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *