さらに別のGameCube/Wii逆コンパイルツールキット。
Decomp-Toolkitは、開発者向けのコマンドラインツールとして、また逆コンパイルプロジェクトのビルドシステムのさまざまな部分の代替品として機能します。
新しい逆コンパイルプロジェクトで使用するには、プロジェクト構造を提供するDTK-Templateを参照して、ボンネットの下で分割活動を使用するシステムを構築します。
一致する逆コンパイルプロジェクトの目標は、元のゲームとまったく同じバイナリに戻るC/C ++コードを作成することです。これには、多くの場合、元のゲームと同じコンパイラを使用する必要があります。 (GameCubeとWiiの場合、Metrowerks Codewarrior)
C/C ++コードをコンパイルするとき、コンパイラ(この場合、 mwcceppc )は、すべてのソースファイルに対してオブジェクトファイル( .o )を生成します。このオブジェクトファイルには、コンパイルされたマシンコードと、リンカー( mwldeppc )が使用する情報が最終的な実行可能ファイルを生成します。
私たちのコードが一致していることを確認する1つの方法は、分解されたコードを取得し、まだ逆コンパイルされていない元のバイナリの一部と一緒にリンクすることです。まず、元のバイナリから再配置可能なオブジェクトを作成します。

(重く簡素化)
次に、一致するコードが書かれているときに、各オブジェクトを逆コンパイルバージョンに置き換えることができます。リンカーが元のバイトバイトと同じバイナートのバイナリを生成する場合、逆コンパイルコードが一致していることがわかります。
Decomp-Toolkitは、元のバイナリを再配置可能なオブジェクトに分析して分割するためのツールを提供し、逆コンパイルコードをリンクするために必要なリンカースクリプトやその他のファイルを生成します。
関数境界分析
高精度で関数の境界を発見します。さまざまなヒューリスティックを使用して、内部機能の制御フローからテールコールを乱用します。
署名分析
組み込みの署名データベースを使用して、一般的なメトロウクとSDK関数とオブジェクトを識別します。
これにより、 __init_cpp_exceptionsなどの必要なスプリットが自動的に生成されるのにも役立ちます。
再配置分析
コントロールフロー分析を実行し、高い精度で再構築リュケーションを再構築します。
いくつかの手動の調整(主にデータ内)では、これにより完全にシフト可能なオブジェクトが生成されるはずです。
セクション分析
署名および移転分析からの情報に基づいて、DOLおよびRELセクションを自動的に識別します。
オブジェクト分析
使用状況を分析して、データオブジェクトのタイプとサイズを特定しようとします。
また、文字列リテラル、幅広い文字列リテラル、文字列テーブルを識別しようとします。
分割
ユーザー構成に基づいてメモリ内で分割オブジェクトファイルを生成します。
mwldeppc.exeとのリンクをサポートするために、任意のUNSPLIT .ctors 、 .dtors 、 extab 、およびextabindexエントリが分析され、関連する機能とともに自動的に分割されます。これにより、リンカーが追加の構成なしでこれらのセクションを適切に生成することが保証されます。
分割オブジェクトの最終リンク順序を決定するために、トポロジー種が実行されます。
オブジェクトファイルの書き込み
アセンブラーは必要ありませんが、オブジェクトファイルを直接書き込みます。 (さようならdevkitppc!)
必要に応じて、オブジェクトファイルと一緒にGNUアセンブラー互換ファイルを書き込みます。
リンカースクリプト生成mwldeppc.exeのldscript.lcfを生成します。
入力オブジェクトから静的ライブラリ(.A)を作成します。
$ dtk ar create out.a input_1.o input_2.o
# or
$ echo input_1.o >> rspfile
$ echo input_2.o >> rspfile
$ dtk ar create out.a @rspfile静的ライブラリ(.a)ファイルの内容を抽出します。
複数のファイル、GLOBパターン( *.a )、および応答ファイル( @rspfileなど)を受け入れます。
オプション:
-o 、 --out <output-dir> :出力ディレクトリ。デフォルトは現在のディレクトリになります。-v 、 --verbose :verbose output。-q 、 --quiet :エラー以外のすべての出力を抑制します。 # Extracts to outdir
$ dtk ar extract lib.a -o outdir
# With multiple inputs, extracts to separate directories
# Extracts to outdir/lib1, outdir/lib2
$ dtk ar extract lib1.a lib2.a -o outdirCodewarrior C ++シンボルをデマングします。 cwdemangleの薄いラッパー。
$ dtk demangle ' BuildLight__9CGuiLightCFv '
CGuiLight::BuildLight () constdiscコマンドは、NODライブラリの周りのラッパーとそのnodtoolコマンドラインツールです。
ディスク画像に関する情報を表示します。
ディスク画像の内容をリストするには、VFS LSを使用します。
サポートされているディスク画像形式:
$ dtk disc info /path/to/game.isoディスク画像の内容をディレクトリに抽出します。
サポートされている形式については、ディスク情報を参照してください。
注記
VFS CPはより柔軟で、ディスク画像をサポートします。
$ dtk disc extract /path/to/game.iso [outdir]デフォルトでは、メインデータパーティションのみが抽出されます。
-p / --partitionオプションを使用して、別のパーティションを選択します。
(オプション: all 、 data 、 update 、 channel 、またはパーティションインデックス)
サポートされているディスク画像を生のISO(GCM)に変換します。
形式がロスレスの場合、出力は元のディスク画像と同一になります。
サポートされている形式については、ディスク情報を参照してください。
$ dtk disc convert /path/to/game.wia /path/to/game.isoディスク画像の内容をハッシュし、内蔵のredumpデータベースに対して検証します。
サポートされている形式については、ディスク情報を参照してください。
$ dtk disc verify /path/to/game.isoDOLファイルを分析し、情報セクションとシンボル情報を出力します。
VFS抽象化の情報については、VFS LSを参照してください。
$ dtk dol info input.dol
# or, directly from a disc image
$ dtk dol info ' disc.rvz:sys/main.dol '重要
このコマンドは、逆コンパイルプロジェクトのビルドシステムの一部として使用することを目的としています。
プロジェクト構造の例と構成に関するドキュメントについては、DTK-Templateを参照してください。
ユーザー構成に基づいて、DOLファイルを再配置可能なオブジェクトに分析および分割します。
$ dtk dol split config.yml targetリンクされたELFの問題のためのシンプルなDIFFツール。 (はい、dolではありません。それは誤解されています。)
不一致を引き起こす最も明らかな違いを見つけようとします。
プロジェクト構成ファイルと、リンクされたELFファイルへのパスを渡して比較します。
$ dtk dol diff config.yml build/main.elfリンクされたELFからプロジェクト構成に更新されたシンボルを適用します。 (繰り返しますが、誤解されました。)
ファイルを一致させた後に便利です。最終結果から更新されたシンボル情報をプルします。
$ dtk dol apply config.yml build/main.elfDOL(&rels)から初期プロジェクト構成ファイルを生成します。
DOLファイルと、それにリンクされているRELファイルを渡します。
または、Wiiゲームの場合は、 selfile.selを渡します。 (RSOではありません)
$ dtk dol config main.dol rels/ * .rel -o config.ymlELFファイルからのDumps Dwarf 1.1情報。 (ドワーフ2+をサポートしていません)
$ dtk dwarf dump input.elf解体されていないCodewarrior ELFファイルを分解します。可能な場合は、オブジェクトを自動的に分割し、再構築を再構築しようとします。
$ dtk elf disasm input.elf out mwldeppc.exeとの互換性を確保するために、GNUアセンブラーが構築したオブジェクトの問題を修正します。
(asm)接尾辞を追加します。 (進行状況の計算を一致させるため) # input and output can be the same
$ dtk elf fixup file.o file.o提供されたELFファイルからDOLファイルを作成します。
$ dtk elf2dol input.elf output.dol
# or, to ignore certain sections
$ dtk elf2dol input.elf output.dol --ignore debug_section1 --ignore debug_section2Processes Codewarrior MapファイルとシンボルとTUに関する情報を提供します。
$ dtk map entries Game.MAP ' Unit.o '
# Outputs all symbols that are referenced by Unit.o
# This is useful for finding deduplicated weak functions,
# which only show on first use in the link map.
$ dtk map symbol Game.MAP ' Function__5ClassFv '
# Outputs reference information for Function__5ClassFv
# CodeWarrior link maps can get very deeply nested,
# so this is useful for emitting direct references
# in a readable format.RELファイルに関する情報を印刷します。
VFS抽象化の情報については、VFS LSを参照してください。
$ dtk rel info input.rel
# or, directly from a disc image
$ dtk rel info ' disc.rvz:files/RELS.arc:amem/d_a_tag_so.rel 'お気に入りのリバースエンジニアリングソフトウェアの分析に適したDOLファイルと関連RELを単一のELFファイルにマージします。
$ dtk rel info main.dol rels/ * .rel -o merged.elf警告
このコマンドはまだ機能していません。
RSOファイルに関する情報を印刷します。
$ dtk rso info input.rso警告
このコマンドは、まだSELファイルの作成をサポートしていません。
再配置可能なELFファイルからRSOファイルを作成します。
オプション:
-o 、 --output <File> :出力rsoファイル。-m 、 --module-name <Name> :モジュール名(またはパス)。デフォルト:入力名-e 、 --export <File> :エクスポートされたシンボル名を含むファイル。 (Newline分離) $ dtk rso make input.elf -o input.rsoSHA-1ハッシュを計算して検証します。
$ dtk shasum baserom.dol
949c5ed7368aef547e0b0db1c3678f466e2afbff baserom.dol
$ dtk shasum -c baserom.sha1
baserom.dol: OKNLZSSが圧縮されたファイルを減圧します。
$ dtk nlzss decompress input.bin.lz -o output.bin
# or, for batch processing
$ dtk nlzss decompress rels/ * .lz -o rels注記
VFS LSはより柔軟で、RARCアーカイブをサポートしています。
このコマンドはdtk vfs ls -r input.arc:
RARC(古い.ARC)アーカイブの内容をリストします。
$ dtk rarc list input.arc注記
VFS CPはより柔軟で、RARCアーカイブをサポートしています。
このコマンドは、 dtk vfs cp input.arc: output_dirに相当するようになりました
RARC(古い.ARC)アーカイブの内容を抽出します。
$ dtk rarc extract input.arc -o output_dir注記
VFS LSはより柔軟であり、U8アーカイブをサポートしています。
このコマンドはdtk vfs ls -r input.arc:
U8(新しい.ARC)アーカイブの内容を抽出します。
$ dtk u8 list input.arc注記
VFS CPはより柔軟で、U8アーカイブをサポートしています。
このコマンドは、 dtk vfs cp input.arc: output_dirに相当するようになりました
U8(新しい.ARC)アーカイブの内容を抽出します。
$ dtk u8 extract input.arc -o output_dirDecomp-Toolkitには、さまざまなコンテナを使用できる強力な仮想ファイルシステム(VFS)抽象化があります。すべての操作は、最小限のオーバーヘッドと一時的なファイルがないことでメモリ内で発生します。
サポートされているコンテナ:
サポートされている圧縮形式は透過的に処理されます。
:nlzss ) vfs lsコンテナまたはディレクトリの内容をリストします。
オプション:
-r 、 --recursive :再帰的にコンテンツをリストします。-s 、 --short :ファイル名のみをリストします。例:
# List the contents of the `amem` directory inside `RELS.arc` in a disc image
$ dtk vfs ls ' disc.rvz:files/RELS.arc:amem '
# List the contents of `RELS.arc` recursively
$ dtk vfs ls -r ' disc.rvz:files/RELS.arc: '
# All commands that accept a file path can also accept a VFS path
$ dtk rel info ' disc.rvz:files/RELS.arc:amem/d_a_tag_so.rel '
# Example disc image within a disc image
$ dtk dol info ' disc.rvz:files/zz_demo.tgc:sys/main.dol 'VFS抽象化の情報については、VFS LSを参照してください。
vfs cpホストファイルシステムに再帰的にファイルとディレクトリをコピーします。
オプション:
--no-decompress :コピー時にファイルを減圧しないでください。-q 、 --quiet :エラー以外のすべての出力を抑制します。例:
# Extract a file from a nested path in a disc image to the current directory
$ dtk vfs cp ' disc.rvz:files/RELS.arc:amem/d_a_tag_so.rel ' .
# Directories are copied recursively, making it easy to extract entire archives
$ dtk vfs cp ' disc.rvz:files/RELS.arc: ' rels
# Or, to disable automatic decompression
$ dtk vfs cp --no-decompress ' disc.rvz:files/RELS.arc: ' relsYay0-Compressedファイルを減圧します。
$ dtk yay0 decompress input.bin.yay0 -o output.bin
# or, for batch processing
$ dtk yay0 decompress rels/ * .yay0 -o relsYay0圧縮を使用してファイルを圧縮します。
$ dtk yay0 compress input.bin -o output.bin.yay0
# or, for batch processing
$ dtk yay0 compress rels/ * -o relsYAZ0圧縮ファイルを減圧します。
$ dtk yaz0 decompress input.bin.yaz0 -o output.bin
# or, for batch processing
$ dtk yaz0 decompress rels/ * .yaz0 -o relsYAZ0圧縮を使用してファイルを圧縮します。
$ dtk yaz0 compress input.bin -o output.bin.yaz0
# or, for batch processing
$ dtk yaz0 compress rels/ * -o relsWADファイルに関する情報を印刷します。
$ dtk wad info input.wad注記
VFS CPはより柔軟で、WADファイルをサポートします。
このコマンドは、 dtk vfs cp input.wad: output_dirに相当するようになりました
WADファイルの内容を抽出します。
$ dtk wad extract input.wad -o output_dirWADファイルの内容を検証します。
$ dtk wad verify input.wad