PE文件部分-SizeOfRawData或VirtualSize

Cod*_*nja 3 c windows winapi internals portable-executable

最近,我一直在办公室里弄乱PE文件,并且对后台的Windows加载程序的工作很感兴趣。我知道加载PE文件时,加载器需要将PE部分复制到分配的PE内存中,一些加载器提交SizeOfRawData字节,该部分提交VirtualSize字节,有时SectionAlignment(对于未初始化的数据,当SizeOfRawData等于0时)。我的问题是我怎么知道SectionAlignment字节足以容纳该节的所有未初始化数据?也许我有一个比更大的未初始化缓冲区SectionAlignment,那么如何确定它不会覆盖其他部分呢?我可以预测需要分配的大小吗?为了安全起见,我可以提交VirtualSize字节而不是SectionAlignment字节吗?

500*_*ror 5

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

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

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