Вы можете использовать инструмент gflags.exe
, который входит в состав WDK (возможно, также SDK через пакет средств отладки для Windows), чтобы управлять подмножеством gflags в PE-заголовке исполняемого образа. Просто перейдите на вкладку «Файл изображения» в «gflags.exe».
Как указал jcopenha в комментарии, похоже, что gflags.exe не манипулирует заголовком PE-файла (я полагался на информацию из «Внутренних компонентов Windows, пятое издание» в главе 9 «Функции отладки кучи») по-видимому, он манипулирует только разделом реестра «Параметры выполнения файла изображения».
Тем не менее, все еще возможно установить (или очистить) биты gflags для конкретного исполняемого файла в образе - см. документы для IMAGE_LOAD_CONFIG_DIRECTORY
структуры ; в частности поля GlobalFlagsClear
и GlobalFlagsSet
:
- GlobalFlagsClear - глобальные флаги, управляющие поведением системы. Для получения дополнительной информации см. Gflags.exe.
- GlobalFlagsSet - глобальные флаги, управляющие поведением системы. Для получения дополнительной информации см. Gflags.exe.
Вы можете вывести эти поля с помощью dumpbin
(или link /dump
), используя опцию /loadconfig
:
C:\temp>dumpbin /loadconfig test.exe
Microsoft (R) COFF/PE Dumper Version 10.00.40219.01
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file test.exe
File Type: EXECUTABLE IMAGE
Section contains the following load config:
00000048 size
0 time date stamp
0.00 Version
0 GlobalFlags Clear
0 GlobalFlags Set // <=======
0 Critical Section Default Timeout
// remainder of dump snipped...
Вы можете получить RVA
«Загрузить каталог конфигурации», используя dumpbin /headers
:
C:\temp>dumpbin /headers test.exe
Microsoft (R) COFF/PE Dumper Version 10.00.40219.01
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file test.exe
// ...
OPTIONAL HEADER VALUES
// ...
142B0 [ 40] RVA [size] of Load Configuration Directory
// ^^^^^ ^^^
// ...
Интересно, что опции /loadconfig
и /headers
не согласуются с размером структуры (для записи, похоже, информация /header
неверна)
К сожалению, я не знаю редактора PE, который напрямую поддерживает эти поля - вам, вероятно, придется использовать шестнадцатеричный редактор (или функцию шестнадцатеричного редактирования редактора PE), чтобы изменить эти поля. RVA структуры IMAGE_LOAD_CONFIG_DIRECTORY
должна помочь вам найти ее в шестнадцатеричном редакторе.
Я считаю, что установка одного или нескольких флагов отладки кучи в заголовке изображения (возможно, любого из них, но вам, возможно, придется поэкспериментировать) отключит кучу с низкой фрагментацией. Но я не проверял, действительно ли установка битов в этих полях работает. Если вы попробуете это, сообщите нам, пожалуйста, как оно.