首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >钩式VirtualAlloc在系统DLL调用时返回nullptr

钩式VirtualAlloc在系统DLL调用时返回nullptr
EN

Stack Overflow用户
提问于 2017-12-16 09:13:31
回答 1查看 559关注 0票数 1

我想跟踪由VirtualAlloc完成的内存分配。为此,我尝试使用麦胡克易钩。只要我亲自给VirtualAlloc打电话,这两种设备都能正常工作。调用注册的钩子,然后调用实际的VirtualAlloc函数,并按预期返回内存。

我现在的问题是,我尝试打开一个SFML-window,其中的VirtualAlloc调用被捕获,但没有返回内存。函数调用通过sfml-window-2.dll,然后调用wglCreateContext,它调用CreateAnyContext,后者调用VirtualAllocwglCreateContext在Opengl32.dll。我猜我的用户空间代码没有为它分配内存的权限。我的问题是,如果不允许为系统库分配内存,为什么系统库要通过相同的存根(与我所挂的一样)?我怎么才能区分这些电话,防止这种情况发生呢?

我的意思是,在我的特殊情况下,我可以等到窗口打开,然后挂起VirtualAlloc。但这将是一个非常糟糕的解决方案,因为我想跟踪任意程序,甚至可能注入我的dll来跟踪内存。

编辑:--我不仅希望跟踪程序内存,而且还希望能够将其重置为记录状态,尽管程序执行速度不应放慢太多,因为在我的情况下,这将是游戏。因此,我想从VirtualAlloc开始,设置MEM_WRITE_WATCH标志并手动跟踪GetWriteWatch返回的页面。我已经写了一个向量,可以这样重置,但我需要它更一般。/EDIT

另一件要注意的是,我已经用HeapAlloc尝试过了,它也是在上述函数中调用的,但它返回内存。这就是为什么我尝试了两个库。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-18 12:20:07

原来我不被允许改变旗子。我的解决办法,因为我不知道谁是一个合理的调用者,我分配它修改标志,如果失败,我再分配它与原始标志。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47844170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档