Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Xperiaのカーネル解析 覚え書き。
- ※作業環境はWindows前提
- ■使用ツールの入手(下記から必要に応じてチョイス)
- ・unpack-kernelsin_win(32bit/64bit両対応)
- http://sdrv.ms/10fPRCP
- ・pullkernellzo_win
- http://sdrv.ms/19NygWP
- ・pullkernelgzip_win
- http://sdrv.ms/10fPEQ7
- ・kallsymsprint_win
- http://1drv.ms/1Vcn5i7
- ・kallsymsprint64_win
- http://1drv.ms/1ZG5UCy
- ・lzop
- http://www.lzop.org/
- ここのサイトで「Win32 console version」をゲット
- ・7za
- https://sevenzip.osdn.jp/download.html
- ここのサイトでコマンドラインバージョンをゲット
- ・objdump
- まずはAndroid NDKを入手、展開すると所定のフォルダに入っている
- Z3など32bit機用は「toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-objdump.exe」
- Z4以降など64bit機用は「toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64-linux-android-objdump.exe」
- 【1】何はともあれ、sinをヘッダー、カーネル、ramdiskに分解
- クアルコム機は kernel.sin
- (MediaTek機は boot.sin だが、以降読み替えるべし。)
- unpack-kernelsinを、kernel.sinを引数にして実行。
- C:\>unpack-kernelsin.exe kernel.sin
- kernel.sin-header
- kernel.sin-kernel
- kernel.sin-ramdisk.cpio.gz
- 上記3つが出来る。
- 【2】kernelbin をゲットする
- ・M4Aqua/Z4/Z5(クアルコム64bit)
- kernel.sin-kernel がそのまま kernelbin になる。
- ・Z3とか(比較的最近のクアルコム32bit)
- kernel.sin-kernel から lzoを抽出/展開して kernelbin を得る。
- c:\>pullkernellzo.exe kernel.sin-kernel
- c:\>lzop.exe -d kernelbin.lzo
- ・C5 Ultra/M5(MediaTekの64bit)
- boot.sin-kernel から gzipを抽出/展開して kernelbin を得る。
- c:\>pullkernelgzip.exe boot.sin-kernel
- c:\>7za.exe e kernelbin.gz
- 【3】関数等のアドレスをゲットする
- ・32bit機
- c:\>kallsymsprint.exe kernelbin > kallsyms.txt
- ・64bit機
- c:\>kallsymsprint64.exe kernelbin > kallsyms.txt
- 【4】必要に応じてディスアセンブルする
- objdumpというツールを使うが、
- 32bit機のカーネルには「arm-linux-androideabi-objdump.exe」
- 64bit機のカーネルには「aarch64-linux-android-objdump.exe」
- を使用する。
- ・kernelbinをディスアセンブルする場合の書式(32bit)
- arm-linux-androideabi-objdump.exe -b binary -m arm --adjust-vma=0xc0008000 --start-address=開始アドレス --stop-address=終了アドレス -D kernelbin > 出力ファイル名
- (例)0xc035a78c から 0xc035b78c までをディスアセンブルして、「kernel_asm.txt」に出力
- arm-linux-androideabi-objdump.exe -b binary -m arm --adjust-vma=0xc0008000 --start-address=0xc035a78c --stop-address=0xc035b78c -D kernelbin > kernel_asm.txt
- ・kernelbinをディスアセンブルする場合の書式(64bit)
- aarch64-linux-android-objdump.exe -b binary -m aarch64 --adjust-vma=0xffffffc000080000 --start-address=開始アドレス --stop-address=終了アドレス -D kernelbin > 出力ファイル名
- (例)0xffffffc00017cb54 から 0xffffffc00017cc54 までをディスアセンブルして、「kernel_asm.txt」に出力
- aarch64-linux-android-objdump.exe -b binary -m aarch64 --adjust-vma=0xffffffc000080000 --start-address=0xffffffc00017cb54 --stop-address=0xffffffc00017cc54 -D kernelbin > kernel_asm.txt
Add Comment
Please, Sign In to add comment