tunozemichanの日記 / tunozemichan's diary

SORD社のコンピューターM68やM68MXの解析についての備忘録です。This blog is a memorandum about the analysis of SORD's computers M68 and M68MX.

ghidraを使ったBIOSなどバイナリファイルの解析方法のメモ(わかっているところまで)

ghidraで、BIOSなどのバイナリファイルを解析する段階までをメモとして書いておきます。

New Project -> Non-Shared Project -> Project Nameを入力します。

f:id:tunozemichan:20210601162026p:plain

バイナリファイルをインポートする。

解析したいバイナリファイルをインポートします。

 

f:id:tunozemichan:20210601163626p:plain

 

SORD M68MXは、mc68000マシンですから、Languageは上図のようになります。Coldfireでなくデフォルトを選ぶと、68040になってしまうので、素のmc68000としてはColdfireを選択するしかないかと思います。

OKを押す前に、Optionボタンを押して、ROMの情報を入れます。ベースアドレスは必須です。

 

f:id:tunozemichan:20210601163702p:plain

 

 

 

読み込みが終わったら、バイナリファイルをダブルクリックします。ヒドラのアイコンをダブルクリックすると何もない画面が開いてしまいます。必ずファイルをダブルクリックして下さい。

f:id:tunozemichan:20210601163733p:plain

コードが表示されると、上図のように解析するか聞いてくるので解析します。

 

f:id:tunozemichan:20210601162810p:plain

解析するでYesを選択すると、解析オプションを聞いてきます。細かいオプションの効用は分かりませんが、Prototypeオプションは付けても付けなくてもあまり変わりなかったです。ちなみに、Prototypeオプションを付けると解析時間は伸びます。

 

コードが読み込まれたら、WindowメニューからMemory Mapを選択します。+ボタンを押して、RAM領域を定義します。M68MXの場合は下図のようになると思います。よくわからないままExecute、Initializedにしています。

f:id:tunozemichan:20210601163933p:plain

 

下図のようなメモリマップになりました。本当はROMの後ろのアドレスにはデバイスがぶら下がっているので、それも加えると良いかもしれません。

f:id:tunozemichan:20210601164003p:plain

 

これで逆アセンブルする準備が整いました。mc68000は先頭にリセットベクタがあります。

M68MXでは、0xe00008なのでそこで、逆アセンブルします。右クリックして、dissasembleです。これでドカッと逆アセンブルされます。

 

f:id:tunozemichan:20210601164127p:plain

 

メモリマップを作っておくと下図のように、BIOSが行ったメモリアクセスの記録を表示してくれるというメリットがあります。アクセス元のアドレスの後ろにあるWとRはアクセスの形式で、各々書き込みと読み出しを意味します。

 

f:id:tunozemichan:20210601164710p:plain

 

ROMの後方に配置されているデバイスも含めて24MBすべてメモリマップにしておくと、デバイスへのアクセス方法(書き込みか読み込みか)で、レジスタのタイプが分かることがあります。下図では、書き込みだけをしているのでコントロールレジスタの可能性があります。

 

f:id:tunozemichan:20210601192225p:plain

 

ここまでくれば、先頭から読んでいくだけです。