http://hi.baidu.com/donghongchen/item/6cb85921fa97578b6f2cc37b
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):一篇关于使用该库来调试多线程应用程序的论文。