我目前正在研究可移植可执行文件格式,我已经了解了9个常见的部分,如.code、.data、.rdata、.debug等等。然而,我所读到的文件中似乎没有提到的一条信息是程序的“堆”在内存中的位置(地址空间),以及如何分配它。它是这些数据部分的一部分吗?我听说它出现在.bss部分之后,但这些只是谣言。当Windows加载程序加载PE时,是否甚至有一组堆大小(当然是针对每个特定的exe ),如果是的话,它的基础是什么?
发布于 2017-03-08 01:39:10
IMAGE_OPTIONAL_HEADER中有几个字段控制默认进程堆(GetProcessHeap)的初始大小,但是堆本身并不是PE布局的一部分。
程序可以使用HeapCreate创建额外的堆。堆还可以在不同的模式(序列化或不序列化)中运行,还有一个低碎屑堆实现。
https://stackoverflow.com/questions/42661142
复制相似问题