1

读取从 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

希望任何人都可以帮助我。:-)

4

2 回答 2

2
  1. 仅将汇编代码复制到文本编辑器
  2. 在第一行键入 main:(main() 的程序集)
  3. 并将文件另存为 *.s
  4. 打开终端并输入 gcc -s -o 进行编译或输入终端 gdb 然后输入 layout asm 并输入然后打印
于 2011-05-14T09:56:54.873 回答
1

全局偏移表不是指向代码,而是指向数据(实际上是 hrm... 偏移量)。所以试图反汇编它不会给出非常有意义的代码。(您实际上可以通过查看代码值找到哪些偏移量。0804a014,... 080487a6)。

... 通常意味着流中有一堆 0。

于 2010-03-31T18:51:27.733 回答