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".