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

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

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

Есть идеи?

0

Решение

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();
    ...
    }
    
1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector