PE文件部分对齐

问题描述 投票:4回答:3

为什么PE文件中的部分之间存在对齐?由于可以在IMAGE_SECTION_HEADER.SizeOfRawData中指定部分的确切大小,因此我看不到在部分之间使用这些“间隙”的任何意义。

在key / filealign的MSDN文档中,写有:“有效值为512,1024,2048,4096和8192”。是否有一些原因/ filealign:0被编译器禁止?

c++ visual-c++ assembly portable-executable
3个回答
2
投票

编译器禁止它,因为Windows(Windows中的exe加载程序)禁止它..我的意思是,如果我将生成exe与部分对齐说到256和字段设置适当的窗口将不会运行它

为什么windows禁止它我不知道..我完全同意应该允许它更小(我想拥有它例如64或16)


1
投票

我怀疑是否有任何真正的技术原因,为什么对齐不能为零(或者至少比512更小的值 - 可能存在问题,因为它小于4,8或16,因为数据对齐可能最终成为如果编译器生成的代码依赖于整个部分的对齐太小,那就错了。但我也期望这个特性是为解决某些特定的用例而引入的,在大多数情况下,没有必要使用这个选项。我可以说我自己从未使用过它。

但是,使用4096会很有意义,因为这意味着某个部分不与另一个部分共享页面。

我还怀疑/ filealign:0表示“默认对齐”。

我也会留意评论:

大多数开发人员不需要使用此选项


1
投票

Matt Pietrek的以下文章表明,在RAM中,必须在页面边界上对齐一个部分(在x86体系结构上为4096字节)。部分对齐在PE文件中没有此约束,因此它可以更短。

要检查您的体系结构的页面大小,维基百科文章可能会有所帮助。 http://en.wikipedia.org/wiki/Page_(computer_memory)

Matt Pietrek文章:http://msdn.microsoft.com/en-us/magazine/cc301805.aspx

© www.soinside.com 2019 - 2024. All rights reserved.