などという、ちょっと高等テクニックを駆使しながら、デバッガを作り続けております。

先日もお話したとおり、デバッグターゲットの64アプリは、32デバッガからCreateProcessすることができません。厳密にいうと、起動はできるのですが、ブレークポイントや例外処理が不可能な状態であり、32デバッガ&64アプリでは事実上、デバッギングはできません。

そーしますと、単純に32デバッガを改良して64デバッガを新たに作成せよ!ということになるのですが、こいつはちょっと無理な注文なんですよ。デバッガを64ビットへ移植するということは、デバッグ情報を処理する機構もすべて移植の対象として扱わなければなりません。こんな面倒な作業、今やっとるヒマはないんです。

これを解決するのがモニターアプリ。32デバッガとターゲットの64アプリを繋げてくれるアプリケーションです。

と、まぁ、ここまでが先日までのお話。ここからはモニターアプリが実際にどうのよな感じで動くのか、デバッガとの情報のやり取りはどのようになるのかを紹介していきます。まずは、出てくるアプリを整理してみましょう。

  • 32デバッガ(BasicCompiler.exe) … AB4にもくっついておる、お馴染のプロセスデバッガ。コンパイラと同居している。
  • 64モニター(monitor64.exe) … 32デバッガから呼び出され、デバッギングループを担当。ターゲット64アプリとのダイレクトなやり取りを実現。
  • ターゲット64アプリ … AB x64 Compilerが吐き出す、正真正銘のネイティブ64プログラム。こいつを何とかしてデバッグしてやりたいのだ!

デバッガとターゲットアプリの間にうまい具合にモニターアプリをかみ合わせてしまえば、あたかも、32ネイティブで動くデバッガからデバッギングしているように見えます。もちろん、既存のデバッグ情報処理機構は32デバッガのそれを流用。効率も良いです。

32デバッガと64モニターとの情報のやり取りは、匿名パイプとメールスロットを使います。

  • 32デバッガ … メッセージ読み取りループ
  • 64モニター … 事実上のデバッギングを行い、デバッグメッセージを32デバッガに垂れ流す

※読み取りと垂れ流しは、同期的に行います。

64モニターから32デバッガへ送るデータが非常に多いことから、匿名パイプはそういう方向で用意します(匿名パイプは双方向できないんで…)。逆方向へは、メールスロットでも使います。

こうやって、32デバッガと64モニターが密にやり取りをすることで、64アプリをデバッグできるようになるんです。

と、ここまで仕組みをお話しましたが、まだ実装作業が済んでいません。64モニターなんかはAB x64 Compilerで作るので、形ができあがってきたら、非公式のこの場でそのプログラムをご紹介してみます。ご期待あれ(といっても、ちょっと分野偏りすぎか???)

f(–;;;それにしても、こんなことを試している人間は、世界でどれだけいるんだか。

そんなこんなで、今日はとうとうオヤツをコンビニへ買いに行く以外、外出はありませんでした。こういう日があと二日も続いたら…おいらの頭の中はどうなってしまうかわかりません。

まぁ、来週月曜は元バイト仲間達とさっそく飲む予定になっておるので、それまでがんばりやす。