我的问题很简单:.net编译器针对什么体系结构定位生成的exe?我指的是实际的exe文件,而不是二进制加载的CLR来执行实际的代码本身。并且必须有一个目标cpu架构,因为可执行文件的PE-Header不能与平台无关(据我所知)。
为什么这个二进制文件每次都有效,特别是在查看x64和IA64时?
修改 我只看了一些x86,x64和AnyCPU版本的十六进制代码。对于x86和AnyCPU,目标是x86,对于x64,它是x64。
现在还有两个问题:AnyCPU如何在运行时改变它的目标架构?因为PE-Header清楚地说它是针对x86的,但程序然后以x64二进制文件的形式启动。
其次,x64 exe怎么能抛出BadImageFormatException(显然是一个CLR的东西),什么时候甚至不能执行呢?
编辑2: https://msdn.microsoft.com/en-us/library/8dkk3ek4(v=vs.80).aspx描述了一些细节,只会让我更加困惑。它说,CLR读取PE-Files来运行它们,这是有道理的。这可以解释为什么x86 PE-File可以作为x64进程启动。
但那是关于它的。 CLR如何使用正确的进程名称,二进制路径和内容启动?如果PE推出&主持CLR,这将被解释,但x86-x64的变化将再次成为一个谜。但是,BadImageFormatException是我无法用这些信息解释的。