如何在特定地址范围内查找空闲内存

时间:2009-10-17 18:25:44

标签: c++ memory memory-management

我想在我的进程的特定地址范围内写入少量内存。

示例

  • 要分配的内存量:5 bytes
  • 地址的下限:0x 00 40 00 00
  • 地址的上限:0x 00 A0 00 00

我想写的范围已由流程分配。因此,我不能简单地使用VirtualAlloc分配新的记忆。

但是,由于所需地址空间中的页面用于程序代码,因此它们不是100%使用的。在某处有足够的空间来写我的5个字节。

我需要做些什么才能确保不会覆盖必要的内存?

1 个答案:

答案 0 :(得分:3)

我不认为有一个很好的,一般的方法来做你想要的。既然看起来你在谈论Windows以及加载PE的默认位置,我会在这里做一些可能对你有帮助的假设。

如果您愿意解析PE标头,通常可以在那里找到松弛空间。查看各部分之间和功能之前的区域。根据应用程序的构建方式,您可能会发现要用INT3填充的函数之间的区域可能足以满足您的需求。

如果您向我们提供了有关您正在尝试做什么的更多信息,我们可能会提供更多帮助。你可以在加载之前修补二进制文件,还是必须在运行时完成所有操作?