能力值:
( LV5,RANK:60 )
|
-
-
2 楼
提示什么错误?
|
能力值:
(RANK:410 )
|
-
-
3 楼
CONTEXT结构中没有iDr4的定义。
CONTEXT STRUCT
ContextFlags DWORD ?
iDr0 DWORD ?
iDr1 DWORD ?
iDr2 DWORD ?
iDr3 DWORD ?
iDr6 DWORD ?
iDr7 DWORD ?
FloatSave FLOATING_SAVE_AREA <>
regGs DWORD ?
regFs DWORD ?
regEs DWORD ?
regDs DWORD ?
regEdi DWORD ?
regEsi DWORD ?
regEbx DWORD ?
regEdx DWORD ?
regEcx DWORD ?
regEax DWORD ?
regEbp DWORD ?
regEip DWORD ?
regCs DWORD ?
regFlag DWORD ?
regEsp DWORD ?
regSs DWORD ?
ExtendedRegisters db MAXIMUM_SUPPORTED_EXTENSION dup(?)
CONTEXT ENDS
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
哈哈,从这个例子里我门可以真正看到seh结构化处理的威力,他不仅恢复了ecx的内容而且使程序按照你想要的顺序执行了,哈哈,如果你对反跟踪很感兴趣的话,你还可以在例程中加入
xor ebx,ebx
mov [eax].iDr0,ebx
mov [eax].iDr2,ebx
mov [eax].iDr3,ebx
mov [eax].iDr4,ebx
清除断点,跟踪者....嘿嘿,不说你也体验过,当然也可以通过检验drx的值来判断是否被跟踪,更复杂地,你可以设置dr6,和dr7产生一些有趣的结果,我就不罗嗦了.
这是 软件加密技术内幕 上的内容。
为什么没有定义idr4,5?
|
能力值:
(RANK:410 )
|
-
-
5 楼
那是软件加密技术内幕书的笔误。不是没有定义,而是硬件寄存器只有0~3和6~7这6个调试寄存器,没有4~5
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
原来如此,多谢小虾!
xor ebx,ebx
mov [eax].iDr0,ebx
mov [eax].iDr1,ebx
mov [eax].iDr2,ebx
mov [eax].iDr3,ebx
改成这样后用ollydbg调试,怎么不能清楚断点?
|
能力值:
(RANK:410 )
|
-
-
7 楼
貌似还必须清除Dr6的值和设置Dr7的值为155h。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
改成这样还是不行。
这里清除的断点是不是ollydbg中的断点?ollydbg中的断点可以多于4个。
xor ebx,ebx
mov [eax].iDr0,ebx
mov [eax].iDr1,ebx
mov [eax].iDr2,ebx
mov [eax].iDr3,ebx
mov [eax].iDr6,ebx
mov [eax].iDr7,155h
|
能力值:
( LV5,RANK:60 )
|
-
-
9 楼
应该有iDr4和iDr5吧
是不是保留没有使用???
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
保留的,也不能用!除非硬件手册明确说了可以使用,不然就是指令非法故障。
|
|
|