2010-03-30 63 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和類型,然後打印