【ハンズオン3】ファームウェアの解析(後半)¶
前提条件¶
- 仮想環境の起動が完了していること
- 【ハンズオン3(前半)】が完了していること
手順¶
5. loop()関数を探す¶
ボードの内蔵LEDをコントロールするファームウェアでは、下記の命令が含まれる(理由は演習後、講義で説明)。
これをアセンブルすると、以下の16進数の命令列になる。 この命令列をGhidraの検索機能で探す。 GhidraのメニューからSearch→Memory...を選択し、Hexを選んだ上で、上記命令列を入力する。
実装したファームウェアによって検索結果は異なるが、1件以上の結果が表示されるはずである。 見つかったアドレスを上から一つずつダブルクリックし、逆コンパイルされたコードを確認していく。
右側ペインに表示される疑似コードより、表示されたアドレスのどれか一つは自分で実装したloop関数であると判定できる。

注意
FUN_XXXXXXXXのXXXXXXXXの部分は、実際の関数開始アドレスに置き換わる。上記の図は例示であり、実際のアドレスは異なる場合がある。
note: 自分で書いたコードの見つけ方
loop関数では、sleep関数を使用したことを思い出してください。sleep([自分で設定した秒数])のようなコードが含まれているはずです(シンボル情報はないため、FUN_XXXXXXXX([自分で設定した秒数])と表示される)。- 講義資料も参照してください
- loop関数が見つからない場合は、チューターまたは講師に相談してください。
時間が余った場合は、XREF機能を使用して、loop関数がどこから呼び出されているかを調べてみましょう。辿っていくと、いずれ0x10000000にたどり着くはずです。