Pergunta

Eu tenho usado objdump de olhar para o código de montagem em binários Linux ELF.

Às vezes, há um salto indireta através de uma tabela salto que é armazenado no rodata (somente leitura de dados) seção.

Como chegar objdump ou qualquer outra ferramenta para me mostrar o conteúdo desta seção de dados?

Eu poderia executar o programa e examinar os endereços relevantes no depurador, mas eu não quero fazer isso porque tem que ser feito de forma interativa.

A resposta ideal irá identificar uma ferramenta que não só irá me mostrar o conteúdo, mas me deixa controlar o formato de exibição, tanto quanto od faz.

Foi útil?

Solução

objdump -s -j .rodata exefile

dá uma hex despejo ASCII side-by-side / impressão do conteúdo da seção rodata como:

Contents of section .rodata:
 0000 67452301 efcdab89 67452301 efcdab89  gE#.....gE#.....
 0010 64636261 68676665 64636261 68676665  dcbahgfedcbahgfe

Não parece que há qualquer coisa lá para controlar a formatação, mas é um começo. Você pode sempre undump o hex e alimentá-lo para od, suponho:)

Outras dicas

readelf -x .rodata hello_world.o

dá:

Hex dump of section '.rodata':
  0x00000000 48656c6c 6f20776f 726c6421 0a       Hello world!.

Você deve preferir readelf quando possível desde objdump simplesmente não mostra algumas seções como .symtab: Por que não objdump mostrar .bss, .shstratab, .symtab e .strtab seções?

Você também pode extrair os bytes brutos com as técnicas mencionadas em: como você extrair apenas o conteúdo de uma seção ELF e como mencionado por ysdx .

Você pode obter o RAW (não hexdump-ed) seção ELF com:

# To a file:
objcopy file /dev/null --dump-section .text=text.data
# To stdout:
objcopy file /dev/null --dump-section .text=/dev/stdout | cat

Aqui eu estou usando | cat a fim de forçar stdout para ser um tubo. /dev/stdout pode funcionar inesperadamente se stdout é um arquivo. .text=- não envia a saída padrão, mas para o arquivo -.

No entanto objcopy e objdump ter algumas deficiências (porque eles são baseados em BFD que abstrai diferentes formatos executáveis).

Update: eu escrevi um ferramenta para fazer isso que não depende em BFD.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top