VisualStudio2005とIsDebuggerPresentとWindows95

KERNEL32.dll には IsDebuggerPresent というAPIが用意されている。
IsDebuggerPresent の機能として、今デバッグで実行されているのかどうかを判断する機能だそうで Windows98/WindowsNT4.0 から利用可能。
で、本題。
VisualStudio2005 C++ から、ランタイムライブラリで IsDebuggerPresent 関数にリンクしてしまっているため、関数が実装されていない Windows95 では VisualStudio2005 C++ で作ったバイナリを実行できなくなります。
以上!!…、と放置されたらあまりにも悲しい。
探してみたら解決方法があった。


かなり強引な方法で DLL のインポートを横取りする (未参照を防ぐ)
ここで一通り解説されてるけど、忘れないためにも自分でも書いてみる。
EXTERN_C BOOL WINAPI _imp__IsDebuggerPresent(void)
{
return FALSE;
}

この関数を定義してあげるだけで、VisualStudio2005 C++ で作ったバイナリが Windows95 でも実行できるようになる。
この関数で重要なのは、_imp__です。
_imp__* で関数を定義することで、KERNEL32 側の IsDebuggerPresent 関数ではなく _imp__IsDebuggerPresent 関数が呼ばれるようになるそうです。
詳しくは、かなり強引な方法で DLL のインポートを横取りする (未参照を防ぐ) を見てもらったほうが良いかと思います。
これ使うと…なんだか色々出来そうな気がしてしまう…。

「VisualStudio2005とIsDebuggerPresentとWindows95」への2件のフィードバック

  1. この内容についてさっき新しいことが分かり、上記のコードは間違ってたので、新しく更新しました。よろしくお願いします。

  2. ジェットさん>
    わざわざご連絡ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。