我正在处理一些相当低级的问题,并试图确定为什么用CorFlags.exe实用程序获得不同的输出。作为引用,输出如下:
$ corflags test2.exe
Microsoft(R).NET Framework CorFlags转换工具。版本4.0.30319.17929
版权所有(c)Microsoft Corporation。版权所有。
版本:v4.0.30319
CLR标题:2.5
PE:PE32
CorFlags:0x1
ILONLY:1个
32位请求:0
32BITPREF:0
签名:0
$ corflags test.exe
Microsoft(R).NET Framework CorFlags转换工具。版本4.0.30319.17929
版权所有(c)Microsoft Corporation。版权所有。
版本:v4.0.30319
CLR标题:2.5
PE:PE32
CorFlags:0x20003
ILONLY:1个
32位请求:0
32BITPREF:1
签名:0
我试图弄清楚CorFlags实用程序中未公开的CorFlags值中的其他位是什么意思。引用在哪里?
最佳答案
您实际上看到的是PE32 header (PE字段)和嵌入在程序集中的 list list 的 header (其余部分)混合而成的信息。 Windows SDK中对此进行了全部描述,您将需要版本8才能获得新的32BITPREF标志。使用C:\Program Files(x86)\Windows Kits\8.0\Include\um\CorHdr.h,此文件中有很多描述声明的注释。
我将复制描述IMAGE_COR20_HEADER.Flags值的部分:
COMIMAGE_FLAGS_ILONLY =0x00000001,
COMIMAGE_FLAGS_32BITREQUIRED =0x00000002,
COMIMAGE_FLAGS_IL_LIBRARY =0x00000004,
COMIMAGE_FLAGS_STRONGNAMESIGNED =0x00000008,
COMIMAGE_FLAGS_NATIVE_ENTRYPOINT =0x00000010,
COMIMAGE_FLAGS_TRACKDEBUGDATA =0x00010000,
COMIMAGE_FLAGS_32BITPREFERRED =0x00020000,
因此显示值0x20003分解为32BITPREFERRED(0x20000)加32BITREQUIRED(0x00002)加ILONLY(0x00001)