Il test è su Linux a 32 bit.
Uso questo comando per ottenere il contesto di .text
.rodata
e .data
sezione:
objdump -s -j .text elf_binary objdump -s -j .rodata elf_binary objdump -s -j .data elf_binary
Ma sostanzialmente quando ho provato a utilizzarlo per ottenere il contenuto della sezione .bss
, ottengo sempre lerrore mostrato di seguito:
objdump -s -j .bss elf_binary objdump: section ".bss" mentioned in a -j option, but not found in any input file
Fondamentalmente come posso ottenere il contenuto della sezione .bss
dal binario ELF?
Risposta
.bss
non ha contenuti. È semplicemente un suggerimento per il caricatore di preallocare un po di spazio quando si avvia il programma. Sarà tutti 0 durante lesecuzione e non manterrà alcuna informazione utile fino a quando il programma non scrive su di esso. Dopodiché, puoi utilizzare un debugger per scaricare la memoria ed esplorarne il contenuto.
Controlla la pagina di Wikipedia per ulteriori informazioni.
Risposta
Il .bss
blocco avviato da un simbolo ( chiamato anche segmento di dati non inizializzati – bss
è una vecchia istruzione di assembly su un vecchio chip IBM) la sezione dovrebbe contenere global variables
e static variables
non inizializzato o inizializzato su 0 o NULL. La sezione .bss
di solito non esiste fino a quando il programma non inizia lesecuzione, ecco perché non puoi “recuperarne il contenuto staticamente. È abbastanza importante notare che questa sezione aiuta a ridurre il programma” s size & rende più veloce il caricamento.