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