Ein weiteres Toolkit für Gamecube/Wii -Dekompilierung.
Decomp-Toolkit fungiert sowohl als Befehlszeilen-Tool für Entwickler als auch als Ersatz für verschiedene Teile eines Aufbausystems eines Dekompilierungsprojekts.
Für die Verwendung in einem neuen Dekompilierungsprojekt siehe DTK-TEMplate, das eine Projektstruktur und ein Build-System bietet, das unter der Motorhaube Decomp-Toolkit verwendet.
Das Ziel eines passenden Dekompilierungsprojekts ist es, C/C ++ - Code zu schreiben, der genau zu dem gleichen Binärer wie dem ursprünglichen Spiel kompiliert. Dies erfordert häufig die Verwendung desselben Compilers wie das ursprüngliche Spiel. (Für Gamecube und Wii, Metrowerks Codewarrior)
Beim Kompilieren von C/C ++ - Code generiert der Compiler (in unserem Fall mwcceppc ) für jede Quelldatei eine Objektdatei ( .o ). Diese Objektdatei enthält den kompilierten Maschinencode sowie Informationen, mit denen der Linker ( mwldeppc ) die endgültige ausführbare Datei generiert.
Eine Möglichkeit, zu überprüfen, ob unser Code eine Übereinstimmung ist, besteht darin, jeden Code zu nehmen, der zerlegt wurde, und ihn neben Teilen der ursprünglichen Binärdatum verbinden, die noch nicht zerlegt wurden. Zunächst erstellen wir aus der ursprünglichen Binärdatei verlagerte Objekte:

