能力值:
( LV2,RANK:10 )
|
-
-
2 楼
自已顶一下,请求解答:
是我对内存断点理解有误,还是OD的问题? 谢...
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
没人回答,我就自已解决:
一、先用汇编写一段最简单的测试程序:
start:
nop
nop
push eax <=== 1
pop ebx <=== 2
nop
nop
ret
end start
OD加载后,ESP=0012FFC4
在0012FFC0处设置内存访问断点,F9运行,OD中断在push eax语句上,再F9,OD中断在 pop ebx 上,这都很正确。再F9,问题就来了,OD出现“访问违规,正在执行[00000000] - 使用 Shift+F7/F8/F9来忽略异常"
OD重新加载上述程序:在0012FFC0处设置内存写入断点,F9运行,OD中断在 push eax 上,这很正确。再F9,程序正常退出。
有点怪:在堆栈区可以设置“内存写入”断点,而不能设置“内存访问”断点???
=======================================================================================
再来一段测试程序:
start:
nop
nop
mov eax,[esp]
mov [esp],eax
nop
ret
end start
同样进行上述测试,由于这段程序是直接对[esp]操作,所以,应在0012FFC4上进行断点设置,经测试,发现在0012FFC4上设置“内存写入”断点和设置“内存访问”断点,都很正常,
程序均能按预想方式中断,并能正常退出。
这就把我弄糊涂了,难道是 push指令 和 move指令不同造成了上述现象?但这两个条指令都是访问内存指令啊?
请对内存断点有深切理解的高手们来探讨一下这个问题
|
|
|