0

これが明らかな問題ではないことを願っています。最近、Windows 2008 R2 サーバー上の 32 ビット exe でデータ実行防止 (DEP) がサポートされていないため、例外が発生しました。DEP 除外リストに exe を追加すると、回避策として問題が解決しました。

DEP をサポートしてコンパイルしたいのですが、Builder XE5 c++ でこれを行う方法についての指示が見つかりません。これは可能ですか?Delphi に関するいくつかの漠然とした提案を見つけましたが、決定的なものはありません。

何か案は?

4

1 に答える 1

1

私の知る限り、C++Builder には Delphi と同じ DEP オプションがありません。どちらかを行う必要があります

  1. 外部 PE エディターを使用して、コンパイル済みの EXE ファイルの PE フラグを変更します。

  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();
        ...
    }
    
于 2014-12-12T23:14:14.877 に答える