1

我目前正在研究 Portable Executable 文件格式,并且了解了 9 个常见部分,例如 .code、.data、.rdata、.debug 等……但是,有一条信息似乎晦涩难懂我读过的论文中没有关于这些部分的程序“堆”在内存中的位置(地址空间),以及它是如何分配的。它是这些数据部分之一的一部分吗?我听说它出现.bss 部分之后的谣言,但这些只是谣言。当 Windows 加载程序加载 PE 时,甚至有一个设置的堆大小(当然对于每个特定的 exe),如果有,它基于什么?

4

1 回答 1

1

有几个字段IMAGE_OPTIONAL_HEADER控制默认进程堆 ( ) 的初始大小,GetProcessHeap但堆本身不是 PE 布局的一部分。

程序可以使用HeapCreate. 堆也可以在不同的模式下运行(序列化或非序列化),并且还有一个低碎片堆实现。

您可以使用VMMap查看堆在虚拟内存中的位置,但您不应依赖此信息。如果您重新启动计算机,ASLR 将移动它们。

于 2017-03-08T01:39:10.297 回答