memo:Xperiaのkernelのdisassemble | 素句粗口散文(にそくさんもん)

memo:Xperiaのkernelのdisassemble

1. kernel.sinの取得
 flashtoolでftfを作る過程でできます。kernel_ほにゃらら.sin
 (ftfがすでにある場合は、7-Zipでばらせば中に入ってます)
 root取得済みなら端末のbootパーティションをdumpしてもいいかな?

2. kernel.sinからのzImageの取り出し
 DooMLoRD氏のunpack-kernelsin.plでzImage と ramdiskに分割。

3. zImageからImageへの変換
 zImageは自己展開型で、解凍ルーチン+gz圧縮されたkernel imageになっている。
 バイナリエディタ等で解凍ルーチン部分を削って、gunzipで展開する。
 (gzipのmagicは、0x1f8bなのでそれを検索して、それ以前を削る)

4. disassemble
 arm-linux-androideabi-objdump -D -b binary -m arm --adjust-vma=0xc0008000 piggy > kernel_asm.txt
 こんな感じでおk。
 かなり巨大になるので、シンボル情報から調べたい関数のアドレスがわかっていれば、
 --start-address=開始アドレス --stop-address=終了アドレス
 指定を付ければよい。