能力值:
( LV2,RANK:10 )
|
-
-
2 楼
谢谢lz
这个od能调试了?
下载看看
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
mark
正好前一段时间看到类似drx,和楼主探讨下。
如果被调试程序自己修改drx来设置硬件断点,这个断点是不能被OD截获的,所以如要模拟被调试程序的流程,只能找到那个断点的位置,然后F2再F9。而在被调试程序设置好这个断点,到调试到那个断点之间这段过程,不能在OD里F7或者F8,因为这样也会修改drx的值,导致前面的断点失效。
而测试的时候我却发现:通过OD添加的硬件断点也是修改drx的值,如果在这个硬件断点之前F8/F7,虽然drx也会被修改,但是这个硬件断点却能被触发。何解?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
这个有用,学习一下,谢谢分享,新年快乐~~~~
|
能力值:
( LV13,RANK:388 )
|
-
-
5 楼
可以截获 bp KiUserExceptionDispatcher
不仅仅是不能F78 任何暂停继续的动作都会导致od清drx
你设置的断点od会记录下来,和f8的临时硬段一起set进context,set进context的时候od不关心他记录以外的drx内容
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
你这里说的“set进context”也是值修改context里的drx的值吧
如果通过OD下的hp是修改context里的drx,F8会修改context,那HP怎么会被断下来的?
|
能力值:
( LV13,RANK:388 )
|
-
-
7 楼
hp是什么,硬断?od有自己数据结构来管理断点,f8的时候他会看自己的数据结构,如果有空闲的drx就使用,没有就cc
当然 你得勾上那个选项
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
我HOOK INT 01 这样下硬件断点可以成功.
__asm
{
PUSH EAX
MOV EAX, 断点一
MOV DR0, EAX
MOV EAX, 断点二
MOV DR1, EAX
MOV EAX, DR7
OR EAX, 0x270F
MOV DR7, EAX
POP EAX
}
可是为什么我取消断点 :
__asm
{
PUSH EAX
MOV EAX, 0
MOV DR0, EAX
MOV DR1, EAX
MOV EAX, DR7
AND EAX, 0xFFFFFFF0
MOV DR7, EAX
POP EAX
}
这样取消断点不行呢...希望大牛指点.
比如我重新设硬断断点也不行.
__asm
{
PUSH EAX
MOV EAX, 新断点一
MOV DR0, EAX
MOV EAX, 新断点二
MOV DR1, EAX
MOV EAX, DR7
OR EAX, 0x270F
MOV DR7, EAX
POP EAX
}
望各位大牛指点...解惑.
难道必须用NtSetContextThread 和异常来设置硬件断点么?
|
|
|