Namun alat dekompilasi GameCube/Wii lainnya.
Decompom-Toolkit berfungsi baik sebagai alat baris perintah untuk pengembang, dan sebagai pengganti untuk berbagai bagian sistem pembuatan proyek dekompilasi.
Untuk digunakan dalam proyek dekompilasi baru, lihat DTK-Template, yang menyediakan struktur proyek dan sistem pembangunan yang menggunakan decomp-toolkit di bawah tenda.
Tujuan dari proyek dekompilasi yang cocok adalah untuk menulis kode C/C ++ yang dikompilasi kembali ke biner yang sama persis dengan game aslinya. Ini sering membutuhkan penggunaan kompiler yang sama dengan game aslinya. (Untuk GameCube dan Wii, Metrowerks Codewarrior)
Saat menyusun kode C/C ++, kompiler (dalam kasus kami, mwcceppc ) menghasilkan file objek ( .o ) untuk setiap file sumber. File objek ini berisi kode mesin yang dikompilasi, serta informasi yang digunakan Linker ( mwldeppc ) untuk menghasilkan yang dapat dieksekusi akhir.
Salah satu cara untuk memverifikasi bahwa kode kami adalah kecocokan adalah dengan mengambil kode apa pun yang telah didekompilasi, dan menghubungkannya di samping bagian dari biner asli yang belum diuraikan. Pertama, kami membuat objek yang dapat dipindahkan dari biner asli:

