我在哪里可以找到CorFlags值的每一位含义的参考?

Ear*_*rlz 11 .net corflags low-level portable-executable bit-fields

我正在搞乱一些相当低级别的东西,并试图确定为什么我使用CorFlags.exe实用程序得到不同的输出.作为参考,输出如下:

$ corflags test2.exe
Microsoft (R) .NET Framework CorFlags Conversion Tool.  Version  4.0.30319.17929
Copyright (c) Microsoft Corporation.  All rights reserved.

Version   : v4.0.30319
CLR Header: 2.5
PE        : PE32
CorFlags  : 0x1
ILONLY    : 1
32BITREQ  : 0
32BITPREF : 0
Signed    : 0

$ corflags test.exe
Microsoft (R) .NET Framework CorFlags Conversion Tool.  Version  4.0.30319.17929
Copyright (c) Microsoft Corporation.  All rights reserved.

Version   : v4.0.30319
CLR Header: 2.5
PE        : PE32
CorFlags  : 0x20003
ILONLY    : 1
32BITREQ  : 0
32BITPREF : 1
Signed    : 0

我试图弄清楚CorFlags值中的其他位是什么意思,而不是在CorFlags实用程序中公开.这方面的参考在哪里?

Han*_*ant 12

您实际上看到了PE32标头(PE字段)和嵌入在程序集中的清单标题(其余部分)的混合信息.这些都在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,
Run Code Online (Sandbox Code Playgroud)

因此显示的值0x20003分解为32BITPREFERRED(0x20000)加上32BITREQUIRED(0x00002)加上ILONLY(0x00001)