首页
社区
课程
招聘
[求助]硬件断点的问题
发表于: 2008-12-18 10:45 4116

[求助]硬件断点的问题

2008-12-18 10:45
4116
我想做个简单的调试器,在处理硬件断点这里,比如我要在401000下硬件断点
DbgContext.Dr0 := $401000;
DbgContext.Dr7 := $401;
被调试程序就一直在$401000处断下,不会运行起走,我想让他每次运行到这里都被断下,像OD那样,怎么解决呢?
我在网上只找到这样的方法:在401000断下处理后,把断点设到另一个地方去,比如401001,当在401001断下时再写回401000,但是这样会很卡,被调试程序没几下就挂掉了

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 204
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我觉得可以这样做,思路如下:
当$401000处断点触发之后,设置TF标志位,使程序处于单步运行状态。然后清除$401000处断点执行,这个时候在执行完$401000处的指令后系统抛出一个单步执行异常,这个异常被你的调试器捕获,然后调试器就可以清除TF标志位,将$401000处重新设置硬件断点,设置好运行环境之后将控制权交给被调程序继续运行。
我以为,这种方法比你的方法更加稳定可靠,而且不需要额外的占用调试寄存器。
2008-12-22 11:37
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
3
对,TF,先跟踪一步。

OD中当硬件执行断点被触发后就是这样的,直接按F9是不走的,需要先F7/F8一下再走。
2008-12-22 11:44
0
雪    币: 215
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
还有个问题啊,硬件断点只对单个线程有效吧,怎么让他对所有线程都有效呢?难道要每个线程都去设置一次?
2008-12-23 08:17
0
雪    币: 204
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
看来楼主连线程的概念都没有确切的搞清楚就开始写调试器了。还是先去看看操作系统的书吧。。
2008-12-23 08:31
0
雪    币: 215
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我本来就不是搞你们这行的,我是搞艺术设计的,爱好而已
我现在要断一个程序,断不下来,我能想到的原因就2个:我代码问题、程序清空了Drx
但是调试其他程序又正常,所以排除第一个
调试我的程序发现Drx又没被清空
百度了半天只有一个搜索结果,说是因为是其他线程进行的修改,所以断不下来

自己弄个程序试了下,果然不同的线程就断不下来
2008-12-23 09:16
0
游客
登录 | 注册 方可回帖
返回
//