(Sangat disederhanakan)
Kemudian, setiap objek dapat diganti dengan versi yang didekompilasi karena kode pencocokan ditulis. Jika linker masih menghasilkan biner yang byte-for-byte identik dengan aslinya, maka kita tahu bahwa kode yang didekompilasi adalah kecocokan.
Decomp-Toolkit menyediakan alat untuk menganalisis dan memisahkan biner asli menjadi objek yang dapat dipindahkan, serta menghasilkan skrip linker dan file lain yang diperlukan untuk menautkan kode yang didekompilasi.
Analisis Batas Fungsi
Menemukan batas fungsi dengan akurasi tinggi. Menggunakan berbagai heuristik untuk menghina panggilan ekor dari aliran kontrol fungsi dalam.
Analisis tanda tangan
Memanfaatkan database tanda tangan bawaan untuk mengidentifikasi metrowerks umum dan fungsi dan objek SDK.
Ini juga membantu dekomp-decompit secara otomatis menghasilkan pemisahan yang diperlukan, seperti __init_cpp_exceptions .
Analisis relokasi
Melakukan analisis aliran-aliran dan membangun kembali relokasi dengan akurasi tinggi.
Dengan beberapa tweake manual (terutama dalam data), ini harus menghasilkan objek yang sepenuhnya dapat digeser.
Analisis Bagian
Secara otomatis mengidentifikasi bagian DOL dan rel berdasarkan informasi dari analisis tanda tangan dan relokasi.
Analisis Objek
Upaya untuk mengidentifikasi jenis dan ukuran objek data dengan menganalisis penggunaan.
Juga upaya untuk mengidentifikasi literal string, literal string lebar, dan tabel string.
Pemisahan
Menghasilkan file objek terpisah dalam memori berdasarkan konfigurasi pengguna.
Untuk mendukung keterlambatan dengan mwldeppc.exe , setiap .ctors unsplit , .dtors , extab dan extabindex entri dianalisis dan secara otomatis dibagi bersama dengan fungsi terkait. Ini memastikan bahwa penghubung akan menghasilkan bagian ini dengan benar tanpa konfigurasi tambahan.
Jenis topologi dilakukan untuk menentukan urutan tautan akhir dari objek split.
Penulisan File Objek
Menulis file objek secara langsung, tanpa ada assembler yang diperlukan. (Bye devkitppc!)
Jika diinginkan, secara opsional menulis file yang kompatibel dengan GNU Assembler di samping file objek.
Pembuatan skrip linker
Menghasilkan ldscript.lcf untuk mwldeppc.exe .
Buat pustaka statis (.a) dari objek input.
$ 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 @rspfileMengekstrak isi file pustaka statis (.a).
Menerima beberapa file, pola glob (misalnya *.a ) dan file respons (misalnya @rspfile ).
Opsi:
-o , --out <output-dir> : direktori output. Default ke direktori saat ini.-v , --verbose : output verbose.-q , --quiet : Menekan semua output kecuali kesalahan. # 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 outdirSimbol Codewarrior C ++ Demangles. Pembungkus tipis untuk cwdemangle.
$ dtk demangle ' BuildLight__9CGuiLightCFv '
CGuiLight::BuildLight () const Perintah disc adalah pembungkus di sekitar pustaka NOD dan alat baris perintah nodtool -nya.
Menampilkan informasi tentang gambar disk.
Untuk membuat daftar konten gambar disk, gunakan VFS LS.
Format gambar disk yang didukung:
$ dtk disc info /path/to/game.isoMengekstrak isi gambar disk ke direktori.
Lihat info disk untuk format yang didukung.
Catatan
VFS CP lebih fleksibel dan mendukung gambar disk.
$ dtk disc extract /path/to/game.iso [outdir] Secara default, hanya partisi data utama yang diekstraksi.
Gunakan opsi -p / --partition untuk memilih partisi yang berbeda.
(Opsi: all , data , update , channel , atau indeks partisi)
Mengubah gambar disk yang didukung menjadi RAW ISO (GCM).
Jika formatnya lossless, output akan identik dengan gambar disk asli.
Lihat info disk untuk format yang didukung.
$ dtk disc convert /path/to/game.wia /path/to/game.isoHash Isi gambar disk dan memverifikasi terhadap database Redump bawaan.
Lihat info disk untuk format yang didukung.
$ dtk disc verify /path/to/game.isoMenganalisis bagian file DOL dan output informasi dan informasi simbol.
Lihat VFS LS untuk informasi tentang abstraksi VFS.
$ dtk dol info input.dol
# or, directly from a disc image
$ dtk dol info ' disc.rvz:sys/main.dol 'Penting
Perintah ini dimaksudkan untuk digunakan sebagai bagian dari sistem pembuatan proyek dekompilasi.
Untuk contoh struktur proyek dan untuk dokumentasi tentang konfigurasi, lihat DTK-Template.
Menganalisis dan membagi file DOL menjadi objek yang dapat dipindahkan berdasarkan konfigurasi pengguna.
$ dtk dol split config.yml target Alat Diff Sederhana untuk Masalah dalam ELF Tertaut. (Ya, bukan Dol. Ini salah namanya.)
Mencoba menemukan perbedaan yang paling jelas yang menyebabkan ketidakcocokan.
Lulus dalam file konfigurasi proyek, dan jalur ke file ELF tertaut untuk dibandingkan.
$ dtk dol diff config.yml build/main.elfMenerapkan simbol yang diperbarui dari ELF tertaut ke konfigurasi proyek. (Sekali lagi, salah namanya.)
Berguna setelah mencocokkan file. Ini akan menarik informasi simbol yang diperbarui dari hasil akhir.
$ dtk dol apply config.yml build/main.elfMenghasilkan file konfigurasi proyek awal dari DOL (& RELS).
Lewati file DOL, dan setiap file rel yang ditautkan dengannya.
Atau, untuk game Wii, lulus di selfile.sel . (Bukan RSO)
$ dtk dol config main.dol rels/ * .rel -o config.ymlDumps Dwarf 1.1 Informasi dari file ELF. ( Tidak mendukung kurcaci 2+)
$ dtk dwarf dump input.elfBongkar file elf codewarrior yang tidak diatasi. Upaya untuk secara otomatis membagi objek dan membangun kembali relokasi bila memungkinkan.
$ dtk elf disasm input.elf out Memperbaiki masalah dengan objek buatan GNU Assembler untuk memastikan kompatibilitas dengan mwldeppc.exe .
(asm) ke simbol file. (Untuk perhitungan kemajuan yang cocok) # input and output can be the same
$ dtk elf fixup file.o file.oMembuat file DOL dari file ELF yang disediakan.
$ dtk elf2dol input.elf output.dol
# or, to ignore certain sections
$ dtk elf2dol input.elf output.dol --ignore debug_section1 --ignore debug_section2Memproses file peta codewarrior dan memberikan informasi tentang simbol dan 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.Mencetak informasi tentang file rel.
Lihat VFS LS untuk informasi tentang abstraksi 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 'Gabungkan file DOL dan terkait relasi ke dalam file ELF tunggal, cocok untuk analisis dalam perangkat lunak rekayasa terbalik favorit Anda.
$ dtk rel info main.dol rels/ * .rel -o merged.elfPeringatan
Perintah ini belum fungsional.
Mencetak informasi tentang file RSO.
$ dtk rso info input.rsoPeringatan
Perintah ini belum mendukung pembuatan file sel.
Membuat file RSO dari file peri yang dapat dipindahkan.
Opsi:
-o , --output <File> : file RSO output.-m , --module-name <Name> : nama modul (atau path). Default: Nama input-e , --export <File> : File yang berisi nama simbol yang diekspor. (Newline terpisah) $ dtk rso make input.elf -o input.rsoHitung dan verifikasi hash SHA-1.
$ dtk shasum baserom.dol
949c5ed7368aef547e0b0db1c3678f466e2afbff baserom.dol
$ dtk shasum -c baserom.sha1
baserom.dol: OKMendekompresi file yang dikompresi NLZSS.
$ dtk nlzss decompress input.bin.lz -o output.bin
# or, for batch processing
$ dtk nlzss decompress rels/ * .lz -o relsCatatan
VFS LS lebih fleksibel dan mendukung arsip RARC.
Perintah ini sekarang setara dengan dtk vfs ls -r input.arc:
Mencantumkan isi arsip RARC (lebih tua .arc).
$ dtk rarc list input.arcCatatan
VFS CP lebih fleksibel dan mendukung arsip RARC.
Perintah ini sekarang setara dengan dtk vfs cp input.arc: output_dir
Mengekstrak isi arsip rarc (lebih tua .arc).
$ dtk rarc extract input.arc -o output_dirCatatan
VFS LS lebih fleksibel dan mendukung arsip U8.
Perintah ini sekarang setara dengan dtk vfs ls -r input.arc:
Mengekstrak isi arsip U8 (.arc baru).
$ dtk u8 list input.arcCatatan
VFS CP lebih fleksibel dan mendukung arsip U8.
Perintah ini sekarang setara dengan dtk vfs cp input.arc: output_dir
Mengekstrak isi arsip U8 (.arc baru).
$ dtk u8 extract input.arc -o output_dirDecomp-Toolkit memiliki abstraksi sistem file virtual (VFS) yang kuat yang memungkinkan Anda bekerja dengan berbagai kontainer. Semua operasi terjadi dalam memori dengan overhead minimal dan tanpa file sementara.
Wadah yang Didukung:
Format kompresi yang didukung ditangani secara transparan:
:nlzss di jalur) vfs ls mencantumkan isi wadah atau direktori.
Opsi:
-r , --recursive : Daftar Isi Secara Rekursif.-s , --short : Hanya daftar nama file.Contoh:
# 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 'Lihat VFS LS untuk informasi tentang abstraksi VFS.
vfs cp menyalin file dan direktori secara rekursif ke sistem file host.
Opsi:
--no-decompress : Jangan mendekompres file saat menyalin.-q , --quiet : Menekan semua output kecuali kesalahan.Contoh:
# 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: ' relsFile yang dikompresi yay0-compress.
$ dtk yay0 decompress input.bin.yay0 -o output.bin
# or, for batch processing
$ dtk yay0 decompress rels/ * .yay0 -o relsMengkompres file menggunakan kompresi yay0.
$ dtk yay0 compress input.bin -o output.bin.yay0
# or, for batch processing
$ dtk yay0 compress rels/ * -o relsDecompresses file yang dikompresi YAZ0.
$ dtk yaz0 decompress input.bin.yaz0 -o output.bin
# or, for batch processing
$ dtk yaz0 decompress rels/ * .yaz0 -o relsMengompres file menggunakan kompresi YAZ0.
$ dtk yaz0 compress input.bin -o output.bin.yaz0
# or, for batch processing
$ dtk yaz0 compress rels/ * -o relsMencetak informasi tentang file WAD.
$ dtk wad info input.wadCatatan
VFS CP lebih fleksibel dan mendukung file WAD.
Perintah ini sekarang setara dengan dtk vfs cp input.wad: output_dir
Mengekstrak isi file WAD.
$ dtk wad extract input.wad -o output_dirMemverifikasi konten file WAD.
$ dtk wad verify input.wad