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.
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ă.