-
-
[旧帖]
[求助]请教怎么使用DR0。下硬件执行断点。
0.00雪花
-
发表于:
2012-2-9 21:14
1390
-
[旧帖] [求助]请教怎么使用DR0。下硬件执行断点。
0.00雪花
我这样写就出错
__asm
{
pushad
pushfd
mov eax,0x8053e540 //0x8053e540 是一个函数的首地址
mov dr0,eax
mov eax,1
mov dr7,eax
popfd
popad
}
求教该怎么写代码。。
我是参照的:
(1) 在Dr0到Dr3中找一个可用的寄存器,将其值填写为要断下的地址。 //写了
(2) 设置Dr7对应的GX或LX位为1。(例如断点设置在Dr0上则设置Dr7的G0或L0位为1)。 //写入1
(3) 设置Dr7对应的断点类型位(R/W0到R/W3其中之一)为执行、写入或访问类型。
5. R/W0-R/W3:(由第16,17,20,21,24,25,28,29位控制):这个东西的处理有两种情况。
如果CR4的DE被置位,那么,他们按照下面的规则处理问题:
00:执行断点
01:数据写入断点
10:I/0读写断点
11:读写断点,读取指令不算
如果DE置0,那么问题会这样处理:
00:执行断点
01:数据写入断点
10:未定义
11:数据读写断点,读取指令不算
//因为是硬件执行,所以不关心CR4,直接给 0x00
(4) 设置Dr7对应的断点长度位(LEN0到LEN3其中之一)为1、2或4字节。
6. LEN0-LEN3:(由第18.19.22.23.26.27.30位控制):指定内存操作的大小。
00:1字节(执行断点只能是1字节长)
//还是默认 0x00 不管他。
==============
而我在使用DR0前,已经确定dr0为0。也就是没有硬断。
我的代码是在驱动中。所以地址是8*的。没使用SetThread**
现在的问题就是,断点没起作用,windbg调试发现在R3异常了,很不解。想不明白
[课程]Android-CTF解题方法汇总!