Pergunta

Encontro um problema ao ler as informações despejadas em um arquivo executável no Linux. A informação é a seguinte:

804a0ea:  04 08            add $0x8, %al
     ...
804a0f4:  a6               cmpsb %es:(%edi),%ds:(%esi)

Eu tenho duas perguntas:

  1. O que significa o endereço 804A0AEA e 804A0F4? O endereço virtual no espaço de endereços do processo?
  2. O que significa ...? Como posso obter instruções no endereço 804A0F0?

Desde já, obrigado.

Mais informações sobre esta parte do código:

Disassembly of section .got.plt:

    0804a0e8 <_GLOBAL_OFFSET_TABLE_>:
     804a0e8:       14 a0                   adc    $0xa0,%al
     804a0ea:       04 08                   add    $0x8,%al
            ...
     804a0f4:       a6                      cmpsb  %es:(%edi),%ds:(%esi)
     804a0f5:       87 04 08                xchg   %eax,(%eax,%ecx,1)
     804a0f8:       b6 87                   mov    $0x87,%dh
     804a0fa:       04 08                   add    $0x8,%al
     804a0fc:       c6 87 04 08 d6 87 04    movb   $0x4,-0x7829f7fc(%edi)
     804a103:       08 e6                   or     %ah,%dh
     804a105:       87 04 08                xchg   %eax,(%eax,%ecx,1)
     804a108:       f6 87 04 08 06 88 04    testb  $0x4,-0x77f9f7fc(%edi)
     804a10f:       08 16                   or     %dl,(%esi)
     804a111:       88 04 08                mov    %al,(%eax,%ecx,1)
     804a114:       26 88 04 08             mov    %al,%es:(%eax,%ecx,1)
     804a118:       36 88 04 08             mov    %al,%ss:(%eax,%ecx,1)
     804a11c:       46                      inc    %esi

Espero que alguém possa me dar uma mão. :-)

Foi útil?

Solução

o Tabela de deslocamento global Não está apontando para codificar, está apontando para dados (compensações de HRM ... na verdade). Portanto, tentar desmontar isso não dará um código muito significativo. (Você pode encontrar quais compensações observando os valores do código. 0804A014, ... 080487A6).

O ... geralmente significa que um monte de 0 estão no riacho.

Outras dicas

  1. Copie apenas o código de montagem para o editor de texto
  2. No tipo de primeira linha principal: (montagem para main ())
  3. E salve o arquivo como um *.s
  4. Abra o terminal e digite gcc -s -o para compilar ou digitar o GDB do terminal e depois digite o layout ASM e digite então imprimir
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top