デバッグメッセージの取得に成功!

一週間、悩みに悩んだGetThreadContext。本日、やっとその真相が明らかになりました。


Declare Function GetThreadContext Lib "kernel32" (hThread As HANDLE, ByRef lpContext As Any) As Long


この関数でターゲットアプリのレジスタの内容を取得することは、10/28にお話しましたね。第一パラメータにスレッドハンドルを、第二パラメータにCONTEXT構造体を指定するのですが・・・


よ〜く考えてみてください。


・32ビットアプリのHANDLE型 … DWORD(※4バイト)
・64ビットアプリのHANDLE型 … QWORD(※8バイト)


これでは、32デバッガから64アプリをデバッグできないわけです。だって、32ビットデバッガが持ち合わせる64アプリスレッドのハンドルはサイズが足りないんですから。


なんでこんな初歩的な問題に気づかなかったんでしょうかね。デバッガ内でターゲットアプリのハンドルを扱う部分はほぼ全滅です。となると、新たに64デバッガを作ることに・・・


しかし、いい方法があります。デバッガの構造事態はAB4のそれを流用し、モニターアプリ(デバッギングループとターゲットアプリのメモリ読み込み処理)を別途用意してしまうという方法です。


モニターアプリは64ネイティブのものを用意しなければならないのですが、これはAB x64 Compilerで作ってしまえばいいんです。


とうとう、ここまでこました。デバッガができれば、β公開ができそうです。