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, objdumpele 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.outdespeja 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 stripe você costumava -ggerar 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 gdbpara 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.