(Stark vereinfacht)
Anschließend kann jedes Objekt durch eine dekompilierte Version ersetzt werden, wenn der Matching -Code geschrieben wurde. Wenn der Linker immer noch eine Binärdatei erzeugt, die mit dem Original identisch ist, wissen wir, dass der dekompilierte Code eine Übereinstimmung ist.
Decomp-Toolkit bietet Tooling zur Analyse und Aufteilung des ursprünglichen Binärs in verlagbare Objekte sowie zum Generieren des Linker-Skripts und anderer Dateien, die zum Verknüpfen des dekompilierten Codes erforderlich sind.
Funktionsgrenzeanalyse
Entdeckt Funktionen Grenzen mit hoher Genauigkeit. Verwendet verschiedene Heuristiken, um Schwanzaufrufe aus dem Kontrollfluss der inneren Funktion zu veranlassen.
Signaturanalyse
Verwendet eine integrierte Signaturdatenbank, um gemeinsame Metrowerks- und SDK-Funktionen und -objekte zu identifizieren.
Dies hilft auch dabei, die erforderlichen Spaltungen automatisch zu decomp-toolkit wie __init_cpp_exceptions zu generieren.
Umzugsanalyse
Führt Kontroll-Flow-Analyse durch und reserviert Umzug mit hoher Genauigkeit.
Bei einigen manuellen Optimierungen (hauptsächlich in Daten) sollte dies vollverschiebbare Objekte erzeugen.
Abschnittsanalyse
Identifiziert automatisch DOL- und REL -Abschnitte basierend auf Informationen aus der Signatur- und Umzugsanalyse.
Objektanalyse
Versuche, den Typ und die Größe von Datenobjekten durch Analyse der Verwendung zu identifizieren.
Versucht auch, String -Literale, breite String -Literale und String -Tabellen zu identifizieren.
Aufteilung
Generiert auf der Benutzerkonfiguration geteilte Objektdateien im Speicher.
Um das Relinking mit mwldeppc.exe zu unterstützen, werden alle nicht plit .ctors , .dtors , extab und extabindex -Einträge analysiert und automatisch zusammen mit ihren zugehörigen Funktionen aufgeteilt. Dies stellt sicher, dass der Linker diese Abschnitte ohne zusätzliche Konfiguration ordnungsgemäß generiert.
Eine topologische Sortierung wird durchgeführt, um die endgültige Verbindung der geteilten Objekte zu bestimmen.
Objektdatei schreiben
Schreibt Objektdateien direkt, ohne dass Assembler erforderlich ist. (Bye Devkitppc!)
Auf Wunsch schreibt optional neben den Objektdateien GNU-Assembler-kompatible Dateien.
Linker Skript -Generierung
Generiert ldscript.lcf für mwldeppc.exe .
Erstellen Sie eine statische Bibliothek (.a) aus den Eingabefjekten.
$ 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 @rspfileExtrahiert den Inhalt statischer Bibliotheksdateien (.a).
Akzeptiert mehrere Dateien, GLOB -Muster (z. B. *.a ) und Antwortdateien (z. B. @rspfile ).
Optionen:
-o , --out <output-dir> : Ausgabeverzeichnis. Standardeinstellungen zum aktuellen Verzeichnis.-v , --verbose : ausführliche Ausgabe.-q , --quiet : Unterdrückt alle Ausgaben außer Fehlern. # 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 outdirDemangles Codewarrior C ++ Symbole. Eine dünne Wrapper für Cwdemangle.
$ dtk demangle ' BuildLight__9CGuiLightCFv '
CGuiLight::BuildLight () const disc -Befehle sind Verpackungen um die NOD -Bibliothek und das nodtool -Befehlszeilen -Tool.
Zeigt Informationen zu Disc -Bildern an.
Verwenden Sie VFS LS, um den Inhalt eines CD -Bildes aufzulisten.
Unterstützte Disc -Bildformate:
$ dtk disc info /path/to/game.isoExtrahiert den Inhalt von Disc -Bildern in ein Verzeichnis.
Siehe Disc -Informationen für unterstützte Formate.
Notiz
VFS CP ist flexibler und unterstützt Disc -Bilder.
$ dtk disc extract /path/to/game.iso [outdir] Standardmäßig wird nur die Hauptdatenpartition extrahiert.
Verwenden Sie die Option -p / --partition , um eine andere Partition auszuwählen.
(Optionen: all , data , update , channel oder ein Partitionsindex)
Konvertiert jedes unterstützte Disc -Bild in RAW ISO (GCM).
Wenn das Format verlustlos ist, ist die Ausgabe mit dem ursprünglichen Disc -Bild identisch.
Siehe Disc -Informationen für unterstützte Formate.
$ dtk disc convert /path/to/game.wia /path/to/game.isoHashes den Inhalt eines CD-Bildes und überprüft es mit einer integrierten Redump-Datenbank.
Siehe Disc -Informationen für unterstützte Formate.
$ dtk disc verify /path/to/game.isoAnalysiert eine DOL -Datei und gibt Informationen und Symbolinformationen aus.
Informationen zur VFS -Abstraktion finden Sie in VFS LS.
$ dtk dol info input.dol
# or, directly from a disc image
$ dtk dol info ' disc.rvz:sys/main.dol 'Wichtig
Dieser Befehl soll als Teil des Build -Systems eines Dekompilierungsprojekts verwendet werden.
Für eine Beispielprojektstruktur und zur Dokumentation der Konfiguration siehe DTK-Template.
Analysiert und teilt eine DOL -Datei basierend auf der Benutzerkonfiguration in lockbare Objekte an und spaltet sie auf.
$ dtk dol split config.yml target Einfaches Diff -Tool für Probleme in einem verknüpften Elf. (Ja, nicht Dol. Es ist falsch benannt.)
Versucht, den offensichtlichsten Unterschied zu finden, der zu einer Nichtübereinstimmung führt.
Geben Sie die Projektkonfigurationsdatei und den Pfad in die verknüpfte ELF -Datei über.
$ dtk dol diff config.yml build/main.elfWendet aktualisierte Symbole von einem verknüpften ELF auf die Projektkonfiguration an. (Wieder fehlbezeichnet.)
Nützlich nach einer Datei. Es wird aktualisierte Symbolinformationen aus dem Endergebnis abgerufen.
$ dtk dol apply config.yml build/main.elfGeneriert eine anfängliche Projektkonfigurationsdatei aus einem DOL (& rels).
Geben Sie die DOL -Datei und alle damit verbundenen REL -Dateien ein.
Oder für Wii -Spiele in der selfile.sel . (Nicht RSOs)
$ dtk dol config main.dol rels/ * .rel -o config.ymlDumps Zwerg 1.1 Informationen aus einer ELF -Datei. (Unterstützt Zwerg 2+ nicht )
$ dtk dwarf dump input.elfZerlegen Sie eine nicht gestaltete Codewarrior -Elf -Datei. Versuche, Objekte automatisch aufzuteilen und nach Möglichkeit Umzug wieder aufzubauen.
$ dtk elf disasm input.elf out Behebt Probleme mit GNU-Assembler-Objekten, um die Kompatibilität mit mwldeppc.exe zu gewährleisten.
(asm) Suffix hinzu. (Für die Berechnung des Fortschritts des Fortschritts) # input and output can be the same
$ dtk elf fixup file.o file.oErstellt eine DOL -Datei aus der bereitgestellten ELF -Datei.
$ dtk elf2dol input.elf output.dol
# or, to ignore certain sections
$ dtk elf2dol input.elf output.dol --ignore debug_section1 --ignore debug_section2Verarbeitet Codewarrior -Kartendateien und bietet Informationen zu Symbolen und TUS.
$ 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.Druckt Informationen zu einer REL -Datei.
Informationen zur VFS -Abstraktion finden Sie in 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 'Fusioniert eine DOL -Datei und die zugehörigen Rels in eine einzelne ELF -Datei, die für die Analyse in Ihrer bevorzugten Reverse Engineering -Software geeignet ist.
$ dtk rel info main.dol rels/ * .rel -o merged.elfWarnung
Dieser Befehl ist noch nicht funktional.
Druckt Informationen zu einer RSO -Datei.
$ dtk rso info input.rsoWarnung
Dieser Befehl unterstützt noch nicht das Erstellen von Sel -Dateien.
Erstellt eine RSO -Datei aus einer lockeren ELF -Datei.
Optionen:
-o , --output <File> : RSO -Datei Ausgabe.-m , --module-name <Name> : Modulname (oder Pfad). Standard: Eingabenname-e , --export <File> : Datei mit exportierten Symbolnamen. (Newline getrennt) $ dtk rso make input.elf -o input.rsoBerechnen und überprüfen Sie SHA-1-Hashes.
$ dtk shasum baserom.dol
949c5ed7368aef547e0b0db1c3678f466e2afbff baserom.dol
$ dtk shasum -c baserom.sha1
baserom.dol: OKDekomprimiert NLZSS-komprimierte Dateien.
$ dtk nlzss decompress input.bin.lz -o output.bin
# or, for batch processing
$ dtk nlzss decompress rels/ * .lz -o relsNotiz
VFS LS ist flexibler und unterstützt RARC -Archive.
Dieser Befehl entspricht jetzt dtk vfs ls -r input.arc:
Listet den Inhalt eines RARC -Archivs (älterer .AG) auf.
$ dtk rarc list input.arcNotiz
VFS CP ist flexibler und unterstützt RARC -Archive.
Dieser Befehl entspricht jetzt dtk vfs cp input.arc: output_dir
Extrahiert den Inhalt eines RARC -Archivs (älterer .AG).
$ dtk rarc extract input.arc -o output_dirNotiz
VFS LS ist flexibler und unterstützt U8 -Archive.
Dieser Befehl entspricht jetzt dtk vfs ls -r input.arc:
Extrahiert den Inhalt eines U8 (neueren .ARC) -Archivs.
$ dtk u8 list input.arcNotiz
VFS CP ist flexibler und unterstützt U8 -Archive.
Dieser Befehl entspricht jetzt dtk vfs cp input.arc: output_dir
Extrahiert den Inhalt eines U8 (neueren .ARC) -Archivs.
$ dtk u8 extract input.arc -o output_dirDecomp-Toolkit verfügt über eine leistungsstarke Abstraktion für virtuelle Dateisysteme (VFS), mit der Sie mit einer Vielzahl von Containern arbeiten können. Alle Vorgänge erfolgen im Speicher mit minimalem Overhead und ohne temporäre Dateien.
Unterstützte Behälter:
Unterstützte Komprimierungsformate werden transparent behandelt:
:nlzss im Pfad) vfs ls listet den Inhalt eines Containers oder Verzeichnisses auf.
Optionen:
-r , --recursive : Auflistung Inhalt auflisten.-s , --short : Nur Listendateinamen.Beispiele:
# 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 'Informationen zur VFS -Abstraktion finden Sie in VFS LS.
vfs cp kopiert Dateien und Verzeichnisse rekursiv zum Host -Dateisystem.
Optionen:
--no-decompress : Dekomprimieren Sie Dateien beim Kopieren nicht.-q , --quiet : Unterdrückt alle Ausgaben außer Fehlern.Beispiele:
# 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: ' relsDekomprimiert yay0-zeitkomprimierte Dateien.
$ dtk yay0 decompress input.bin.yay0 -o output.bin
# or, for batch processing
$ dtk yay0 decompress rels/ * .yay0 -o relsKomprimiert Dateien mit YAY0 -Komprimierung.
$ dtk yay0 compress input.bin -o output.bin.yay0
# or, for batch processing
$ dtk yay0 compress rels/ * -o relsDekomprimiert yaz0-komprimierte Dateien.
$ dtk yaz0 decompress input.bin.yaz0 -o output.bin
# or, for batch processing
$ dtk yaz0 decompress rels/ * .yaz0 -o relsKomprimiert Dateien mithilfe der YAZ0 -Komprimierung.
$ dtk yaz0 compress input.bin -o output.bin.yaz0
# or, for batch processing
$ dtk yaz0 compress rels/ * -o relsDruckt Informationen zu einer Wad -Datei.
$ dtk wad info input.wadNotiz
VFS CP ist flexibler und unterstützt Wad -Dateien.
Dieser Befehl entspricht jetzt dtk vfs cp input.wad: output_dir
Extrahiert den Inhalt einer Wad -Datei.
$ dtk wad extract input.wad -o output_dirÜberprüft den Inhalt einer Wad -Datei.
$ dtk wad verify input.wad