监测内存,以及内存泄漏的问题

fantasy00000000 2007-09-12 05:20:45
最近想把这个方面搞清楚,目的:
希望自己写一个程序,来调试另一个进程。如每当遇到malloc的时候由我的hook函数来处理,然后再把控制权交给被调试程序
问题:
1. 现在看到一个例子,是使用createprocess并通过其参数来启动被debug进程, 然后使用WaitForDebugEvent来获取信息,但如何监测到malloc?
2. 另一个例子,是使用_CrtSetAllocHook函数,但它似乎是写在源代码中来进行调试的,而不是用一个进程去调试另一个进程的方式。

就这两个问题,有经验的朋友请帮助我一下吧..
谢谢!
...全文
239 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cocoky 2007-09-14
  • 打赏
  • 举报
回复
程序运行时会把dll加载到进程空间,先找到molloc的函数地址,把molloc的函数地址改成你的函数地址,这就是常用的hook,可以到网上查找api hook
sniperhuangwei 2007-09-14
  • 打赏
  • 举报
回复
malloc()
{
send message to control process;
::malloc();
}

用这个替换掉被调试中调用的malloc.
每次调用malloc你的控制进程不就知道了嘛.
fantasy00000000 2007-09-14
  • 打赏
  • 举报
回复
谢谢楼上的几位!
现在我的问题是,我的控制进程如何知道被debug进程何时调用了malloc呢?
sniperhuangwei 2007-09-13
  • 打赏
  • 举报
回复
有一个内存调试器是编译的时候把malloc替换成它自己的malloc版本.
当调用的时候就可以捕捉到.
你也可以用这个方法.每当调用malloc时就告诉你的控制进程.
jspxnet 2007-09-13
  • 打赏
  • 举报
回复
你分析一下程序运行 malloc 的时候CPU会执行那些指令,然后分析CPU的指令.
汇编要好.
dabie 2007-09-13
  • 打赏
  • 举报
回复
mark
fantasy00000000 2007-09-13
  • 打赏
  • 举报
回复
顶一下,有经验的朋友帮帮忙吧
fantasy00000000 2007-09-12
  • 打赏
  • 举报
回复
malloc调用的不是系统API是肯定的,属于C 运行期库
可能说softice不太恰当,换stackwalker吧:)
lddLinan 2007-09-12
  • 打赏
  • 举报
回复
softice可以跟踪malloc么?我感觉softice只能设置部分系统调用的断点,而malloc并不一定会调用系统调用
fantasy00000000 2007-09-12
  • 打赏
  • 举报
回复
这个工作,比如MFC已经作了,他们提供了Malloc的debug define映射,具体我也忘记了,但是这种用法只是在程序员编写程序的时候来使用,自己来调试。
而我的意思是,程序员使用正常的malloc写完了程序,生成了release的exe, 然后我用我自己写的工具去调试它。其实就是有点像softice之类的debug工具~,不过我只是想了解一下,自己做不了那么大的工具
lddLinan 2007-09-12
  • 打赏
  • 举报
回复
我不会用一个进程调试另一个进程,如果lz会,那你可以重定义malloc函数或者把所有使用malloc重新包装一下,然后malloc函数里加入能够被调试的指令。
fantasy00000000 2007-09-12
  • 打赏
  • 举报
回复
楼上的大哥,这就是我的目的阿!
lddLinan 2007-09-12
  • 打赏
  • 举报
回复
如果会用一个进程调试另一个进程那么这些都是小问题了。

64,688

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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