Τι είναι ένα αρχείο REL;
Ένα αρχείο με επέκταση .rel μπορεί να χρησιμοποιηθεί για διάφορους σκοπούς. Ως εκ τούτου, όσον αφορά την ταξινόμηση των παιχνιδιών είναι γνωστό ως ένα αρχείο μονάδας με δυνατότητα μετακίνησης που χρησιμοποιείται από ορισμένα παιχνίδια Nintendo Wii, όπως το Brawl, το Super Smash Bros και το Mario Kart Wii. Περιλαμβάνει τα δεδομένα του παιχνιδιού, συμπεριλαμβανομένων των μοντέλων χαρακτήρων και των σταδίων. Τα αρχεία REL έχουν παρόμοια απόδοση με τα αρχεία .DLL που χρησιμοποιούνται από τα Microsoft Windows.
Μορφή αρχείου REL
Σε μια μορφή αρχείου REL, το αρχείο χωρίζεται σε πολλές ενότητες, ομαδοποιημένες κατά παρόμοια πρόσβαση, π.χ. δεδομένα ανάγνωσης μόνο σε μια ενότητα, όλος ο εκτελέσιμος κώδικας τοποθετείται σε άλλη, κ.λπ. Το αρχείο ξεκινά με μια ενότητα κεφαλίδας, ακολουθούμενη από:
- Πίνακας που περιέχει πληροφορίες ενότητας.
- Τα στοιχεία της ενότητας.
- Πληροφορίες μετεγκατάστασης.
Κεφαλίδα αρχείου
Το αρχείο ξεκινά με μια κεφαλίδα έως και 0x4C byte:
Offset | Μέγεθος | Όνομα πεδίου | Περιγραφή |
---|---|---|---|
0x00 | 4 | id | Αυθαίρετος αριθμός αναγνώρισης. Πρέπει να είναι μοναδικό μεταξύ όλων των REL που χρησιμοποιούνται από ένα παιχνίδι. Δεν πρέπει να είναι 0. |
0x04 | 4 | επόμενο | Δείκτης στην επόμενη ενότητα, που συμπληρώνεται κατά το χρόνο εκτέλεσης. |
0x08 | 4 | προηγούμενο | Δείκτης στην προηγούμενη ενότητα, συμπληρωμένη κατά το χρόνο εκτέλεσης. |
0x0c | 4 | numΕνότητες | Αριθμός ενοτήτων στο αρχείο. |
0x10 | 4 | ενότηταInfoOffset | Μετατόπιση στην αρχή του πίνακα ενοτήτων. |
0x14 | 4 | nameOffset | Μετατόπιση σε συμβολοσειρά ASCII που περιέχει το όνομα της μονάδας. Μπορεί να είναι NULL. Σε σχέση με την έναρξη του αρχείου REL. |
0x18 | 4 | nameSize | Μέγεθος του ονόματος της μονάδας σε byte. |
0x1c | 4 | έκδοση | Αριθμός έκδοσης της μορφής αρχείου REL. |
0x20 | 4 | bssΜέγεθος | Μέγεθος της ενότητας «.bss». |
0x24 | 4 | relOffset | Μετατόπιση στον πίνακα μετεγκατάστασης. |
0x28 | 4 | impOffset | Μετατόπιση σε πίνακα imp. |
0x2c | 4 | impSize | Μέγεθος πίνακα imp σε byte. |
0x30 | 1 | prologΕνότητα | Ευρετηρίαση στον πίνακα ενοτήτων με τον οποίο σχετίζεται το prolog. Παράλειψη εάν αυτό το πεδίο είναι 0. |
0x31 | 1 | epilogΕνότητα | Ευρετηριάστε στον πίνακα ενοτήτων με τον οποίο σχετίζεται ο επίλογος. Παράλειψη εάν αυτό το πεδίο είναι 0. |
0x32 | 1 | ανεπίλυτοΕνότητα | Ευρετήριο στον πίνακα ενοτήτων που δεν έχει επιλυθεί είναι σχετικός. Παράλειψη εάν αυτό το πεδίο είναι 0. |
0x33 | 1 | bssΕνότητα | Δημιουργήστε ευρετήριο στον πίνακα ενοτήτων με τον οποίο σχετίζεται το bss. Γέμισε κατά το χρόνο εκτέλεσης! |
0x34 | 4 | πρόλογος | Μετατόπιση σε καθορισμένο τμήμα της συνάρτησης _prolog. |
0x38 | 4 | επίλογος | Μετατόπιση σε καθορισμένο τμήμα της συνάρτησης _epilog. |
0x3c | 4 | άλυτο | Μετατόπιση σε καθορισμένο τμήμα της συνάρτησης _unresolved. |
0x40 | 4 | ευθυγράμμιση | Μόνο έκδοση ≥ 2. Περιορισμός ευθυγράμμισης σε όλα τα τμήματα, εκφρασμένος ως ισχύς 2. |
0x44 | 4 | bssΕυθυγράμμιση | Μόνο έκδοση ≥ 2. Περιορισμός ευθυγράμμισης σε όλο το τμήμα ‘.bss’, εκφρασμένος ως δύναμη 2. |
0x48 | 4 | fixSize | Έκδοση ≥ 3 μόνο. Εάν το REL είναι συνδεδεμένο με το OSLinkFixed (αντί για το OSLink), ο χώρος μετά από αυτήν τη διεύθυνση μπορεί να χρησιμοποιηθεί για άλλους σκοπούς (όπως το BSS). |
Πίνακας πληροφοριών ενότητας
Ο πίνακας πληροφοριών ενότητας περιέχει καταχωρήσεις numSections κάθε 0x8 byte:
Offset | Μέγεθος | Περιγραφή |
---|---|---|
0x0 | 30 bit | Μετατόπιση από την αρχή του REL στο τμήμα. Εάν αυτό είναι μηδέν, η ενότητα είναι μια ενότητα χωρίς αρχικοποίηση (δηλ. .bss). |
0x3,6 | 1 bit | Αγνωστος. |
0x3,7 | 1 bit | Εκτελεστή σημαία. αν αυτό είναι 1 η ενότητα είναι εκτελέσιμη. |
0x4 | 4 | Μήκος σε byte της ενότητας. Εάν αυτό είναι μηδέν, αυτή η καταχώρηση παραλείπεται. |
0x8 | Επόμενη καταχώρηση | Επόμενη καταχώρηση |
Δεδομένα μετεγκατάστασης
Τα δεδομένα μετεγκατάστασης είναι μία ή περισσότερες λίστες δομών 0x8 byte. Το τέλος κάθε λίστας σημειώνεται με τον ειδικό κωδικό τύπου 203:
Offset | Όνομα | Μέγεθος | Περιγραφή |
---|---|---|---|
0x0 | αντιστάθμιση | 2 | Μετατόπιση σε byte από την προηγούμενη μετεγκατάσταση σε αυτήν. Εάν αυτή είναι η πρώτη μετεγκατάσταση στην ενότητα, αυτή είναι σε σχέση με την έναρξη της ενότητας. |
0x2 | τύπος | 1 | Ο τύπος μετεγκατάστασης. Περιγράφεται παρακάτω. |
0x3 | τμήμα | 1 | Το τμήμα του συμβόλου προς μετεγκατάσταση. Για τον ειδικό τύπο μετεγκατάστασης 202, αυτός είναι ο αριθμός της ενότητας σε αυτό το αρχείο για την οποία ισχύουν οι ακόλουθες εγγραφές μετεγκατάστασης. |
0x4 | προσθήκη | 4 | Μετατόπιση σε byte του συμβόλου προς μετεγκατάσταση, σε σχέση με την αρχή της τομής του. Αυτή είναι μια απόλυτη διεύθυνση αντί για μετεγκαταστάσεις ενάντια στο main.dol. |
0x8 | Επόμενη καταχώρηση | Επόμενη καταχώρηση | Επόμενη καταχώρηση |