“O Objdump é um utilitário de linha de comando usado para exibir informações sobre um objeto em sistemas do tipo Unix. O comando, quando usado, obtém as informações de um arquivo de objeto, mesmo quando você não tem seu código -fonte. Portanto, pode ser uma ferramenta de depuração para arquivos de objeto, especialmente ao trabalhar com programas do compilador.”
Este guia abrange os diferentes usos do comando Objdump com exemplos. Confira.
Usos do comando Objdump
O Objdump tem 6 propósitos principais:
Sua sintaxe básica é:
$ objdump
Existem muitas opções para usar com o comando Objdump e você pode ver a página de ajuda para vê -los.
$ objdump -Help
Este artigo usará o /Bin /Echo como nosso arquivo de objeto para nossos exemplos. No entanto, você pode usar outros arquivos de objeto, como os programas C. O uso ainda é o mesmo.
Trabalhando com Objdump
Exibir cabeçalhos de arquivo do arquivo de objeto
A opção -f, quando usada com o comando Objdump, recupera todos os cabeçalhos de arquivo associados a um determinado arquivo de objeto, como mostrado abaixo. Lembre -se, estamos usando o /bin /eco, que é um arquivo executável binário para o comando Echo como nosso objeto neste caso.
$ objdump -f /bin /echo
A saída resultante que exibe os cabeçalhos do arquivo será:
Você pode observar o formato e os cabeçalhos do arquivo de objeto da saída.
Para obter os cabeçalhos de arquivo específicos para objetos
Se você precisar exibir cabeçalhos de arquivo específicos para o arquivo de objeto que você está usando, use a opção -p.
$ objdump -p /bin /eco
Exibir conteúdo do cabeçalho da seção
Cada arquivo tem diferentes cabeçalhos de seção. Se você precisar exibir o conteúdo de cada um dos cabeçalhos da seção, use a opção -h.
$ objdump -h /bin /eco
Nesse caso, a saída foi:
A partir da saída, você pode notar que os diferentes cabeçalhos de seção são numerados de 1 e cada cabeçalho da seção tem seu tamanho, VMA, LMA, arquivo desligado e Algn.
Tamanho: representa o tamanho da seção carregada.
VMA: representa o endereço de memória virtual
Lma: representa o endereço de memória lógica
Arquivar: representa o deslocamento da seção desde o início do arquivo.
Algn: representa o alinhamento da seção.
Os outros detalhes, como aloc, dados, leitura e conteúdo, são os diferentes sinalizadores que representam se a seção for reado ou carregada.
Exibir informações de todos os cabeçalhos
Você também pode obter todas as informações sobre os cabeçalhos no arquivo de objeto. Para fazer isso, use a opção -x.
$ objdump -x /bin /echo
Neste exemplo, a saída parcial para o comando acima será:
Para obter o conteúdo do assembler da seção executável
Para obter o conteúdo do assembler da seção executável, use a opção -d.
$ objdump -d /bin /eco
Neste exemplo, a saída parcial é:
A saída é dividida em seções executáveis e, para cada uma, seus conteúdos de assembler são exibidos como mostrado. Por exemplo, você pode ver a seção “.init ”e seu conteúdo correspondente do assembler abaixo dele antes de prosseguir para a próxima seção executável do arquivo de objeto.
Obtenha o conteúdo do assembler de cada seção
O -d exibe o conteúdo do assembler apenas das seções executáveis. No entanto, use a opção D se precisar do conteúdo para todas as seções de arquivo.
$ objdump -d /bin /eco
Para obter todo o conteúdo de todas as seções
Para isso, use a opção -s
$ objdump -s /bin /eco
A saída para todas as seções e seu conteúdo será:
Exibir informações de depuração
A opção -g exibe todas as informações de depuração disponíveis do arquivo de objeto.
$ objdump -g /bin /echo
Exibir conteúdo da tabela de símbolos
Se o arquivo de objeto tiver uma tabela de símbolos, você poderá exibir seu conteúdo usando a opção -t
$ objdump -t /bin /echo
Conclusão
Um comando Objdump é uma ferramenta útil para programadores que lidam com compiladores. O comando tem vários usos e cobrimos o exemplo mais comum de uso. Você também pode verificar a página do homem para obter mais detalhes sobre como usar a ferramenta. Além disso, o comando pode ficar um pouco esmagador. Então, continue praticando mais. Tudo de bom!