-
-
[旧帖] [求助]模仿OD内存断点(会做调试器的请进) 0.00雪花
-
发表于: 2012-5-1 23:00 1008
-
比如我要对 504064 进行内存断点.
这个地址是动态地址,不是代码段上的代码地址,也不是基址
内存断点的思路是:
1、先 用 VirtualProtectEx 把他内存属性修改为不可读不可写.PAGE_NOACCESS
VirtualProtectEx hW2iProcess, ByVal &H504064, 1, PAGE_NOACCESS, OldProtect
2、由于上一步 会导致 游戏进程的异常,然后被我的调试器接受到这个内存AV异常。EXCEPTION_ACCESS_VIOLATION
-----------------------------------------------
但是断点下来的地址 ,和 od上不一样。
显示的异常代码段代码地址ExceptionRecord.ExceptionAddress (和od上的不一样)
显示的异常数据段内存地址ExceptionRecord.ExceptionInformation(1) 不是504064 ,而是一个5040B4 等
。
这个内存地址怎么会异常呢5040B4? 我明明只设置了下504064 的内存属性为不可读不可写。。。 但是ExceptionRecord.ExceptionInformation(1)显示却是5040B4
这是为啥?
如果对静态地址进行断点,那可以正确的断到,和od的效果一样。但是如果是那种有偏移的动态地址 ,那就断到是错误的莫名其妙的地址。。。。和od完全不一样。。。 。。。
最近正在研究制作一个简单的调试器,只要实现一个功能就可以了内存断点。。。
这个地址是动态地址,不是代码段上的代码地址,也不是基址
内存断点的思路是:
1、先 用 VirtualProtectEx 把他内存属性修改为不可读不可写.PAGE_NOACCESS
VirtualProtectEx hW2iProcess, ByVal &H504064, 1, PAGE_NOACCESS, OldProtect
2、由于上一步 会导致 游戏进程的异常,然后被我的调试器接受到这个内存AV异常。EXCEPTION_ACCESS_VIOLATION
-----------------------------------------------
但是断点下来的地址 ,和 od上不一样。
显示的异常代码段代码地址ExceptionRecord.ExceptionAddress (和od上的不一样)
显示的异常数据段内存地址ExceptionRecord.ExceptionInformation(1) 不是504064 ,而是一个5040B4 等
。
这个内存地址怎么会异常呢5040B4? 我明明只设置了下504064 的内存属性为不可读不可写。。。 但是ExceptionRecord.ExceptionInformation(1)显示却是5040B4
这是为啥?
如果对静态地址进行断点,那可以正确的断到,和od的效果一样。但是如果是那种有偏移的动态地址 ,那就断到是错误的莫名其妙的地址。。。。和od完全不一样。。。 。。。
最近正在研究制作一个简单的调试器,只要实现一个功能就可以了内存断点。。。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
看原图
赞赏
雪币:
留言: