Perché non riesco a ottenere direttamente il contenuto della sezione `.bss`?

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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *