gdb反汇编

来源:互联网 发布:网络教育统考严吗 编辑:程序博客网 时间:2024/06/06 12:24

gdb反汇编

好吧,我承认我对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):一篇关于使用该库来调试多线程应用程序的论文。

0 0