首页
论坛
课程
招聘
[原创]使用 gdb 对程序进行汇编级调试(第二篇 gdb 常用指令介绍)
2009-3-16 05:30 20399

[原创]使用 gdb 对程序进行汇编级调试(第二篇 gdb 常用指令介绍)

2009-3-16 05:30
20399
【文章标题】: 使用 gdb 对程序进行汇编级调试(之二 gdb 常用指令介绍)
【文章作者】: 范晨鹏
【作者邮箱】: p_168@163.com
【作者主页】: http://diylab.cnblogs.com
【作者QQ号】: 109427716
【作者声明】: 恭贺嵌入式版块的开张
--------------------------------------------------------------------------------
【详细过程】
  常用指令介绍
  

  开始/重新开始
  ( gdb) r     ( run )
  
  下断点
  (gdb) b *0x0804ce2b
   b 表示  break
  
  单步步过
  (gdb) ni    (next instruction)
  单步步入  
  (gdb) si    ( step instruction )
  继续执行
  ( gdb )c
  
  执行到返回
  (gdb) finish
  
  disas
  
  反汇编一段指令。可以带零个、一个或两个参数。第一个参数是反汇编开始地址,第二个参数是反汇编结束地址。
  
  如果没有参数,则反汇编当前的函数。
  
  
  内存读/写断点
  watch *(int  *)0x8049aa4
  在 0x8049aa4 处下写断点,断点的范围为 4个字节。
  gdb支持更大范围的内存写断点。但在汇编条件下,我还没有找到设置更大内存写断点的方法。
  rwatch ,awatch 用法同 watch ,分别表示读断点和 读写断点。
  读写断点依赖于 gcc可用的硬件高度寄存器。
  
  
  
  寄存器窗口
  
  (gdb) display
  
  设定要观察的变量的内容。这些变量的值在程序每次被断下来后显示在屏幕上。
  
  例如,我们经常要关注  eax, ebx, ecx,edx的内容,则用 display 设置他们为观察变量。
  
  (gdb) display  /x $eax
  
  (gdb) display  /x $ebx
  
  (gdb) display  /x $ecx
  
  (gdb) display  /x $edx
  
  
  (gdb) until
相当于 od  的 f4
  
  
  特色功能:
  1、设置反汇编代码使用的指令集
  (gdb) set disas intel
  
  设置反汇编代码使用的指令集,可选择 intel 指令集或 AT&T指令集.
  
  该指令只能用于x86平台。
  
  
  捕获 “段错误”的信号
  (gdb) handle SIGSEGV

  抛出异常时捕获
  (gdb) catch throw
  
  查看栈帧。
  (gdb) where
   
  强制返回
  (gdb) return
  程序直接从当前行跳转到 return 处。如果函数有返回值,则加在 return 命令之后。例如, return 1。跳转中,栈平衡是自动维护的。
   
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2009年03月16日 5:27:12

《0day安全 软件漏洞分析技术(第二版)》第三次再版印刷预售开始!

收藏
点赞0
打赏
分享
最新回复 (6)
雪    币: 2308
活跃值: 活跃值 (24)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
加百力 活跃值 12 2009-3-16 11:58
2
0
gdb 能够设置反汇编代码使用的指令集倒是一个很有意思的特点。
雪    币: 1223
活跃值: 活跃值 (46)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
yijun8354 活跃值 12 2009-3-16 13:23
3
0
再全点,结合点实例就好了
雪    币: 269
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
billstone 活跃值 6 2009-4-23 21:40
4
0
只是命令,太枯燥;多点实践更好,还有第三篇呢?!
雪    币: 399
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
kusky 活跃值 4 2009-7-16 00:07
5
0
不能编辑了?
雪    币: 2098
活跃值: 活跃值 (11)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
riijj 活跃值 7 2009-7-16 11:42
6
0
感觉 gdb 的指令太长 , 要自定义一下缩写

eg:

define dd
disas
end
雪    币: 84
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xnop 活跃值 2009-9-21 20:32
7
0
display  /x $ecx
貌似不行啊
游客
登录 | 注册 方可回帖
返回