FEBuilderGBAはGBAFEを簡単に改造するためのツールですが、
本格的にコードを解析したい方を手助けすることもできます。
今回は、解析の基礎となる逆アセンブラとマップファイルを紹介します。
FEBuilderGBAは独自の逆アセンブラルーチンと、マップファイル生成ルーチンを搭載しています。
これを利用すると、コメントが自動的に挿入された asmソースコードを取得することができます。
こういうソースコードが生成されます。
08E4F6E0 B500 push {, lr} 08E4F6E2 46C0 mov r8, r8 08E4F6E4 4B05 ldr r3, [pc, #0x14] # pointer:08E4F6FC -> 0202BCF4 (所持金 ) 08E4F6E6 6819 ldr r1, [r3, #0x0] # pointer:0202BCF4 (所持金 ) 08E4F6E8 2000 mov r0, #0x0 08E4F6EA 46C0 mov r8, r8 08E4F6EC 4A04 ldr r2, [pc, #0x10] # pointer:08E4F700 08E4F6EE 4291 cmp r1 ,r2 08E4F6F0 DB00 blt #0x8e4f6f4 08E4F6F2 2001 mov r0, #0x1 08E4F6F4 4A03 ldr r2, [pc, #0xc] # pointer:08E4F704 -> 030004B0 (データ イベント命令40050000XXXXXXXXで詰まれる数字 ) 08E4F6F6 6310 str r0, [r2, #0x30] # pointer:030004E0 08E4F6F8 2000 mov r0, #0x0 08E4F6FA BD00 pop {, lr} 08E4F6FC BCF4 0202 //LDRDATA 08E4F700 C350 0000 //LDRDATA 08E4F704 04B0 0300 //LDRDATA
逆アセンブラをみたい関数のアドレスを入れれば、その内容が表示されます。
ただ、どこに何の関数があるかはわかりません。
ここでは、すべてのソースコードを取得してみましょう。
「全部ファイルに出力する」を選択してください。
ASMソースコードを出力するか、IDAにimportするmapfileを作成するか選択することができます。
最新版では、no$gba debugger用の symファイルも作成できます。
とりあえず、今回は、ASMソースコードを生成します。
ASMソースコードを生成するには、1時間ほど時間がかかるので、寝る前に実行することをお勧めします。
FEBuilderGBAは、disarmと違い以下の機能を持ちます
ただし、以下の制限があります。
FEBuilderGBAが知っているすべての情報が mapfileに出力されます。
しかし、まだまだ情報が足りません。
不明な関数について情報を知っている方は教えてください。
また、FEBuilderGBAが知っている構造体や、パッチなどの情報も逆アセンブラのmapfileとして利用するので、
パッチなどをあなたが投稿すればするほど、逆アセンブラも自動的に賢くなります。
ASMの構文については、以下の記事を読んでください。
https://feuniverse.us/t/gbafe-assembly-for-dummies-by-dummies/3563