Еще один инструментарий для декомпиляции GameCube/Wii.
Decomp-toolkit функционирует как в качестве инструмента командной строки для разработчиков, так и в качестве замены для различных частей системы сборки проекта декомпиляционного проекта.
Для использования в новом проекте декомпиляции см. DTK-Template, который предоставляет структуру проекта и систему сборки, которая использует Decomp-Toolkit под капюшоном.
Целью соответствующего проекта декомпиляции является написание кода C/C ++, который собирается обратно в тот же бинар, что и оригинальная игра. Это часто требует использования того же компилятора, что и оригинальная игра. (Для GameCube и Wii, Metrowerks Codewarrior)
При составлении кода C/C ++ компилятор (в нашем случае mwcceppc ) генерирует файл объекта ( .o ) для каждого исходного файла. Этот объектный файл содержит скомпилированный компьютерный код, а также информацию, которую ссылка ( mwldeppc ) использует для генерации окончательного исполняемого файла.
Одним из способов убедиться, что наш код является совпадением, заключается в том, чтобы принять любой код, который был разбит, и связывание его вместе с частями первоначального бинарного файла, которые еще не были разбиты. Во -первых, мы создаем перемещаемые объекты из исходного бинарника:

(Сильно упрощен)
Затем каждый объект может быть заменен декомпилированной версией, когда написан соответствующий код. Если линкер по-прежнему генерирует двоичный файл, который является байтовым, идентичен оригиналу, то мы знаем, что декомпилированный код является совпадением.
Decomp-Toolkit предоставляет инструменты для анализа и разделения исходного двоичного файла на перемещаемые объекты, а также создание сценария линкера и других файлов, необходимых для связи декомпилированного кода.
Функциональный граничный анализ
Обнаруживает границы функций с высокой точностью. Использует различную эвристику для устранения неоднозначности хвостовых вызовов из потока управления внутренним функциями.
Подпись анализ
Использует встроенную базу данных подписи для идентификации общих метроущиков и функций SDK и объектов.
Это также помогает разместить toolkit автоматически генерировать необходимые разделения, такие как __init_cpp_exceptions .
Анализ переселения
Выполняет анализ контрольного потока и перестроить перемещения с высокой точностью.
С некоторой ручной настройкой (в основном в данных) это должно генерировать полностью смену объекты.
Анализ раздела
Автоматически идентифицирует разделы DOL и REL на основе информации из анализа подписи и перемещения.
Анализ объектов
Попытки определить тип и размер объектов данных путем анализа использования.
Также пытаются идентифицировать строковые литералы, широкие струнные литералы и струнные таблицы.
Расщепление
Генерирует разделенные объектные файлы в памяти на основе конфигурации пользователя.
.dtors поддержать общение с mwldeppc.exe extab extabindex .ctors непредубеживание ,. Это гарантирует, что линкер будет должным образом генерировать эти разделы без какой -либо дополнительной конфигурации.
Топологический вид выполняется, чтобы определить окончательный порядок ссылок разделенных объектов.
Запись файла объекта
Записывает объектные файлы напрямую, без необходимости ассемблер. (Пока, devkitppc!)
При желании, необязательно записывает, совместимые с GNU ассемблером файлы вместе с объектными файлами.
Генерация сценариев линкера
Генерирует ldscript.lcf для mwldeppc.exe .
Создайте статическую библиотеку (.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).
Принимает несколько файлов, шаблонов глобусов (например *.a ) и файлов ответов (eg @rspfile ).
Параметры:
-o , --out <output-dir> : выходной каталог. По умолчанию в текущий каталог.-v , --verbose : verbose wollow.-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 outdirDemangles Codewarrior C ++ символы. Тонкая обертка для cwdemangle.
$ dtk demangle ' BuildLight__9CGuiLightCFv '
CGuiLight::BuildLight () const Команды disc являются обертками вокруг библиотеки 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 или индекс раздела)
Преобразует любое поддерживаемое изображение диска в RAW ISO (GCM).
Если формат не является потерей, выход будет идентичен исходному изображению диска.
См. Информация о диск для поддерживаемых форматов.
$ dtk disc convert /path/to/game.wia /path/to/game.isoХэши содержит изображение диска и проверяет его на встроенной базе данных Redump.
См. Информация о диск для поддерживаемых форматов.
$ dtk disc verify /path/to/game.isoАнализирует раздел информации DOL и выводит информацию об информации и информацию о символе.
См. VFS LS для получения информации об абстракции VFS.
$ 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 Простой инструмент Diff для проблем в связанном эльфе. (Да, не Дол. Это неправильно названо.)
Пытается найти наиболее очевидное различие, вызывающее несоответствие.
Передайте в файл конфигурации проекта и путь к связанному файлу ELF для сравнения.
$ dtk dol diff config.yml build/main.elfПрименяет обновленные символы из связанного эльфа к конфигурации проекта. (Снова неправильно назван.)
Полезно после сопоставления файла. Он извлечет обновленную информацию о символе из конечного результата.
$ dtk dol apply config.yml build/main.elfГенерирует начальный файл конфигурации проекта из DOL (& RELS).
Пропустите в файле DOL и любые файлы REL, которые связаны с ним.
Или, для игр Wii, пройти в selfile.sel . (Не рупий)
$ dtk dol config main.dol rels/ * .rel -o config.ymlDillss Dwarf 1.1 Информация из файла ELF. ( Не поддерживает карлики 2+)
$ dtk dwarf dump input.elfРазобрать файл эльфийского эльфара с нетронутым. Попытки автоматически разделить объекты и перестроить перемещения, когда это возможно.
$ dtk elf disasm input.elf out Исправляет проблемы с объектами, построенными в GNU, чтобы обеспечить совместимость с mwldeppc.exe .
(asm) к символу файла. (Для подходящего расчета прогресса) # input and output can be the same
$ dtk elf fixup file.o file.oСоздает файл DOL из предоставленного файла ELF.
$ dtk elf2dol input.elf output.dol
# or, to ignore certain sections
$ dtk elf2dol input.elf output.dol --ignore debug_section1 --ignore debug_section2Обрабатывает файлы карты Codewarrior и предоставляет информацию о символах и 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.Отпечатает информацию о файле REL.
См. VFS LS для получения информации об абстракции 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 'Сочетает файл DOL и связанные с ним RELS в один файл ELF, подходящий для анализа в вашем любимом программном обеспечении для обратного инженера.
$ dtk rel info main.dol rels/ * .rel -o merged.elfПредупреждение
Эта команда еще не функциональна.
Отпечатает информацию о файле RSO.
$ dtk rso info input.rsoПредупреждение
Эта команда еще не поддерживает создание файлов SEL.
Создает файл RSO из перемещаемого файла ELF.
Параметры:
-o , --output <File> : вывод RSO -файл.-m , --module-name <Name> : имя модуля (или путь). По умолчанию: входное имя-e , --export <File> : файл, содержащий экспортированные имена символов. (Newline разделен) $ dtk rso make input.elf -o input.rsoРассчитайте и проверяйте хэши SHA-1.
$ dtk shasum baserom.dol
949c5ed7368aef547e0b0db1c3678f466e2afbff baserom.dol
$ dtk shasum -c baserom.sha1
baserom.dol: OKДекабирует NLZSS-сжатые файлы.
$ 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 (Older .ARC).
$ dtk rarc list input.arcПримечание
VFS CP является более гибким и поддерживает архивы RARC.
Эта команда теперь эквивалентна dtk vfs cp input.arc: output_dir
Извлекает содержимое архива RARC (Older .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 LS для получения информации об абстракции VFS.
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: ' relsДекабирует файлы с раскрытыми YAY0.
$ dtk yay0 decompress input.bin.yay0 -o output.bin
# or, for batch processing
$ dtk yay0 decompress rels/ * .yay0 -o relsСжатие файлов с использованием сжатия Yay0.
$ dtk yay0 compress input.bin -o output.bin.yay0
# or, for batch processing
$ dtk yay0 compress rels/ * -o relsДекабирует YAZ0-сжатые файлы.
$ dtk yaz0 decompress input.bin.yaz0 -o output.bin
# or, for batch processing
$ dtk yaz0 decompress rels/ * .yaz0 -o relsСжатие файлов с использованием сжатия YAZ0.
$ dtk yaz0 compress input.bin -o output.bin.yaz0
# or, for batch processing
$ dtk yaz0 compress rels/ * -o relsОтпечатает информацию о файле WAD.
$ dtk wad info input.wadПримечание
VFS CP является более гибким и поддерживает файлы WAD.
Эта команда теперь эквивалентна dtk vfs cp input.wad: output_dir
Извлекает содержимое файла WAD.
$ dtk wad extract input.wad -o output_dirПроверяет содержимое файла WAD.
$ dtk wad verify input.wad