ソースコードを見る方法
作成日時: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を参考にして作成しました。