código desmontado de executável x código máquina - diferença dos comandos [RESOLVIDO]

1. código desmontado de executável x código máquina - diferença dos comandos [RESOLVIDO]

rodrigo
rodrigosf2000

(usa Outra)

Enviado em 30/08/2008 - 15:30h

Qual a diferença dos códigos gerados pelos comandos:

objdump -d teste.ex1 > teste.d1

e

objdump -s teste.ex1 > teste.d1

E como faço pra encontrar o código máquina no arquivo gerado pelo primeiro comando "objdump -d teste.ex1 > teste.d1" ?

os códigos já foram deixados em um tópico (a seguir) criado por outro usuário.
http://www.vivaolinux.com.br/topico/C-C++/CODIGO-ABAIXO-LINGUEM-DE-MAQUINA


  


2. Re: código desmontado de executável x código máquina - diferença dos comandos [RESOLVIDO]

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 30/08/2008 - 19:51h

considerando a "desmontagem" apenas da seção .text (código),
observe as três colunas de dados geradas pelo objdump:

coluna 1:
posição de memória (relativa ao processo) que alimentará o registrador eip (instruction pointer, x86-32). pode ser modificada através da diretiva org

coluna 2: opcode da instrução. ou seja, esse é o código de máquina em formato hexadecimal. cada opcode é construído a partir da instrução correspondente, onde entra em jogo o mnemônico, os operandos, o modo de endereçamento, flags, etc, e é estritamente dependente da arquitetura.

coluna 3:
aqui a diferença entre o -d e -s.
-d: produz na saída o código assembly correspondente à instrução/opcode - logicamente sob o formato assembly específico para o processador em questão.
-s: produz na saída o código máquina "puro". cada opcode está ali representado por seu equivalente numérico no formato ascii.