cubecube

Xperiaのカーネル解析 覚え書き(2016年4月版)

Apr 20th, 2016
876
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.42 KB | None | 0 0
  1. Xperiaのカーネル解析 覚え書き。
  2.  
  3. ※作業環境はWindows前提
  4.  
  5. ■使用ツールの入手(下記から必要に応じてチョイス)
  6. ・unpack-kernelsin_win(32bit/64bit両対応)
  7. http://sdrv.ms/10fPRCP
  8.  
  9. ・pullkernellzo_win
  10. http://sdrv.ms/19NygWP
  11.  
  12. ・pullkernelgzip_win
  13. http://sdrv.ms/10fPEQ7
  14.  
  15. ・kallsymsprint_win
  16. http://1drv.ms/1Vcn5i7
  17.  
  18. ・kallsymsprint64_win
  19. http://1drv.ms/1ZG5UCy
  20.  
  21. ・lzop
  22. http://www.lzop.org/
  23. ここのサイトで「Win32 console version」をゲット
  24.  
  25. ・7za
  26. https://sevenzip.osdn.jp/download.html
  27. ここのサイトでコマンドラインバージョンをゲット
  28.  
  29. ・objdump
  30. まずはAndroid NDKを入手、展開すると所定のフォルダに入っている
  31. Z3など32bit機用は「toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-objdump.exe」
  32. Z4以降など64bit機用は「toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64-linux-android-objdump.exe」
  33.  
  34.  
  35. 【1】何はともあれ、sinをヘッダー、カーネル、ramdiskに分解
  36. クアルコム機は kernel.sin
  37. (MediaTek機は boot.sin だが、以降読み替えるべし。)
  38.  
  39. unpack-kernelsinを、kernel.sinを引数にして実行。
  40.  
  41. C:\>unpack-kernelsin.exe kernel.sin
  42.  
  43. kernel.sin-header
  44. kernel.sin-kernel
  45. kernel.sin-ramdisk.cpio.gz
  46.  
  47. 上記3つが出来る。
  48.  
  49. 【2】kernelbin をゲットする
  50. ・M4Aqua/Z4/Z5(クアルコム64bit)
  51.  kernel.sin-kernel がそのまま kernelbin になる。
  52.  
  53. ・Z3とか(比較的最近のクアルコム32bit)
  54.  kernel.sin-kernel から lzoを抽出/展開して kernelbin を得る。
  55.  c:\>pullkernellzo.exe kernel.sin-kernel
  56.  c:\>lzop.exe -d kernelbin.lzo
  57.  
  58. ・C5 Ultra/M5(MediaTekの64bit)
  59.  boot.sin-kernel から gzipを抽出/展開して kernelbin を得る。
  60.  c:\>pullkernelgzip.exe boot.sin-kernel
  61.  c:\>7za.exe e kernelbin.gz
  62.  
  63. 【3】関数等のアドレスをゲットする
  64. ・32bit機
  65.  c:\>kallsymsprint.exe kernelbin > kallsyms.txt
  66.  
  67. ・64bit機
  68.  c:\>kallsymsprint64.exe kernelbin > kallsyms.txt
  69.  
  70. 【4】必要に応じてディスアセンブルする
  71. objdumpというツールを使うが、
  72. 32bit機のカーネルには「arm-linux-androideabi-objdump.exe」
  73. 64bit機のカーネルには「aarch64-linux-android-objdump.exe」
  74. を使用する。
  75.  
  76. ・kernelbinをディスアセンブルする場合の書式(32bit)
  77. arm-linux-androideabi-objdump.exe -b binary -m arm --adjust-vma=0xc0008000 --start-address=開始アドレス --stop-address=終了アドレス -D kernelbin > 出力ファイル名
  78.  
  79. (例)0xc035a78c から 0xc035b78c までをディスアセンブルして、「kernel_asm.txt」に出力
  80. arm-linux-androideabi-objdump.exe -b binary -m arm --adjust-vma=0xc0008000 --start-address=0xc035a78c --stop-address=0xc035b78c -D kernelbin > kernel_asm.txt
  81.  
  82. ・kernelbinをディスアセンブルする場合の書式(64bit)
  83. aarch64-linux-android-objdump.exe -b binary -m aarch64 --adjust-vma=0xffffffc000080000 --start-address=開始アドレス --stop-address=終了アドレス -D kernelbin > 出力ファイル名
  84.  
  85. (例)0xffffffc00017cb54 から 0xffffffc00017cc54 までをディスアセンブルして、「kernel_asm.txt」に出力
  86. 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