VS 2010和VS 2005产生的Exe加载了不同的偏移量

|| VS 2005和VS 2010之间加载的过程映像文件不同 我们有一个后构建步骤,用于修改(修补)可执行文件中的某些位置。修补过程使用“ 0”将过程加载到存储器中,并使用“ 1”读取其代码段存储器。然后在存储器中搜索序列“ 2”,并在相应的偏移量上修改文件以包含不同的代码。文件中的偏移量被计算为过程存储空间中指令的地址减去exe的首选加载地址。该exe标记为/ BASE:\“ 0x400000 \” / DYNAMICBASE:NO / FIXED(无地址随机化,无重定位)。 使用VS 2005生成的可执行文件可以正常工作,但是使用VS 2010构建exe时失败。找到了内存中的序列,但是文件内容在相应偏移量处不匹配。搜索二进制文件时,可以在文件的前面0xc00找到相应的代码。 比较命令行时,我可以看到VS 2005使用了/ OPT:WIN98,而VS 2010缺少了/ OPT:WIN98,并且链接器似乎不再支持它。 加载VS 2010构建的可执行文件 现在我的问题是: 0xc00偏移量从何而来? 或者,如果我的想法是通过将exe文件的内容读取到由加载地址定义的内存中而错误或过度简化来加载进程,是否有一些文档详细说明了如何在内存中加载进程(如果可能的话,包括处理诸如像/ OPT:WIN98或/ SWAPRUN)?
已邀请:
看来用/ OPT:WIN98制作的exe的标头略大(对齐4 KB)。如果未指定此标志,则仍从0x401000加载代码,但是标头仅为0x400而不是0x1000,从而导致图像偏移为0xc00。

要回复问题请先登录注册