Вопрос

Я сталкиваюсь с проблемой при чтении информации, выгруженной из исполняемого файла в Linux.Информация заключается в следующем:

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

У меня есть два вопроса:

  1. что означают адреса 804a0ea и 804a0f4?виртуальный адрес в адресном пространстве процесса?
  2. что делает ...в смысле?как я могу получить инструкцию по адресу 804a0f0?

Заранее благодарю.

Дополнительная информация об этой части кода:

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

Надеюсь, кто-нибудь сможет мне помочь.:-)

Это было полезно?

Решение

В таблица глобального смещения указывает не на код, а на данные (hrm...смещения, на самом деле).Так что попытка разобрать его не даст очень значимого кода.(на самом деле вы можете определить, какие смещения, просмотрев значения кода.0804a014, ...080487a6).

Тот самый ...обычно это означает, что в потоке находится куча нулей.

Другие советы

  1. Скопируйте только ассемблерный код в текстовый редактор
  2. В первой строке введите main:(сборка для main())
  3. И сохраните файл как *.s
  4. Откройте терминал и введите gcc -s -o для компиляции или введите в terminal gdb а затем введите layout asm и введите затем print
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top