2010-03-30 107 views
1

从Linux中的可执行文件中读取信息时,遇到问题。 的信息如下:如何从objdump获取信息

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 

希望任何人都可以给我一个手:-)

+0

我认为你需要添加一点点的信息。 – Johan 2010-03-30 15:46:56

回答

1

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

......通常意味着一串0在流中。

+0

我在发表这个问题后不久就认识到了这一点。由于我新来到这里,我不知道如何关闭线程:-)。谢谢你们一样。顺便说一下,0x0804a014是否在进程的地址空间中寻址虚拟地址? – 2010-04-01 02:01:59

2
  1. 仅复制汇编代码的文本编辑器
  2. 在第一行型主:(组件,用于主())
  3. 并保存该文件作为* .S
  4. 打开终端和键入GCC -s ​​-o编译 或输入端子GDB 然后键入布局ASM和类型,然后打印