この本はOSを自作している方にOSのデバッグ技術を紹介する目的で書かれました。OSを作っていく過程で遭遇しがちな問題を取りあげ,筆者が実践しているデバッグ技術を説明します。バイナリファイルの調べ方,QEMUとGDBの連携のさせ方,OSが再起動してしまうときのバグの調べ方などが主な話題となります。
主な対象読者は「30日でできる!OS自作入門」や類書を参考にして,x86やx86-64向けのOSを作っている方です。シンボルアドレスの調べ方を知りたい,GDBを使ったデバッグ方法を知りたい,EIPの値を手がかりにして調査してみたいなどの要望に答えます。各種のデバッグツールを使いこなしている方であれば既知の話題ばかりかもしれませんが,ご自身と筆者のデバッグ手法の違いを眺めて楽しむことはできるかもしれません。そして,より良い方法がありましたら筆者に教えていただけませんでしょうか?
目次プレビュー
- 第1章 はじめに
- 第2章 テクニック一問一答
- 第3章 シナリオ問題
-
1.1 対象読者
-
1.2 動作環境
-
1.3 筆者について
-
1.4 サンプルコード
-
1.5 学生向け情報
-
1.6 社会人向け情報
-
2.1 ELF形式のファイルを逆アセンブルせよ
-
2.2 独自形式のバイナリファイルを逆アセンブルせよ
-
2.3 ELFファイルからシンボルのアドレスとサイズを探せ
-
2.4 HRB形式のファイルでシンボルのアドレスを探せ
-
2.5 論理アドレスをリニアアドレスへ変換せよ
-
2.6 リニアアドレスを物理アドレスへ変換せよ
-
2.7 ページングのモードを判定せよ
-
2.8 QEMUで現在のレジスタ値を確認せよ
-
2.9 USBメモリからディスクイメージを作れ
-
2.10 FATフォーマットされたディスクイメージを作れ
-
2.11 FATのパラメータを確認せよ
-
2.12 FATファイルシステムのビット数を計算せよ
-
2.13 オペコード0xCBに対応するニーモニックを答えよ
-
2.14 NASMで64ビット版のfar returnを出力せよ
-
2.15 CPUIDを実行するインラインアセンブラを書け
-
2.16 QEMUにGDBを接続せよ
-
2.17 GDBを使って特定の時点のメモリ内容を見よ
-
2.18 「はりぼてOS」が動くQEMUにGDBを接続せよ
-
2.19 haribote.imgの0xda7に対応する関数は何か
-
2.20 「はりぼてOS」のmemコマンドでブレークせよ
-
2.21 バイナリファイルをプログラムに埋め込め
-
2.22 objcopyが何をするか確認せよ
-
2.23 UEFIでPrintが失敗する理由を探れ
-
2.24 引数がレジスタに積まれる順序を答えよ
-
2.25 スタック領域が勝手に使われる理由を述べよ