2013年12月11日水曜日

Disassemble Linux kernel

Decompress

/boot/vmlinuz-XXX なカーネルイメージは,圧縮されている.通常,disassemble するには objdump を使う.しかし,圧縮されているので,そのままのカーネルイメージには objdump は使えない.そこで,始めに,圧縮されているカーネルイメージを展開する.展開ということで,手元にあるカーネルイメージの圧縮形式はbzip2なので,bunzip2で展開しようとしたけど,無理だった.file コマンドでカーネルイメージを調べると,Linux kernel x86 boot executable bzImage とのこと.通常のbzip2ではなかった.さらに調べると,なんと,最近のLinuxには,vmlinuzをvmlinuxに展開するためのscriptが同梱されているとのこと.遠回りをした結果,ソースのレポジトリに戻ってきた.linux/scripts/extract-vmlinux なるスクリプトがあるので,これを利用する.

Disassemble

既に書いたように,vmlinux形式への展開は完了した.vmlinuxはELF形式の実行ファイルなので,objdumpが使える.ただし,シンボル情報はstripされているので,シンボル情報が欲しい場合は,カーネルのビルドオプションを指定する必要がある.多分できると思う.以下のコマンドでvmlinuxをdisassembleする.

0 件のコメント:

コメントを投稿