PEB.NtGlobalFlag

GlobalFlag

При создании процесса в памяти система устанавливает ряд флажков, которые влияют на поведение некоторых API. Они находятся по смещению 68h в структуре PEB. Если процесс отлаживается, то в нем подымаются флажки, информирующие как должны вести себя функции работы с кучей (начиная с Windows 2000). Флажки:

FLG_HEAP_ENABLE_TAIL_CHECK (0х10)
FLG_HEAP_ENABLE_FREE_CHECK (0х20)
FLG_HEAP_VALIDATE_PARAMETERS (0х40)

Итого – 0х70.

Эти три флажка обычно устанавливаются для процесса, который создан отладчиком, но для процесса, к которому отладчик присоединяется (attach), эти флажки не выставляются.

Есть три исключения:

  • первое – дополнительные флажки могут быть установлены для всех процессов, через системный реестр.

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager]
"GlobalFlag"="0x00000000" – пустое значение не приведет к выставлению флажков

  • второе – через реестр для конкретной программы

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\<имя файла>]
"GlobalFlag"="0x00000000" – пустое значение не приведет к выставлению флажков
"имя файла"=полный путь до исполняемого файла

  • третье – начиная с Windows 2000 всеми флагами можно управлять путем загрузки структуры конфигураций (Load Configuration Structure).

Пример кода:

Самый простой метод, чтобы обойти этот трюк - создать пустую строку "GlobalFlag".

Обратно к содержанию

Пока не указано иное, содержимое этой страницы распространяется по лицензии Creative Commons Attribution-ShareAlike 3.0 License