Otro kit de herramientas de descompilación de GameCube/Wii.
Descomp-toolkit funciona como una herramienta de línea de comandos para desarrolladores y como un reemplazo para varias partes del sistema de compilación de un proyecto de descompilación.
Para su uso en un nuevo proyecto de descompilación, consulte DTK-Template, que proporciona una estructura de proyecto y un sistema de compilación que utiliza Toolkit Descompla debajo del capó.
El objetivo de un proyecto de descompilación coincidente es escribir código C/C ++ que se compila al mismo binario que el juego original. Esto a menudo requiere usar el mismo compilador que el juego original. (Para GameCube y Wii, Metrowerks Codewarrior)
Al compilar el código C/C ++, el compilador (en nuestro caso, mwcceppc ) genera un archivo de objeto ( .o ) para cada archivo de origen. Este archivo de objeto contiene el código de máquina compilado, así como la información que el enlace ( mwldeppc ) utiliza para generar el ejecutable final.
Una forma de verificar que nuestro código es una coincidencia es tomando cualquier código que se haya descompilado y vinculándolo junto con porciones del binario original que aún no se han descompilado. Primero, creamos objetos reubicables del binario original:

(Muy simplificado)
Luego, cada objeto puede ser reemplazado por una versión descompilada a medida que se escribe el código de coincidencia. Si el enlazador todavía genera un binario que es idéntico al byte-byte idéntico al original, entonces sabemos que el código descompilado es una coincidencia.
Decomp-toolkit proporciona herramientas para analizar y dividir el binario original en objetos reubicables, así como generar el script de enlazador y otros archivos necesarios para vincular el código descompilado.
Análisis de límite de funciones
Descubre los límites de la función con alta precisión. Utiliza diversas heurísticas para desambiguar las llamadas de cola del flujo de control de función interna.
Análisis de la firma
Utiliza una base de datos de firma incorporada para identificar metrowerks comunes y funciones y objetos SDK.
Esto también ayuda a descomparar el Toolkit automáticamente a generar las divisiones requeridas, como __init_cpp_exceptions .
Análisis de reubicación
Realiza análisis de flujo de control y reconstrucciones de reconstrucción con alta precisión.
Con algunos ajustes manuales (principalmente en datos), esto debería generar objetos totalmente cambiantes.
Análisis de sección
Identifica automáticamente secciones DOL y REL basadas en información de la firma y el análisis de reubicación.
Análisis de objetos
Intenta identificar el tipo y el tamaño de los objetos de datos analizando el uso.
También intenta identificar literales de cadenas, literales de cadena anchos y tablas de cadenas.
Terrible
Genera archivos de objetos divididos en la memoria basada en la configuración del usuario.
Para apoyar la relleno con mwldeppc.exe , cualquier .ctors sin lugar , las entradas .dtors , extab y extabindex se analizan y se dividen automáticamente junto con sus funciones asociadas. Esto asegura que el enlazador generará correctamente estas secciones sin ninguna configuración adicional.
Se realiza un tipo topológico para determinar el orden de enlace final de los objetos divididos.
Escritura de archivos de objetos
Escribe archivos de objetos directamente, sin requerido el ensamblador. (¡Adiós devkitppc!)
Si lo desea, opcionalmente escribe archivos compatibles con el ensamblador de GNU junto con los archivos de objeto.
Generación de scripts de enlazador
Genera ldscript.lcf para mwldeppc.exe .
Cree una biblioteca estática (.a) desde los objetos de entrada.
$ 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 @rspfileExtrae el contenido de los archivos de la biblioteca estática (.a).
Acepta múltiples archivos, patrones de globas (por ejemplo, archivos *.a ) y de respuesta (por ejemplo, @rspfile ).
Opciones:
-o , --out <output-dir> : Directorio de salida. El valor predeterminado al directorio actual.-v , --verbose : salida detallada.-q , --quiet : suprime toda la salida excepto los errores. # 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 ++ Símbolos. Una envoltura delgada para CWDemangle.
$ dtk demangle ' BuildLight__9CGuiLightCFv '
CGuiLight::BuildLight () const Los comandos disc son envoltorios alrededor de la biblioteca Nod y su herramienta de línea de comandos nodtool .
Muestra información sobre imágenes de disco.
Para enumerar el contenido de una imagen de disco, use VFS LS.
Formatos de imagen de disco compatibles:
$ dtk disc info /path/to/game.isoExtrae el contenido de las imágenes de disco a un directorio.
Consulte la información del disco para formatos compatibles.
Nota
VFS CP es más flexible y admite imágenes de disco.
$ dtk disc extract /path/to/game.iso [outdir] Por defecto, solo se extrae la partición de datos principal.
Use la opción -p / --partition para elegir una partición diferente.
(Opciones: all , data , update , channel o un índice de partición)
Convierte cualquier imagen de disco compatible en ISO RAW (GCM).
Si el formato no tiene pérdidas, la salida será idéntica a la imagen del disco original.
Consulte la información del disco para formatos compatibles.
$ dtk disc convert /path/to/game.wia /path/to/game.isoHasha el contenido de una imagen de disco y la verifica contra una base de datos redrumente incorporada.
Consulte la información del disco para formatos compatibles.
$ dtk disc verify /path/to/game.isoAnaliza un archivo DOL y emite información de información e información de símbolos.
Consulte VFS LS para obtener información sobre la abstracción VFS.
$ dtk dol info input.dol
# or, directly from a disc image
$ dtk dol info ' disc.rvz:sys/main.dol 'Importante
Este comando está destinado a ser utilizado como parte del sistema de compilación de un proyecto de descompilación.
Para una estructura de proyecto de ejemplo y para la documentación en la configuración, consulte DTK-Template.
Analiza y divide un archivo DOL en objetos reubicables en función de la configuración del usuario.
$ dtk dol split config.yml target Herramienta DIFF simple para problemas en un elfo vinculado. (Sí, no Dol. Está mal nombrado).
Intenta encontrar la diferencia más obvia que causa un desajuste.
Pase en el archivo de configuración del proyecto y la ruta al archivo ELF vinculado para compararse.
$ dtk dol diff config.yml build/main.elfAplica símbolos actualizados desde un ELF vinculado a la configuración del proyecto. (De nuevo, mal nombrado).
Útil después de hacer coincidir un archivo. Presentará información de símbolos actualizado del resultado final.
$ dtk dol apply config.yml build/main.elfGenera un archivo de configuración de proyecto inicial a partir de un DOL (& REL).
Pase en el archivo DOL y cualquier archivo REL que esté vinculado con él.
O, para los juegos de Wii, pase en el selfile.sel . (No rsos)
$ dtk dol config main.dol rels/ * .rel -o config.ymlDoblita la información enano 1.1 de un archivo ELF. ( No es compatible con Dwarf 2+)
$ dtk dwarf dump input.elfDesmongar un archivo ELF CODEWarrior no acelerado. Intenta dividir automáticamente los objetos y reconstruir las reubicaciones cuando sea posible.
$ dtk elf disasm input.elf out Se corrige problemas con los objetos construidos por el ensamblador de GNU para garantizar la compatibilidad con mwldeppc.exe .
(asm) al símbolo del archivo. (Para el cálculo de progreso coincidente) # input and output can be the same
$ dtk elf fixup file.o file.oCrea un archivo DOL del archivo ELF proporcionado.
$ dtk elf2dol input.elf output.dol
# or, to ignore certain sections
$ dtk elf2dol input.elf output.dol --ignore debug_section1 --ignore debug_section2Procesa los archivos de mapas Codewarrior y proporciona información sobre símbolos y 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.Imprime información sobre un archivo REL.
Consulte VFS LS para obtener información sobre la abstracción 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 'Fusiona un archivo DOL y asociado en un solo archivo ELF, adecuado para el análisis en su software favorito de ingeniería inversa.
$ dtk rel info main.dol rels/ * .rel -o merged.elfAdvertencia
Este comando aún no es funcional.
Imprime información sobre un archivo RSO.
$ dtk rso info input.rsoAdvertencia
Este comando aún no admite la creación de archivos SEL.
Crea un archivo RSO a partir de un archivo ELF reubible.
Opciones:
-o , --output <File> : archivo RSO de salida.-m , --module-name <Name> : Nombre del módulo (o ruta). Valor predeterminado: Nombre de entrada-e , --export <File> : archivo que contiene nombres de símbolos exportados. (Newline separada) $ dtk rso make input.elf -o input.rsoCalcule y verifica hashes SHA-1.
$ dtk shasum baserom.dol
949c5ed7368aef547e0b0db1c3678f466e2afbff baserom.dol
$ dtk shasum -c baserom.sha1
baserom.dol: OKDescomprime archivos comprimidos por NLZSS.
$ dtk nlzss decompress input.bin.lz -o output.bin
# or, for batch processing
$ dtk nlzss decompress rels/ * .lz -o relsNota
VFS LS es más flexible y admite archivos RARC.
Este comando ahora es equivalente a dtk vfs ls -r input.arc:
Enumera el contenido de un archivo RARC (mayor .Arc).
$ dtk rarc list input.arcNota
VFS CP es más flexible y admite archivos RARC.
Este comando ahora es equivalente a dtk vfs cp input.arc: output_dir
Extrae el contenido de un archivo RARC (mayor .Arc).
$ dtk rarc extract input.arc -o output_dirNota
VFS LS es más flexible y admite archivos U8.
Este comando ahora es equivalente a dtk vfs ls -r input.arc:
Extrae el contenido de un archivo U8 (más nuevo .Arc).
$ dtk u8 list input.arcNota
VFS CP es más flexible y admite archivos U8.
Este comando ahora es equivalente a dtk vfs cp input.arc: output_dir
Extrae el contenido de un archivo U8 (más nuevo .Arc).
$ dtk u8 extract input.arc -o output_dirDecomp-toolkit tiene una poderosa abstracción del sistema de archivos virtual (VFS) que le permite trabajar con una variedad de contenedores. Todas las operaciones ocurren en la memoria con una sobrecarga mínima y sin archivos temporales.
Contenedores compatibles:
Los formatos de compresión compatibles se manejan de manera transparente:
:nlzss en el camino) vfs ls enumera el contenido de un contenedor o directorio.
Opciones:
-r , --recursive : enumere recursivamente los contenidos.-s , --short : solo enumere los nombres de archivo.Ejemplos:
# 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 'Consulte VFS LS para obtener información sobre la abstracción VFS.
vfs cp copia archivos y directorios recursivamente al sistema de archivos host.
Opciones:
--no-decompress : no descomprima los archivos al copiar.-q , --quiet : suprime toda la salida excepto los errores.Ejemplos:
# 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: ' relsDescomprime archivos comprimidos con YAY0.
$ dtk yay0 decompress input.bin.yay0 -o output.bin
# or, for batch processing
$ dtk yay0 decompress rels/ * .yay0 -o relsComprime archivos utilizando la compresión YAY0.
$ dtk yay0 compress input.bin -o output.bin.yay0
# or, for batch processing
$ dtk yay0 compress rels/ * -o relsDescomprime archivos comprimidos con YAZ0.
$ dtk yaz0 decompress input.bin.yaz0 -o output.bin
# or, for batch processing
$ dtk yaz0 decompress rels/ * .yaz0 -o relsComprime archivos con compresión YAZ0.
$ dtk yaz0 compress input.bin -o output.bin.yaz0
# or, for batch processing
$ dtk yaz0 compress rels/ * -o relsImprime información sobre un archivo WAD.
$ dtk wad info input.wadNota
VFS CP es más flexible y admite archivos WAD.
Este comando ahora es equivalente a dtk vfs cp input.wad: output_dir
Extrae el contenido de un archivo WAD.
$ dtk wad extract input.wad -o output_dirVerifica el contenido de un archivo WAD.
$ dtk wad verify input.wad