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.
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.