最近我在我的工作场所一直在搞乱PE文件,并对幕后的Windows加载器的工作产生了兴趣。
我知道在加载PE文件时,加载器需要将PE部分复制到分配的PE内存,一些加载器提交SizeOfRawData
个字节,部分提交VirtualSize
个字节,有时{{1} (当SizeOfRawData等于0时,表示未初始化的数据)。
我的问题是我怎么知道SectionAlignment
个字节对于所有部分的未初始化数据是否足够?也许我有一个比SectionAlignment
大得多的未初始化缓冲区,所以我怎么能确定它不会覆盖其他部分呢?我可以预测需要分配的大小吗?我可以提交SectionAlignment
个字节而不是VirtualSize
字节来保证安全吗?
答案 0 :(得分:4)
据我了解,Windows加载程序通常不copy the PE sections to the allocated PE memory
。相反,它为PE的每个相关部分创建一个文件映射,每个部分都有其虚拟大小,然后让分页系统根据需要将文件内容带入已提交的内存。
节对齐通常是指最小节的分辨率大小,通常为4096字节(传统内存页的大小)。
原始数据的大小是该部分磁盘上PE图像中实际存在的数据大小。