Ghidra に解凍したFirmwareを読み込ませます。

Language =ProcessorはARM Cortex A7 Little endianです。

最初の自動解析では結構めちゃめちゃな解析をしますので

少しづつ整えていきます。

 

まずはBOOTブロックとRTOSブロックの実行アドレスの設定です。ここはほとんど試行錯誤です。アセンブルリストの固定アドレスなどを頼りに先頭アドレスを探していきます。

 

結果としてBOOTは

0x50b00000

RTOSは

0x52500000

から始まっていることが判明しました。GhidraのMemory Map機能で設定します。

 

以下はBOOTの先頭部分です。ARMのRESET他、割り込みベクターが入っています。

 

 

RTOSのほうの先頭も見ていきましょう。

こちらも先頭は割り込みベクターになっています。

ブランチ先はもちろんBOOTとは違います。

 

 

BOOT中はBOOTの先頭の割り込みベクターが有効でBOOTが終了するとそれぞれのOSの割り込みベクターが使用されるようになるようです。

 

次回からは中身の解析に移ります。