gdb で qemu なソレに
参考にしたのは以下なエントリ。
qemu には
- -s オプションで 1234 ポートで gdb の接続を待つ
- -S オプションでスタートアップ時に CPU をスタートしない (モニターで 'c' を入力する必要あり)
という必殺気味なオプションがあるようです。
ただ、上記エントリによるとデバッグ情報が出力されたカーネルを作らなければならない、との事。とりあえずカーネルを make してリモートデバッグとの事なんですが以下との事。
# cd linux-0.0-rm-3.5 # qemu -m 8 -hdb hd_oldlinux.img -fda Image -boot a -s -S& # gdb Image (gdb) target remote localhost:1234 (gdb) symbol-file tools/system (gdb) break main (gdb) c
かなぁ。で、ヤッてみたんですが失敗。qemuctl だったorz
今
再起動ちう。attack できるかどうか。今日ぶっちゃけへろへろなんだよねぇ。
でけた
投入したコマンドは以下かな。諸事情にて微妙な箇所にカーネルがありますが大丈夫かな。
$ qemuctl -m 8 -hdb hd_oldlinux.img -fda Image -boot a -s -S& $ gdb Image (gdb) target remote localhost:1234 Remote debugging using localhost:1234 0x0000ff0 in ?? () (gdb) symbol-file tools/system Reading symbols from /home/rms/vmware/root/linux-0.01-rm-3.5/tools/system...done. (gdb) break main Breakpoint 1 at 0x522f: file init/main.c, line 80. (gdb) c Continuing. Breakpoint 1, main() at init/main.c:80 80 { /* The startup routine assumes (well, ...) this */ (gdb)
いやはやこれはこれは。とは言え今日はこれで寝ます。体調崩し気味。
ワラタ
上記の状態から continue したら kernel panic した。よく見たら -hdb ってしてるし。以下が正しいですね。
# qemuctl -m 8 -hda hd_oldlinux.img -fda Image -boot a -s -S&
あと、特に su - とかしてなくても大丈夫です。もう一つ、カレントディレクトリはカーネルソースのディレクトリに居る必要があるようですね。