O core dump é apenas o dump da pegada de memória de seus programas; se você souber onde estava tudo, poderá usá-lo.
Você usa o executável porque explica onde (em termos de endereços lógicos) as coisas estão localizadas na memória, ou seja, o arquivo principal.
Se você usar um comando, objdump
ele fará o dump dos metadados sobre o objeto executável que você está investigando. Usando um objeto executável chamado a.out como exemplo.
objdump -h a.out
despeja apenas as informações do cabeçalho, você verá seções nomeadas, por exemplo. .data ou .bss ou .text (há muito mais). Eles informam ao carregador do kernel onde, no objeto, várias seções podem ser encontradas e onde, no espaço de endereço do processo, a seção deve ser carregada e, para algumas seções (por exemplo, .data .text), o que deve ser carregado. (a seção .bss não contém nenhum dado no arquivo, mas se refere à quantidade de memória a ser reservada no processo para dados não inicializados, é preenchida com zeros).
O layout do arquivo de objeto executável está em conformidade com um ELF padrão.
objdump -x a.out
- despeja tudo
Se o objeto executável ainda contiver suas tabelas de símbolos (ele não foi retirado - man strip
e você costumava -g
gerar geração de depuração para gcc
assumir a compilação da fonte de CA), poderá examinar o conteúdo principal por nomes de símbolos, por exemplo, se você tivesse uma variável / buffer chamado inputLine no seu código-fonte, você pode usar esse nome gdb
para examinar seu conteúdo. isto é gdb
, saberia o deslocamento desde o início do segmento de dados inicializado de seus programas onde o inputLine inicia e o tamanho dessa variável.
Leitura adicional Artigo 1 ,
Artigo 2 e para a especificação Executable and Linking Format (ELF) .
Atualizar após o comentário @mirabilos abaixo.
Mas se usar a tabela de símbolos como em
$ gdb --batch -s a.out -c core -q -ex "x buf1"
Produz
0x601060 <buf1>: 0x72617453
e depois não usar a tabela de símbolos e examinar o endereço diretamente em,
$ gdb --batch -c core -q -ex "x 0x601060"
Produz
0x601060: 0x72617453
Examinei a memória diretamente sem usar a tabela de símbolos no segundo comando.
Vejo também que a resposta de @ user580082 adiciona mais explicações e fará uma votação positiva.