Encore une autre boîte à outils de décompilation Gamecube / Wii.
Le décomposition fonctionne à la fois comme un outil de ligne de commande pour les développeurs et en remplacement de différentes parties du système de construction d'un projet de décompilation.
Pour une utilisation dans un nouveau projet de décompilation, voir DTK-Template, qui fournit une structure de projet et un système de construction qui utilise du décomposition sous le capot.
L'objectif d'un projet de décompilation assorti est d'écrire du code C / C ++ qui revient au même binaire que le jeu original. Cela nécessite souvent d'utiliser le même compilateur que le jeu d'origine. (Pour GameCube et Wii, Metrowerks Codewarrior)
Lors de la compilation du code C / C ++, le compilateur (dans notre cas, mwcceppc ) génère un fichier d'objet ( .o ) pour chaque fichier source. Ce fichier d'objet contient le code machine compilé, ainsi que des informations que le linker ( mwldeppc ) utilise pour générer l'exécutable final.
Une façon de vérifier que notre code est une correspondance de prendre tout code décompilé et de le lier aux côtés de parties du binaire d'origine qui n'ont pas encore été décompilées. Tout d'abord, nous créons des objets relocalisés à partir du binaire d'origine:

(Fortement simplifié)
Ensuite, chaque objet peut être remplacé par une version décompilée lorsque le code correspondant est écrit. Si le linker génère toujours un binaire qui est octet-pour-octet identique à l'original, nous savons que le code décompilé est une correspondance.
Decomp-Toolkit fournit des outils pour analyser et diviser le binaire d'origine en objets relocalisés, ainsi que la génération du script de liaison et d'autres fichiers nécessaires pour relier le code décompilé.
Analyse des limites de la fonction
Découvre les limites de la fonction avec une grande précision. Utilise diverses heuristiques pour désambiguïter les appels de queue à partir du flux de contrôle de fonction intérieur.
Analyse de signature
Utilise une base de données de signature intégrée pour identifier les métrowerks et les objets SDK communs.
Cela aide également à décomposer-toolkit générer automatiquement des divisions requises, comme __init_cpp_exceptions .
Analyse de relocalisation
Effectue une analyse du flux de contrôle et reconstruit les délocalisations avec une grande précision.
Avec quelques ajustements manuels (principalement dans les données), cela devrait générer des objets entièrement décalables.
Analyse de la section
Identifie automatiquement les sections DOL et REL basées sur les informations de la signature et de l'analyse de relocalisation.
Analyse des objets
Tente d'identifier le type et la taille des objets de données en analysant l'utilisation.
Essaye également d'identifier les littéraux de chaînes, les littéraux de chaînes larges et les tables de chaîne.
Scission
Génère des fichiers d'objets divisés en mémoire en fonction de la configuration de l'utilisateur.
Afin de prendre en charge la relâche avec mwldeppc.exe , toutes .ctors , .dtors , extab et extabindex sont analysées et divisées automatiquement avec leurs fonctions associées. Cela garantit que le linker générera correctement ces sections sans aucune configuration supplémentaire.
Un type topologique est effectué pour déterminer l'ordre de lien final des objets divisés.
Écriture de fichiers d'objet
Écrit les fichiers d'objets directement, sans assembleur requis. (Bye Devkitppc!)
Si vous le souhaitez, écrit éventuellement des fichiers compatibles avec l'assembleur GNU à côté des fichiers d'objet.
Génération de script de linker
Génère ldscript.lcf pour mwldeppc.exe .
Créez une bibliothèque statique (.A) à partir des objets d'entrée.
$ 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 @rspfileExtrait le contenu des fichiers de bibliothèque statique (.a).
Accepte plusieurs fichiers, les modèles GLOB (par exemple *.a ) et les fichiers de réponse (par exemple @rspfile ).
Options:
-o , --out <output-dir> : répertoire de sortie. Par défaut est le répertoire actuel.-v , --verbose : sortie verbale.-q , --quiet : supprime toutes les sorties sauf les erreurs. # 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 outdirDoumangles Codewarrior C ++ Symboles. Un wrapper mince pour cwdemangle.
$ dtk demangle ' BuildLight__9CGuiLightCFv '
CGuiLight::BuildLight () const Les commandes disc sont des emballages autour de la bibliothèque NOD et de son outil de ligne de commande nodtool .
Affiche des informations sur les images du disque.
Pour répertorier le contenu d'une image de disque, utilisez VFS LS.
Formats d'image du disque pris en charge:
$ dtk disc info /path/to/game.isoExtrait le contenu des images de disque à un répertoire.
Voir les informations du disque pour les formats pris en charge.
Note
VFS CP est plus flexible et prend en charge les images du disque.
$ dtk disc extract /path/to/game.iso [outdir] Par défaut, seule la partition de données principale est extraite.
Utilisez l'option -p / --partition pour choisir une partition différente.
(Options: all , data , update , channel ou index de partition)
Convertit toute image de disque prise en charge en ISO brut (GCM).
Si le format est sans perte, la sortie sera identique à l'image du disque d'origine.
Voir les informations du disque pour les formats pris en charge.
$ dtk disc convert /path/to/game.wia /path/to/game.isoHache le contenu d'une image de disque et le vérifie dans une base de données de refonte intégrée.
Voir les informations du disque pour les formats pris en charge.
$ dtk disc verify /path/to/game.isoAnalyse un fichier DOL et des informations sur la section des informations et les informations sur le symbole.
Voir VFS LS pour plus d'informations sur l'abstraction VFS.
$ dtk dol info input.dol
# or, directly from a disc image
$ dtk dol info ' disc.rvz:sys/main.dol 'Important
Cette commande est destinée à être utilisée dans le cadre du système de construction d'un projet de décompilation.
Pour un exemple de structure de projet et pour la documentation sur la configuration, voir DTK-Template.
Analyse et divise un fichier DOL dans des objets relocalisés en fonction de la configuration de l'utilisateur.
$ dtk dol split config.yml target Outil Diff simple pour les problèmes dans un ELF lié. (Oui, pas Dol. C'est informé.)
Essaie de trouver la différence la plus évidente provoquant un décalage.
Passez dans le fichier de configuration du projet et le chemin d'accès au fichier ELF lié à comparer.
$ dtk dol diff config.yml build/main.elfApplique des symboles mis à jour d'un ELF lié à la configuration du projet. (Encore une fois, mal nommé.)
Utile après faire correspondre un fichier. Il réalisera des informations de symbole mises à jour du résultat final.
$ dtk dol apply config.yml build/main.elfGénère un fichier de configuration de projet initial à partir d'un DOL (& RELS).
Passez dans le fichier DOL et tous les fichiers REL qui y sont liés.
Ou, pour les jeux Wii, passez dans le selfile.sel . (Pas les RSO)
$ dtk dol config main.dol rels/ * .rel -o config.ymlDumps Dwarf 1.1 Informations à partir d'un fichier ELF. (Ne prend pas en charge le nain 2+)
$ dtk dwarf dump input.elfDémonter un fichier ELF Codewarrior non dépassé. Tente de diviser automatiquement les objets et de reconstruire les délocalisations lorsque cela est possible.
$ dtk elf disasm input.elf out Correction des problèmes avec les objets construits par assembleur GNU pour assurer la compatibilité avec mwldeppc.exe .
(asm) au symbole de fichier. (Pour faire correspondre le calcul de la progression) # input and output can be the same
$ dtk elf fixup file.o file.oCrée un fichier DOL à partir du fichier ELF fourni.
$ dtk elf2dol input.elf output.dol
# or, to ignore certain sections
$ dtk elf2dol input.elf output.dol --ignore debug_section1 --ignore debug_section2Traite les fichiers de carte codewarrior et fournit des informations sur les symboles et les 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.Imprime les informations sur un fichier rel.
Voir VFS LS pour plus d'informations sur l'abstraction VFS.
$ 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 'Merge un fichier DOL et des REL associés dans un seul fichier ELF, adapté à l'analyse dans votre logiciel d'ingénierie inverse préféré.
$ dtk rel info main.dol rels/ * .rel -o merged.elfAvertissement
Cette commande n'est pas encore fonctionnelle.
Imprime les informations sur un fichier RSO.
$ dtk rso info input.rsoAvertissement
Cette commande ne prend pas encore en charge la création de fichiers SEL.
Crée un fichier RSO à partir d'un fichier ELF relocable.
Options:
-o , --output <File> : Sortie du fichier RSO.-m , --module-name <Name> : nom (ou chemin du module). Par défaut: nom d'entrée-e , --export <File> : Fichier contenant des noms de symboles exportés. (Newline séparée) $ dtk rso make input.elf -o input.rsoCalculez et vérifiez les hachages SHA-1.
$ dtk shasum baserom.dol
949c5ed7368aef547e0b0db1c3678f466e2afbff baserom.dol
$ dtk shasum -c baserom.sha1
baserom.dol: OKDécompressez les fichiers compressés NLZSS.
$ dtk nlzss decompress input.bin.lz -o output.bin
# or, for batch processing
$ dtk nlzss decompress rels/ * .lz -o relsNote
VFS LS est plus flexible et prend en charge les archives RARC.
Cette commande est désormais équivalente à dtk vfs ls -r input.arc:
Répertorie le contenu d'une archive RARC (anciens .arc).
$ dtk rarc list input.arcNote
VFS CP est plus flexible et prend en charge les archives RARC.
Cette commande est désormais équivalente à dtk vfs cp input.arc: output_dir
Extrait le contenu d'une archive RARC (anciens .arc).
$ dtk rarc extract input.arc -o output_dirNote
VFS LS est plus flexible et prend en charge les archives U8.
Cette commande est désormais équivalente à dtk vfs ls -r input.arc:
Extrait le contenu d'une archive U8 (plus récente .arc).
$ dtk u8 list input.arcNote
VFS CP est plus flexible et prend en charge les archives U8.
Cette commande est désormais équivalente à dtk vfs cp input.arc: output_dir
Extrait le contenu d'une archive U8 (plus récente .arc).
$ dtk u8 extract input.arc -o output_dirDecompoolkit a une puissante abstraction du système de fichiers virtuels (VFS) qui vous permet de travailler avec une variété de conteneurs. Toutes les opérations se produisent en mémoire avec des frais généraux minimaux et aucun fichier temporaire.
Conteneurs pris en charge:
Les formats de compression pris en charge sont traités de manière transparente:
:nlzss dans le chemin) vfs ls répertorie le contenu d'un conteneur ou d'un répertoire.
Options:
-r , --recursive : répertorier récursivement les contenus.-s , --short : listez uniquement les noms de fichiers.Exemples:
# 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 'Voir VFS LS pour plus d'informations sur l'abstraction VFS.
vfs cp copie des fichiers et des répertoires récursivement au système de fichiers hôte.
Options:
--no-decompress : Ne décompressez pas les fichiers lors de la copie.-q , --quiet : supprime toutes les sorties sauf les erreurs.Exemples:
# 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: ' relsDécompressez les fichiers compressés Yay0.
$ dtk yay0 decompress input.bin.yay0 -o output.bin
# or, for batch processing
$ dtk yay0 decompress rels/ * .yay0 -o relsCompresse les fichiers à l'aide de la compression Yay0.
$ dtk yay0 compress input.bin -o output.bin.yay0
# or, for batch processing
$ dtk yay0 compress rels/ * -o relsDécompressez les fichiers compressés YAZ0.
$ dtk yaz0 decompress input.bin.yaz0 -o output.bin
# or, for batch processing
$ dtk yaz0 decompress rels/ * .yaz0 -o relsCompresse les fichiers à l'aide de la compression YAZ0.
$ dtk yaz0 compress input.bin -o output.bin.yaz0
# or, for batch processing
$ dtk yaz0 compress rels/ * -o relsImprime les informations sur un fichier WAD.
$ dtk wad info input.wadNote
VFS CP est plus flexible et prend en charge les fichiers WAD.
Cette commande est désormais équivalente à dtk vfs cp input.wad: output_dir
Extrait le contenu d'un fichier WAD.
$ dtk wad extract input.wad -o output_dirVérifie le contenu d'un fichier WAD.
$ dtk wad verify input.wad