プログラミング

Windows XP における access violation

2006年11月12日

 久しぶりに自作の SFC mini を使ってみたら、エラーが出てコールバック関数・マシン語ともに使えないことが分かった。今までは Windows XP / Windows 2000 ともに問題なかったのであるが、Windows XP sp2 では問題があるらしい。

 久しぶりに C++ のプログラミングになったが、以前の記事で紹介した Visual C++ 2005 / MS platform SDK での組み合わせで作業した。うまく作業できて、これで10年間使ってきた Visual C++ 4.0 とさようならすることが出来そうである。
 VC 4.0 有難う。お世話になりました。……とここまで書いて、MakeExe ではこのツールが必要かもしれないことを思い出した。ごめんね、VC 4.0。
 と余談はさておき、早速 VC 2005 でエラーの原因を探ってみると、いずれのケースもメモリ上に構築したマシン語を呼び出しに関連して、access violation エラーが出ることが分かった。これはどうやら、Windows XP sp2 においてセキュリティー上の改変を行っているようである。
 つまり、データとして扱っている部分に制御が移ると、access violation が出るようになっているらしい。これは、バッファーオーバーフローによるセキュリティ上の脆弱性が出ないようにとの配慮のように思われる。さすがMSというか、少し感心した。
 と、感心している場合ではなく、SFC mini でコールバック関数が使えるようにデバッグしないといけない。最終的には、何とかマシン語を使わずにコールバックさせることに成功した。VBSを書くときの制約は出るが、簡単なプログラム(enumWindowsを使うものなど)なら、問題なしである。久々の SFC mini の更新になる。ついでに、以前完成させてあった、ブロッキングタイプで winsock が使えるようにしてある部分も加えて、ver 0.4.5 として近々公表できるかな。
 ただ、SfcMini.MachineCodeオブジェクトのほうをどうするかが悩ましいところである。これがないと、WinForm が使えない。SFC mini の魅力半減というところである。はたして、どうしたものか。

コメント

コメントはありません

コメント送信