天天看點

GDB 反彙編

1、disassemble反彙編指令:

disassemble 是以反彙編清單的形式輸出記憶體的内容,表示的格式由指令set disassembly-flavor确定

1.1不帶參數

預設的反彙編範圍是 所選擇幀的pc附近的函數

1.2單個參數

 就是pc, 當然也可以是函數名,因為函數名 也是一個 位址; 這樣範圍就是該pc附近的函數

:<<

disass func_name

>>:

1.3兩個參數

反彙編一段記憶體位址, 第1個參數是起始位址,第2個是終止位址

:<<

(gdb) disas /r 0x401365,0x401370

Dump of assembler code from 0x401365 to 0x401370:

=> 0x00401365: 0100 add DWORD PTR [eax],eax

0x00401367: 0000 add BYTE PTR [eax],al

0x00401369: 44 inc esp

0x0040136a: 134000 adc eax,DWORD PTR [eax+0x0]

0x0040136d: 8b 4424 1c mov eax,DWORD PTR [esp+0x1c]

End of assembler dump.

>>:

1.4 set disassembly-flavorintel 

将彙編指令格式 設定為intel格式,預設是att

(gdb) show disassembly-flavor

The disassembly flavor is “att”.

2、info指令:檢視内容

2.1指令info frame,info args和info local分别顯示堆棧幀,函數參數和局部變量的内容,info break顯示斷點編号。

2.2info line 指令來映射一個源碼行到程式位址,然後使用指令disassemble顯示一個位址範圍的機器指令。

:<<

檢視main函數的 開始和結束位址

(gdb) info line main

Line 34 of “rank.c” starts at address 0×804847f

 andends at 0×8048493 .

>>:

info line會修改 x/i 指令的預設的起始位址

:<<

(gdb) info line *0×804847f

Line 34 of “rank.c” starts at address 0×804847f

   andends at 0×8048493 .

>>"

3、x用來檢視傳回反彙編指令

x/3i $pc

顯示pc開始的3條指令

相關連結

1、GDB内幕(http://gnuarm.org/pdf/gdbint.pdf):一本關于GDB内幕的極好的指南。當需要改善源程式時,它非常有用。

2、用ptrace追蹤程序(http://linuxgazette.net/issue81/sandeep.html):一篇關于在Linux中使用最簡單的追蹤程式中的例子來進行追蹤的論文(在FreeBSD中的情形完全不同)。

3、在源程式中修正漏洞(http://www.linux-mag.com/2004-04/code_01.html):一篇關于利用源代碼分析進行早期查錯的論文。

4、使用CTrace庫(http://ctrace.sourceforge.net):一篇關于使用該庫來調試多線程應用程式的論文。