NOEMBLEM/エンブレムが設定されていません。

メールの詳細(トピック表示)

プロテクトモードへの道

投稿者: さん  2003/12/31 20:16  MLNo.82   [メール表示]

みなさんお久しぶりです。持主です。

ところで、先日DOS上でBIOSのプロテクトモードサービスを
利用して(Int15h, AH=89h)自分でプロテクトモードに移行して
何かをするプログラムを実験していて、当然のように暴走
しました。で、リアルモードのプログラムなら大抵デバッガ
(DR-DOSにも標準でDEBUGが付いてきますし、フリーで便利なの
にはEXDEBというのがあります)で根気よく辿っていけば何とか
なりますが、プロテクトモードに入ってしまうと手が出ません。

そこで、しばらく何とかならないか考えていて、ふとLinux
マシン上で動くIBM-PCの金物のシミュレータのBochsの存在を
思い出しました。DOSEMUは仮想86モードで動き、一般保護例外で
強制終了されるときにレジスタのダンプを表示するだけですが、
Bochsは仮想86モードの力を借りずに全部ソフトウェアで模擬
実行しますので、うまくすれば普通のデバッガでは出来ないような
デバッグ作業が出来そうです。

そこで、次のようにして実験しました:
((L)はLinux側の作業、(D)はDOS側の作業)

1) (L)Bochsのソースを入手(私はVer.1.4を使いました)、
configureするときにデバッグ関連のオプションを
フルにつけてコンパイル、普通にインストールする。

2) (D)DR-DOSマシン上でブート用のFDを作成、デバッグ
したいプログラムをコピーする

3) (L) (2)で作ったFDをFDDに突っ込み、Bochsを起動、
メニューからメッセージの表示レベルの設定を選び、
CPUとBIOSとCMOSとKBC関連の詳細メッセージを表示
するよう(もちろん、デバッグする対象に応じてこの
あたりの設定は変わってきます)設定し、FDDから
起動する

4) (L)実行ウインドウが出たあとBochsのデバッガのプロン
プトが出るので、"c"を押してそのまま実行を継続させる

5) (L)問題が発生した場合やBochsのデバッガにCtrl-Cを
入力すると実行が中断され、デバッガのプロンプトに
落ちるので、レジスタやメモリを調べることができる

6) (L)ログを画面にではなくファイルに落すようにして
おけば、プログラムがどのように振舞ったのか(レジスタ
へのアクセスなど)を調べることができる

Bochs内蔵のデバッガはシンプルな機能しか持っていないので、
慣れるまで少し大変ですが、普通のデバッガでは難しいような
(デバッガのプロンプトに戻らず、いきなりリセットされてしまった
りする)デバッグ作業に役立ちそうです。

それにしても、プロテクトモードへの道は果てしなく遠いです。
DPMIとかVCPIを使えば比較的簡単にプロテクトモードの世界に入れ
ますが、それでは勉強にならないので、あえてInt15hという古代の
遺物を利用することにしました。あとは直接LMSW命令でプロテクト
モードに移行する技も学ばねばなりませんね。

それでは、また。来年も宜しくお願い致します。


このエントリーをはてなブックマークに追加

メールへの返信はMLのメンバーしかできません。

更新順メールリスト