بعد مجموعة أدوات Gamecube/Wii أخرى.
تعمل Decomp-Toolkit كأداة لخط الأوامر للمطورين ، وكبديل لأجزاء مختلفة من نظام بناء مشروع إلغاء الاضطراب.
للاستخدام في مشروع إزالة الإلغاء الجديد ، راجع DTK-Template ، والذي يوفر بنية المشروع ونظام الإنشاء الذي يستخدم Decomp-Toolkit أسفل الغطاء.
الهدف من مشروع إلغاء الاضطراب المطابق هو كتابة رمز C/C ++ الذي يجمع مرة أخرى إلى نفس الثنائي تمامًا مثل اللعبة الأصلية. هذا يتطلب في كثير من الأحيان استخدام نفس المترجم مثل اللعبة الأصلية. (لـ Gamecube و Wii ، Metrowerks Codewarrior)
عند تجميع رمز C/C ++ ، يقوم المترجم (في حالتنا ، mwcceppc ) بإنشاء ملف كائن ( .o ) لكل ملف مصدر. يحتوي ملف الكائن هذا على رمز الجهاز المترجم ، وكذلك المعلومات التي يستخدمها Linker ( mwldeppc ) لإنشاء النهائي القابل للتنفيذ.
تتمثل إحدى طرق التحقق من أن الكود الخاص بنا هو أخذ أي رمز تم فكّه ، وربطه بجانب أجزاء من الثنائي الأصلي الذي لم يتم إلغاء تعطله بعد. أولاً ، نقوم بإنشاء كائنات قابلة للنقل من الثنائي الأصلي:

(مبسط بشدة)
بعد ذلك ، يمكن استبدال كل كائن بإصدار إزالة مجمع مع كتابة رمز مطابقة. إذا كان الرابط لا يزال يولد ثنائيًا يكون بايت مقابل بايت متطابق مع الأصل ، فنحن نعلم أن الرمز المقطوع هو تطابق.
يوفر Decomp-Toolkit أدوات لتحليل وتقسيم الثنائي الأصلي إلى كائنات قابلة للنقل ، بالإضافة إلى إنشاء نص Linker والملفات الأخرى اللازمة لربط الرمز المقطوع.
تحليل الحدود وظيفة
يكتشف حدود الوظيفة بدقة عالية. يستخدم مختلف الاستدلال لإزالة الغموض من مكالمات الذيل من تدفق التحكم في الوظائف الداخلية.
تحليل التوقيع
يستخدم قاعدة بيانات توقيع مدمجة لتحديد وظائف وكائنات SDK الشائعة.
يساعد هذا أيضًا على فك شد Toolkit تلقائيًا بإنشاء الانقسامات المطلوبة ، مثل __init_cpp_exceptions .
تحليل النقل
يؤدي تحليل التدفق السيطرة وإعادة البناء مع دقة عالية.
مع بعض التغيير والتبديل اليدوي (بشكل رئيسي في البيانات) ، يجب أن يولد هذا كائنات قابلة للتحويل بالكامل.
تحليل القسم
يحدد تلقائيًا أقسام DOL و REL بناءً على المعلومات من تحليل التوقيع والانتقال.
تحليل الكائن
محاولات لتحديد نوع وحجم كائنات البيانات عن طريق تحليل الاستخدام.
يحاول أيضًا تحديد حرفي السلسلة ، والأشجار الحرفية الواسعة ، وجداول السلسلة.
الانقسام
يقوم بإنشاء ملفات كائن تقسيم في الذاكرة بناءً على تكوين المستخدم.
من .dtors دعم إعادة الإصلاح باستخدام mwldeppc.exe extab يتم extabindex .ctors مُلسمة . هذا يضمن أن الرابط سيقوم بإنشاء هذه الأقسام بشكل صحيح دون أي تكوين إضافي.
يتم تنفيذ النوع الطوبولوجي لتحديد ترتيب الارتباط النهائي للكائنات المقسمة.
كتابة ملف الكائن
يكتب ملفات الكائن مباشرة ، مع عدم وجود تجميع مطلوب. (BYE 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 ) وملفات الاستجابة (على سبيل المثال @rspfile ).
خيارات:
-o ، --out <output-dir> : دليل الإخراج. الإعدادات الافتراضية للدليل الحالي.-v ، --verbose : الإخراج المطول.-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 codewarior c ++ الرموز. غلاف رفيع ل cwdemangle.
$ dtk demangle ' BuildLight__9CGuiLightCFv '
CGuiLight::BuildLight () const أوامر disc عبارة عن مغلفة حول مكتبة NODM وأداة سطر أوامر 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 ، أو فهرس القسم)
يحول أي صورة قرص مدعومة إلى 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 أداة فرق بسيطة للمشكلات في قزم مرتبط. (نعم ، ليس دول. لقد أسيء اسمه.)
يحاول إيجاد الاختلاف الأكثر وضوحًا الذي يسبب عدم تطابق.
تمرير في ملف تكوين المشروع ، والمسار إلى ملف ELF المرتبط للمقارنة.
$ dtk dol diff config.yml build/main.elfيطبق الرموز المحدثة من قزم مرتبط بتكوين المشروع. (مرة أخرى ، أسيء اسمه.)
مفيد بعد مطابقة ملف. سوف تسحب معلومات الرمز المحدث من النتيجة النهائية.
$ dtk dol apply config.yml build/main.elfينشئ ملف تكوين المشروع الأولي من DOL (& rels).
تمرير في ملف DOL ، وأي ملفات REL مرتبطة به.
أو ، لألعاب Wii ، تمر في selfile.sel . (وليس RSOs)
$ dtk dol config main.dol rels/ * .rel -o config.ymlDumps Dwarf 1.1 معلومات من ملف قزم. ( لا يدعم القزم 2+)
$ dtk dwarf dump input.elfتفكيك ملف elf codewarior غير مستقر. محاولات لتقسيم الكائنات تلقائيًا وإعادة بناء عمليات النقل عند الإمكان.
$ 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معالجة ملفات خريطة Codewarior وتوفر معلومات حول الرموز و 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 وتراجعه في ملف 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 (أقدم .ARC).
$ dtk rarc list input.arcملحوظة
VFS CP أكثر مرونة ويدعم أرشيف RARC.
هذا الأمر يعادل الآن dtk vfs cp input.arc: output_dir
يستخلص محتويات أرشيف RARC (أقدم .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_dirيحتوي Decomp-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