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)