如何从objdump获取信息

时间:2010-03-30 15:44:42

标签: assembly binutils objdump

在读取从linux中的可执行文件中转出的信息时遇到问题。 信息如下:

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

我有两个问题:

  1. 地址804a0ea和804a0f4是什么意思?进程地址空间中的虚拟地址?
  2. 这意味着什么?我如何在地址804a0f0获得指令?
  3. 提前致谢。

    有关此部分代码的更多信息:

    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
    

    希望有人能帮助我。: - )

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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