为了补充 Hans 的答案,还有一些响应该标志的 Windows 内核模式代码。每个加载的可执行文件都有一个SECTION_IMAGE_INFORMATION
与之关联的内核结构 。这是它的符号信息:
0: kd> dt nt!_SECTION_IMAGE_INFORMATION
+0x000 TransferAddress : Ptr64 Void
+0x008 ZeroBits : Uint4B
+0x010 MaximumStackSize : Uint8B
+0x018 CommittedStackSize : Uint8B
+0x020 SubSystemType : Uint4B
+0x024 SubSystemMinorVersion : Uint2B
+0x026 SubSystemMajorVersion : Uint2B
+0x024 SubSystemVersion : Uint4B
+0x028 GpValue : Uint4B
+0x02c ImageCharacteristics : Uint2B
+0x02e DllCharacteristics : Uint2B
+0x030 Machine : Uint2B
+0x032 ImageContainsCode : UChar
+0x033 ImageFlags : UChar
+0x033 ComPlusNativeReady : Pos 0, 1 Bit
+0x033 ComPlusILOnly : Pos 1, 1 Bit
+0x033 ImageDynamicallyRelocated : Pos 2, 1 Bit
+0x033 ImageMappedFlat : Pos 3, 1 Bit
+0x033 BaseBelow4gb : Pos 4, 1 Bit
+0x033 Reserved : Pos 5, 3 Bits
标志ComPlusILOnly
和ComPlusNativeReady
与 .NET 相关,ComPlusILOnly
只是告诉程序集是否仅为CIL(不是混合或本机 - 在这种情况下,程序集已经是特定于体系结构的),并且ComPlusNativeReady
仅在未设置 /32BIT+ 时为 1(32BITREQ 或 32BITPREF 在较新CorFlags 版本)。在创建过程中nt!PspAllocateProcess
并基于它们检查这些标志。32-bit
64-bit
我写了一些细节。