Como objdump desmonta o binário elf

1

Eu tenho uma pergunta rápida. Eu tenho gerado um binário ELF de um código c usando o seguinte código:

gcc -o simple simple.c

Então objdump para esse binário ELF:

objdump --disassemble-all simple

Eu verifiquei meu diretório com ls -a que não há arquivo .o lá. Minha pergunta ainda como objdump me mostra o código desmontar completamente? objdump faz análise estática no binário para cobrir todo o código?

    
por Mustakimur Rahman 07.02.2017 / 00:06

1 resposta

3

objdump mostra o código desmontado porque esse é o seu trabalho. Ele conhece o formato do arquivo executável. Os executáveis não são apenas uma sequência direta de instruções: eles têm estrutura. Os executáveis geralmente começam com um cabeçalho contendo vários metadados e são organizados em seções. Os executáveis dinamicamente vinculados necessariamente contêm informações suficientes para o vinculador dinâmico, portanto, devem indicar quais símbolos o executável precisa e uma indicação de onde esses símbolos serão carregados para que o programa possa encontrá-los quando for executado.

Por exemplo, a maioria dos sistemas Unix usa ELF (existem outros formatos). Se objdump detectar um binário ELF (verificando o número mágico no início do arquivo), analisa o cabeçalho do arquivo , que permite saber onde estão localizados o cabeçalho do programa e as tabelas de seção. Cada seção contém uma indicação de que tipo de conteúdo contém. objdump analisa cada seção de acordo com seu tipo. Quando ele vê uma seção que deve conter código, ele executa um desassemblador.

A desmontagem é bastante simples, em princípio: o código é uma lista de instruções, e a desmontagem está apenas traduzindo de uma representação binária de instruções para uma representação textual. O desmontador apenas pega as instruções em ordem. Na prática, as coisas podem ser mais complicadas em arquiteturas em que as instruções têm um tamanho variável e porque os dados podem ser incorporados em seções de código. objdump geralmente funciona em executáveis “normais”, mas pode não produzir uma saída sensata em binários que foram deliberadamente ofuscados.

objdump não realiza nenhuma análise estática. Faz apenas uma análise e tradução direta, não faz nenhuma análise do que as instruções significam.

    
por 07.02.2017 / 01:07