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):一篇關于使用該庫來調試多線程應用程式的論文。