调试寄存器(DRx)理论与实践

导读:

标 题:DRx寄存器的使用(待续) (4千字)
发信人:hume  
时 间:2003-06-18 17:33:11
详细信息:




调试寄存器(DRx)理论与实践
By Hume/冷雨飘心
前言+牢骚:
生活的苦痛就象烈火,时时煎熬着伤痕累累疲惫不堪的那颗心。我拼力挣扎,然而却无济于事……
太残酷了….上帝也在苦笑。
                                              题记

很多人问Drx调试寄存器的用法,网上实际上有很多资料,但是很多人还是不肯去翻,于是我来写点东西,算是给对DRx尚有疑惑的解答吧。不要在QQ上问我任何问题,如果有错误,请来信指明:Humewen@21cn.com。

1.一点理论
=====
本文假设你已经知道调试器的使用方法以及bpx,bpm,int 3,异常都分别是什么,本文不是一篇超级扫盲教程。
Intel 80386以上的CPU提供了调试寄存器以用于软件调试。386和486包括6个调试寄存器:Dr0,Dr1,Dr2,Dr3,Dr6和Dr7。这些寄存器全是32位,如下图所示:

   |---------------|----------------|
Dr0|                 用于一般断点的线性地址                    
   |---------------|----------------|
Dr1|                 用于一般断点的线性地址                    
   |---------------|----------------|
Dr2|                 用于一般断点的线性地址                    
   |---------------|----------------|
Dr3|                 用于一般断点的线性地址                    
   |---------------|----------------|
Dr4|                     保留                                
   |---------------|----------------|
Dr5|                     保留                                
   |---------------|----------------|
Dr6|                              |BBB                     BBB B |
   |                              |TSD                      3 2 1 0 |
   |---------------|----------------|
Dr7|RWE LEN   ...    RWE LEN    |  G               GLGLGLGLGL |
   | 3   3    ...        0    0     |  D               E E 3 3 2 21 100 |
   |---------------|----------------|
31                            15                                0


Dr0~3用于设置硬件断点,即在调试器中经常使用的bpm断点,由于只有4个断点寄存器,所以最多只能设置4个bpm断点。Dr7是一些控制位,用于控制断点的方式,Dr6用于显示是哪些引起断点的原因,如果是Dr0~3或单步(EFLAGS的TF)或由于GD置位时访问调试寄存器引起1号调试陷阱的话,则相应设置对应的位。下面对Dr6和Dr7的对应位做一些详细介绍:

调试控制寄存器Dr7:
==========
位0 L0和位1 G0:用于控制Dr0是全局断点还是局部断点,如果G0置位则是全局断点,L0置位则是局部断点。
G1L1~G3L3用于控制D1~Dr3,其功能同上。

LEN0:占两个位,开始于位15,用于控制Dr0的断点长度,可能取值:
00  1字节
01  2字节
10  保留
11  4字节
RWE0:从第17位开始,占两个位,控制Dr0的断点是读、写还是执行断点或是I/O端口断点:
00  只执行
01 写入数据断点
10 I/O端口断点(只用于pentium+,需设置CR4的DE位)
11 读或写数据断点
RWE1~3,LEN1~3分别用于控制Dr1~3的断点方式,含义如上。

还有一个GD位:用于保护DRx,如果GD位为1,则对Drx的任何访问都会导致进入1号调试陷阱。即IDT的对应入口,这样可以保证调试器在必要的时候完全控制Drx。

调试状态寄存器Dr6:
====

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值