代码之家  ›  专栏  ›  技术社区  ›  simonides

钩住的VirtualAlloc在被系统DLL调用时返回nullptr

  •  1
  • simonides  · 技术社区  · 8 年前

    我想跟踪由完成的内存分配 VirtualAlloc . 我试着用 mhook easyhook . 只要我打电话,两个都可以 VirtualAlloc公司 我自己注册的钩子被称为,从那里我称为真实的 VirtualAlloc公司 函数和内存按预期返回。

    我现在的问题是,我试图打开 SFML -窗口和 VirtualAlloc公司 已捕获那里的调用,但未返回内存。函数调用通过sfml-window-2进行。dll并从那里调用 wglCreateContext 调用CreateAnyContext的 VirtualAlloc公司 . wglCreateContext 在Opengl32中。dll。我猜我的用户空间代码没有为其分配内存的权限。我的问题是,如果不允许我为系统库分配内存,为什么系统库要通过相同的存根(我挂接的存根)?我如何辨别这些电话并防止其发生?

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

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

    另一件需要注意的是,我已经试过了 HeapAlloc 该函数也在所述函数中调用,但它返回内存。这就是我尝试使用两个库的原因。 非常感谢您的帮助。

    1 回复  |  直到 8 年前
        1
  •  0
  •   simonides    8 年前

    结果证明我是不允许更改标志的。我的解决方法是,因为我无法以合理的方式知道调用方是谁,所以我使用更改的标志分配它,如果失败,我将使用原始标志再次分配它。