2014-12-11 2 views
-1

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

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

Любые идеи?

+0

http://stackoverflow.com/questions/8066266/how-can-i-enable -dep-nx-and-aslr-on-a-delphi-2006-or-early-executable – Ari0nhh

+2

Вам не хватает реальной проблемы? Мне кажется, что вы выполняете данные, а DEP выполняет свою работу. –

+0

Почему downvote? Я понимаю проблему, она четко заявлена, и я видел решение Delphi. Моя проблема заключается в том, чтобы сделать это в C++ Builder, а не в 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(); 
        ... 
    } 
    
+0

Спасибо за комментарий, Remy. Испытайте это сегодня и дайте знать! –

Смежные вопросы