Где я могу найти ссылку на то, что означает каждый бит значения CorFlags?
Я возиться с некоторыми довольно низкоуровневыми вещами и пытаюсь определить, почему я получаю разные результаты с помощью утилиты 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 32BITREQ: 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 32BITREQ: 0 32BITPREF: 1 Подписано: 0
Я пытаюсь выяснить, что означают другие биты в значении CorFlags, которые не отображаются в утилите CorFlags. Где ссылка для этого?
2 ответа
Фактически вы видите смесь информации из заголовка 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,
Таким образом, отображаемое значение 0x20003 разбивается на 32BITPREFERRED (0x20000) плюс 32BITREQUIRED (0x00002) плюс ILONLY (0x00001)
Интерпретация флагов:
Любой процессор: PE = PE32 и 32BIT = 0
x86: PE = PE32 и 32BIT = 1
64-разрядный: PE = PE32+ и 32BIT = 0