Embarcadero Builder C++ XE5 компилятор предотвращения выполнения данных
Надеюсь, это не очевидная проблема. Недавно я запускал исключения из-за отсутствия поддержки предотвращения выполнения данных (DEP) в нашем 32-разрядном исполняемом файле на сервере Windows 2008 R2. Добавление exe-файла в список исключений DEP решило проблему как обходной путь.
Я хотел бы скомпилировать с поддержкой DEP, но не могу найти никаких указаний о том, как это сделать в Builder XE5 C++. Это возможно? Я нашел несколько смутных предложений по Delphi, но ничего определенного.
Есть идеи?
1 ответ
AFAIK, C++Builder не имеет те же параметры DEP, что и Delphi. Вам придется либо
используйте внешний редактор PE для изменения флагов PE вашего скомпилированного EXE-файла.
вызов
SetProcessDEPPolicy()
во время выполнения, например, в верхней части вашегоmain()
/Winmain()
функция:void EnableDEP() { const DWORD PROCESS_DEP_ENABLE = 0x00000001; typedef BOOL WINAPI (*LP_SPDEPP)(DWORD); LP_SPDEPP SetProcessDEPPolicy = (LP_SPDEPP) GetProcAddress(GetModuleHandle(TEXT("kernel32")), "SetProcessDEPPolicy"); if (SetProcessDEPPolicy != NULL) SetProcessDEPPolicy(PROCESS_DEP_ENABLE); } int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { EnableDEP(); ... }