如何监视进程内内存被修改

柳光头 2014-01-03 09:06:16
【问题】
我们的代码,C++写的一个软件,其中一个对象有HANDLE类型的成员变量m_hSemaphore。
该变量一开始都能正常WaitForSingleObject(),但运行一段时间后,发现WaitForSingleObject会出错,Errno=6,也就是句柄无效。
注:
1. 这个过程中,我没有主动关闭句柄,对象本身也没被释放。
2. 有时也发现在头文件中声明m_hSemaphore的附近的其他句柄也会失效。比如下面:

HANDLE m_hMutex; //也可能会失效
HANDLE m_hSemaphore;


【本人推测】
可能是内存越界了,由于代码量比较大,没法一一核实。

【期望的解决方法】
Step1. 在对象被生成后,监视HANDLE m_hSemaphore所在上下文的内存,有类似的回调函数可用么?
(Windows写内存的底层函数是什么,可以被hook么?)
Step2. 如果Step1可行,能获取到是哪个函数修改的么?

【其它】
即使不用是上述方法,如果能给出其它建议,是受欢迎的;
包括对症状本身的分析,也是欢迎的。
...全文
723 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuobattle 2014-01-03
  • 打赏
  • 举报
回复
ollydbg的原理是把这块内存修改成不可写,然后如果有其它线程尝试去写时,会抛异常, 调试器自己在捕捉这个异常,就能知道是谁在修改了。
柳光头 2014-01-03
  • 打赏
  • 举报
回复
补充:以前有个Ollydbg,能监视内存被修改。但我不明白它的机制。 谢谢先啦,包括看帖的兄弟们。

18,141

社区成员

发帖
与我相关
我的任务
社区描述
Windows客户端使用相关问题交流社区
社区管理员
  • Windows客户端使用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