PE文件部分 - SizeOfRawData或VirtualSize

时间:2015-01-21 19:42:29

标签: c windows winapi portable-executable internals

最近我在我的工作场所一直在搞乱PE文件,并对幕后的Windows加载器的工作产生了兴趣。 我知道在加载PE文件时,加载器需要将PE部分复制到分配的PE内存,一些加载器提交SizeOfRawData个字节,部分提交VirtualSize个字节,有时{{1} (当SizeOfRawData等于0时,表示未初始化的数据)。 我的问题是我怎么知道SectionAlignment个字节对于所有部分的未初始化数据是否足够?也许我有一个比SectionAlignment大得多的未初始化缓冲区,所以我怎么能确定它不会覆盖其他部分呢?我可以预测需要分配的大小吗?我可以提交SectionAlignment个字节而不是VirtualSize字节来保证安全吗?

1 个答案:

答案 0 :(得分:4)

据我了解,Windows加载程序通常不copy the PE sections to the allocated PE memory。相反,它为PE的每个相关部分创建一个文件映射,每个部分都有其虚拟大小,然后让分页系统根据需要将文件内容带入已提交的内存。

节对齐通常是指最小节的分辨率大小,通常为4096字节(传统内存页的大小)。

原始数据的大小是该部分磁盘上PE图像中实际存在的数据大小。