ソースコードを見る方法
作成日時:2022/02/08(火) 19:17:45
更新日時:2022/02/08(火) 19:17:45
厳密に言うとソースコードではありませんが、サンシャインはC++で開発されたため、サンシャインの実行可能ファイル(main.dol)を用いてC言語のコードに変換すれば、ソースコードに近いコードを見ることができます。
準備
ソースコードを見るためには、サンシャインのISOを吸い出してmain.dolを抽出しておく必要があります。準備の手順はこちらの記事を参照してください。
Ghidraの導入
ソースコードを見る(Disassembleする)ためには、Ghidraというソフトウェアを使います。また、サンシャインといったGC/Wiiのゲームをより簡単に扱うためには、Ghidra-GameCube-Loaderという拡張機能が必要です。
2022/02/08時点では、Ghidraはバージョン10.1.1を使います。今後新しいバージョンのGhidraがリリースされる時、Ghidra-GameCube-Loaderが同じバージョンに対応しているか必ず確認してください。例えば、Ghidraの最新版は10.1.2で、Ghidra-GameCube-Loaderは10.1.1にしか対応していない場合、10.1.2を使うことはできません。
Ghidra
Releaseのzipファイルをダウンロードして解凍します。
また、Ghidraを実行するためには、JDK 11 64-bitが必要です。Windowsユーザでよく分からない方はこのファイルをダウンロードしてインストールしてください。
Ghidra-GameCube-Loader
これはGC/Wiiのバイナリ(main.dolなど)を読み込むための拡張機能です。
Releaseのzipファイルをダウンロードし、解凍せずに<Ghidra>/Extensions/Ghidra/の直下に移動します。
次に、<Ghidra>/ghidraRun.batをダブルクリックしてGhidraを実行します。
メニューのFile > Install Extensions...をクリックし、GameCubeLoaderにチェックを入れます。
OKボタンをクリックしてGhidraを再起動します。
main.dol の読み込み
File > New Project...をクリックし、プロジェクトを作成します。Project TypeはNon-Shared Projectで大丈夫です。
プロジェクトを作成したら、File > Import File...をクリックし、<SMS>/sys/main.dol(<SMS>/は抽出したサンシャインのフォルダ)を選択してインポートします。GeckoLoaderを使ってdolファイルを改変した場合は元のdolファイル(<SMS>/sys/main0.dolなど)を選択してください。
FormatやLanguageなどは自動的に検出されるので、そのままOKをクリックします。
次に、Would you like to load a symbol map for this DOL executable? というメッセージが出るはずです。Yesをクリックし、<SMS>/files/mario.MAPを選択します。
Import Results Summary が出たら準備完了です。main.dolをダブルクリックしてプロジェクトを開きます。
New Plugins Found! というメッセージが出た場合、Yesを押してチェックを入れてインストールします。
次に、main.dol has not been analyzed. Would you like to analyze it now? というメッセージが出るはずです。Yesをクリックし、(GameCube/Wii) Program Analyzerにチェックを入れ、Analyzeボタンを押して分析を始めます。
分析が完了したらこのようにC言語に変換されたコードが見れます。
変換されたコードを読んで各変数の意味やclassの構造などを解読し、サンシャインへの理解を深めましょう。
付録
リソース
既に解読されたclassなどの情報はSMS RAM Mapでまとめられています。参考にしながら解読を進めることをお薦めします。
また、必須ではありませんが、PowerPCアセンブリやGeckoコードを学びたい場合は、Go From Noob to Veteran ASM Coderを参照してください。
参考文献
この記事はSMS ShoutWikiを参考にして作成しました。