RoboNewsGR
Επιστροφή στα άρθρα
126 πόντοιgithub.com7 λεπτά ανάγνωσης

Απλήρης byte-identical decompilation του Resident Evil 4 για GameCube

Πρωτότυπος τίτλος: "Resident Evil 4 (GameCube) – complete byte-identical decompilation to C/C++" (από metrofun)

TL;DR (Εν Συντομία)

Ένας προγραμματιστής κατάφερε να αποκαταστήσει τον πλήρη κώδικα του debug build του Resident Evil 4 (G4BE08) σε C/C++, ώστε η μεταγλώττιση να παράγει ακριβώς τα ίδια binary files με το αρχικό disk. Το αποθετήριο περιλαμβάνει ∼555 χιλίες γραμμές πηγαίου κώδικα, χρειάζεται μόνο τα εικόνες των δίσκων για να χτίσετε και να επαληθεύσετε την ταυτότητα με SHA‑1.

📌 Κύρια Σημεία & Συμπεράσματα

  • Η decompilation είναι byte‑identical για το main.dol και όλα τα 114 REL overlays, ελέγχεται με το build.sha1.
  • Ο κώδικας χρησιμοποιεί τα αρχικά compilers: SN Systems ProDG/GCC 2.95.3 για τον game κώδικα και Metrowerks CodeWarrior για τα CRI middleware και το Nintendo SDK.
  • Το αποθετήριο δεν περιέχει assets ή αντιγράφωμένους κώδικα· χρειάζονται μόνο τα ιδιωτικά disk images για τη χτίση και την επαλήθευση.
  • Υπάρχουν εργαλεία σύγκρισης (bytecmp, fdiff) και τεκμηρίωση που εξηγεί πώς γίνεται το matching, συμπεριλαμβανομένων των περιορισμένων asm‑templates που δεν παράγουν οδηγίες.

Εισαγωγή

Το Resident Evil 4 για το Nintendo GameCube (debug build G4BE08, "Nov 25 2004" prototype) έχει αποκατασταθεί πλήρως σε C/C++ ώστε η μεταγλώττιση με τα αρχικά compilers να παράγει τα ακριβώς ίδια binary files με το αρχικό disk. Το έργο δεν περιλαμβάνει κανένα περιεχόμενο παιχνιδιού· απαιτεί μόνο τα δικά σας images των δίσκων.

Τεχνικές λεπτομέρειες

  • Πηγαίος κώδικας: ~555 000 γραμμές C/C++ στον φάκελο src/ και ~33 000 γραμμές κεφαλίδων στο include/.
  • Compilers:
    • Game code: SN Systems ProDG 3.9.3 – GCC 2.95.3 (SN BUILD v1.79) από το GPL source drop.
    • CRI middleware (ADX, SFD, MPV κ.λπ.): Metrowerks CodeWarrior 2.4.7 (GC/2.7).
    • Nintendo SDK (OS, GX κ.λπ.): Metrowerks CodeWarrior GC/1.2.5n, πηγές από το dolsdk2004.
  • Matching: Κάθε μονάδα μεταγλωττίζεται σε τα ακριβή bytes του αρχικού. Όταν ο compiler χρειάζεται ειδική μορφή πηγαίου κώδικα για να reproducing ένα register choice, το σημείο σημειώνεται με // COMPILER-DIFF: (644 τέτοια). Τα παραμείναντα asm blocks είναι μόνο εκείνες οι rutines που οι αρχικοί προγραμματιστές έγραψαν σε assembly γιατί ο compiler δεν μπορούσε να τις εκφράσει (π.χ. paired‑single kernels, GQR setup, κ.λπ.).

Δομή του αποθετηρίου

  • src/game/ – ο κύριος game κώδικας (C++), με υποφάκελους για εχθρούς (em*), όπλα (wep*), παίκτες (pl*), δωμάτια (στις REL st*), debug editors, sub‑screens κ.λπ.
  • src/lib/ – SDK, CRI και runtime κώδικας (C).
  • include/ – ανα dựngμένες δομές structs και headers.
  • config/G4BE08/ – λίστες μονάδων, symbols, splits, linker scripts, per‑module REL data και το build.sha1 για επαλήθευση.
  • tools/ – scripts διαμόρφωσης (configure.py), γεννήτριας build (project.py), ProDG driver (ngccc.py), εργαλεία σύγκρισης (bytecmp.py, fdiff.py), καθώς και scripts για εξαγωγή κινούμενων εικόνων (glTF/BVH).
  • docs/ – οδηγίες για την αρχιτεκτονική του engines (overview.md), την διαδικασία matching (matching.md), per‑unit notes και исследовательský журнал.

Δημιουργία και επαλήθευση

  1. Προετοιμασία compilers – κλोनήστε το GPL source drop του SN GCC και τρέξτε tools/sn-gcc/build.sh (χρειάζεται μόνο μία φορά).
  2. Εικόνες δίσκων – αντιγράψτε τα debug disc images (disc 1 για το main.dol + 110 RELs, disc 2 για τα 네 island‑stage RELs) στον φάκελο orig/G4BE08/ ως re4_debug_disc1.iso και re4_debug_disc2.gcm.
  3. Κατασκευή – εκτελέστε python3 configure.py και μετά ninja. Το ninja θα εμφανίσει 100% matched και linked. Η εντολή build/tools/dtk shasum -c config/G4BE08/build.sha1 θα τυπώσει 115 OK γραμμές.
  4. Έλεγχος μονάδας – με python3 tools/bytecmp.py game/foo συγκρίνετε το αντικείμενο με το αρχικό word‑by‑word, ενώ python3 tools/fdiff.py game/foo <symbol> εμφανίζει τη διαφορά μιας συνάρτησης.

Νομικά και συνεισφορές

Το ανα dựngμένο πηγαίο κώδικα είναι ιδιοκτησία των αρχικών ιδιοκτητών (Capcom, Nintendo, CRI Middleware) και διατίθεται μόνο για έρευνα και διατήρηση. Τα build scripts, τα εργαλεία και η τεκμηρίωση του έργα είναι διαδεδομένα υπό την άδεια CC0. Οι συνεισφέροντες πρέπει να ακολουθούν τους κανόνες του CONTRIBUTING.md: δεν αλλάζουν bytes, δεν εισάγουν instruction‑emitting asm, και οι προτάσεις για μετονομασία πρέπει να υποστηρίζονται από αποδείξεις.

Ετικέτες:#Gaming#Reverse Engineering#Decompilation#GameCube

Διαβάστε επίσης