为什么在将x64程序集标记为x86时,corflags实用程序不会发出警告?

时间:2008-11-22 09:52:56

标签: .net x86 64-bit corflags

如果我将MyApp.exe的平台标志设置为x64 我仍然可以像这样运行corflags utilty:
    corflags / 32bit + MyApp.exe
corflags将愉快地将32位标志设置为1。 当然,当我尝试运行应用程序时,我会收到一个错误: 0xC000007B = STATUS_INVALID_IMAGE_FORMAT

我的问题是:是否有一种方法可以将x64构建的程序集作为x86运行 或者只是corflags实用程序不“关心”?

2 个答案:

答案 0 :(得分:2)

通过将“平台类型”设置为x64来编译二进制文件也会更改映像PE标头,使其仅为64位。例如,您可以使用Dependency Walker来查看此内容。

具有64位PE标头似乎优先于仅32位的corflags。 .NET的win32 bootstrapper似乎看到PE头与当前系统不兼容(32位系统上的64位)。这样可以防止加载本机映像,也可以防止图像的.NET程序集部分。

我不知道任何能够以这种方式更新PE头的工具。这似乎不仅仅是更改标志以将图像设置为32位。 (见this blog post

答案 1 :(得分:0)

因为如果您没有加载本机DLL,那么无法将其标记为32位。如果它是纯粹的MSIL,那么决定并不意味着那么多。