Embarcadero Builder C++ XE5 компилятор предотвращения выполнения данных

Надеюсь, это не очевидная проблема. Недавно я запускал исключения из-за отсутствия поддержки предотвращения выполнения данных (DEP) в нашем 32-разрядном исполняемом файле на сервере Windows 2008 R2. Добавление exe-файла в список исключений DEP решило проблему как обходной путь.

Я хотел бы скомпилировать с поддержкой DEP, но не могу найти никаких указаний о том, как это сделать в Builder XE5 C++. Это возможно? Я нашел несколько смутных предложений по Delphi, но ничего определенного.

Есть идеи?

1 ответ

AFAIK, C++Builder не имеет те же параметры DEP, что и Delphi. Вам придется либо

  1. используйте внешний редактор PE для изменения флагов PE вашего скомпилированного EXE-файла.

  2. вызов 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();
        ...
    }
    
Другие вопросы по тегам