Hook HeapAlloc遇到的问题
来源:互联网 发布:87版红楼梦配乐知乎 编辑:程序博客网 时间:2024/06/06 00:00
描述一下问题:
想在程序申请内存时获得当前进程占用内存大小,以便找到内存占用瞬间增大的点
实现方式是在hook heapalloc时,调用GetProcessMemoryInfo获取内存大小并记录,结果导致GetProcessMemoryInfo后边的所有代码都没法进入
问题找了很久,之后求助开发宋大侠找到了原因,原来,GetProcessMemoryInfo内部实现的时候也会调用heapalloc导致递归执行无限循环了。
最终如下:
CRITICAL_SECTION g_csHeapAlloc = {0};class t_autoCS {public:t_autoCS(CRITICAL_SECTION& p_cs){::InitializeCriticalSectionAndSpinCount(&p_cs, 0x800000100);}}g_autoCSHeapAlloc(g_csHeapAlloc);LPVOID __stdcall MineHeapAlloc( HANDLE hHeap , DWORD dwFlags , SIZE_T dwBytes ){static volatile LONG s_bHooking = 0;::EnterCriticalSection(&g_csHeapAlloc);if ( ::InterlockedIncrement(&s_bHooking) != 1 ){LPVOID res = Real_HeapAlloc(hHeap, dwFlags,dwBytes);::InterlockedDecrement(&s_bHooking);::LeaveCriticalSection(&g_csHeapAlloc);return res;}s_bHooking = true;SYSTEMTIME st = {0};GetLocalTime(&st);HANDLE handle = GetCurrentProcess();PROCESS_MEMORY_COUNTERS pmc;GetProcessMemoryInfo(handle, &pmc, sizeof(pmc));LPVOID res = Real_HeapAlloc(hHeap, dwFlags,dwBytes);::InterlockedDecrement(&s_bHooking);::LeaveCriticalSection(&g_csHeapAlloc);return res;}第一次进函数的时候,肯定是程序中的调用,而第二次进入,则肯定是这个函数里边调用,则不再进行HOOK而是直接调用真正的 HeapAlloc
0 0
- Hook HeapAlloc遇到的问题
- hook DLL遇到的一些问题
- 学习钩子(Hook)过程中遇到的一些问题
- HeapAlloc引起的死锁
- HeapAlloc()
- HeapAlloc与malloc的区别
- HeapAlloc与malloc的区别
- malloc与heapAlloc的区别
- Delphi Hook的相关问题
- [全]heapalloc,globalalloc,virtualalloc,new的异同
- malloc与HeapAlloc分配的内存
- Win9X下HOOK GDI的问题
- 关于C#的Hook技术问题
- Hook KiUserExceptionDispatcher参数指针错误的问题
- hook WSARecv要注意的问题
- 关于netfilter钩子 hook值的问题
- 今天遇到的问题
- 移植遇到的问题
- cas搭建之客户端搭建
- java对象的序列化和反序列化
- vjkoljl
- UnityVS(Visual Studio Tools For Unity)的安装与使用
- 分组密码(Feistel密码结构)
- Hook HeapAlloc遇到的问题
- cocos2dx EventListenerCustom类控制事件的分发 处理不同层之间的事件传递以及自定义用户数据
- makefile教程
- 强大的vim配置文件,让编程更随意
- eclipse里面找不到server选项
- android客户端认证服务端的两种方式
- UILabel的行间距
- WordPress 、Drupal和Joomla 到底哪个好?
- Centos中添加自启动服务