Por que não consigo obter diretamente o conteúdo da seção `.bss`?

O teste é em Linux de 32 bits.

Eu uso este comando para obter o contexto de .text seção .rodata e .data:

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

Mas basicamente quando tentei usar isso para obter o conteúdo da seção .bss, sempre recebo o erro mostrado abaixo:

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

Basicamente, como posso obter o conteúdo da .bss seção do binário ELF?

Resposta

O .bss não tem conteúdo. É simplesmente uma dica para o carregador pré-alocar algum espaço ao iniciar o programa. Ele terá apenas 0s na execução e não conterá nenhuma informação útil até que o programa grave nele. Depois disso, você pode usar um depurador para despejar a memória e explorar seu conteúdo.

Verifique a página da Wikipedia para obter mais informações.

Resposta

O .bss bloco iniciado pelo símbolo ( também chamado de segmento de dados não inicializado – bss é uma antiga instrução de montagem em um antigo chip IBM), a seção deve conter global variables e static variables não inicializado ou inicializado como 0 ou NULL. A seção .bss geralmente não existe até que seu programa comece a ser executado, é por isso que você não pode “recuperar seu conteúdo estaticamente. É bastante importante observar que esta seção ajuda a reduzir o programa” s tamanho & torna mais rápido o carregamento.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *