ただいま修行中...

ソフトウェア開発において、勉強中で悪戦苦闘の日々

C#でデータ実行防止(DEP)を無効にする設定

2009-08-28 22:26:58 | C#
Windows VistaC#プログラムからあるDLLをコールすると「保護されているメモリに書き込みできません。(Access Violation)」が発生しました。

色々と調べていて、WindowsXPのSP2以降についたデータ実行防止(DEP)によって、エラーが表示されることがわかりました。

それも、.NET Framework2.0のSP1以降でビルドした実行ファイルの場合にこの現象が発生します。次に選択するものを除くすべてのプログラム...で実行ファイルを追加しようと思っても「DEPを有効にして実行する必要があります。DEPを無効にすることができません」警告メッセージが表示されます。

試しに、SPなしでビルドすると、追加することができて、正常にDLLをコールすることができます。

どうもこれは、.NET Framework2.0のSP1以降からDEPの設定を有効にするようになったことが影響しています。

調べてもC++ではリンカの設定がありますが、C#の場合には、DEPを無効に設定する機能がありません。

そこで、どのようにするかというと、コマンドプロンプトで、以下のように入力すれば、DEPを無効にした実行ファイルを作成することができます。

Visual Studioのインストールフォルダ\Common\\tools\vsvars32.bat
editbin.exe /NXCOMPAT:NO "指定したい実行ファイル名"

それにしても突然発生したので、原因が2日くらい悩みました。

この変更にはかなりビックリしました。


最新の画像もっと見る