aspose.info
DE

REL - Verschiebbare Moduldatei

Aktualisiert

Was ist eine REL-Datei?

Eine Datei mit der Erweiterung .rel kann für verschiedene Zwecke verwendet werden. Daher ist es in Bezug auf die Spielklassifizierung als verschiebbare Moduldatei bekannt, die von einigen Nintendo Wii-Spielen wie Brawl, Super Smash Bros und Mario Kart Wii verwendet wird. Es umfasst die Spieldaten, einschließlich Charaktermodelle und Stufen. REL-Dateien verhalten sich ähnlich wie die von Microsoft Windows verwendeten .DLL-Dateien.

REL-Dateiformat

In einem REL-Dateiformat ist die Datei in mehrere Abschnitte unterteilt, die nach gleichem Zugriff gruppiert sind, z. B. schreibgeschützte Daten in einem Abschnitt, der gesamte ausführbare Code wird in einem anderen platziert usw. Die Datei beginnt mit einem Header-Abschnitt, gefolgt von:

  • Tabelle mit Abschnittsinformationen.
  • Die Abschnittsdaten.
  • Umzugsinformationen.

Dateikopf

Die Datei beginnt mit einem Header von bis zu 0x4C Bytes:

VersatzGrößeFeldnameBeschreibung
0x004IDWillkürliche Identifikationsnummer. Muss unter allen von einem Spiel verwendeten RELs eindeutig sein. Darf nicht 0 sein.
0x044weiterZeiger auf nächstes Modul, gefüllt zur Laufzeit.
0x084zurückZeiger auf vorheriges Modul, zur Laufzeit gefüllt.
0x0c4numSectionsAnzahl der Abschnitte in der Datei.
0x104sectionInfoOffsetOffset zum Beginn der Abschnittstabelle.
0x144NameOffsetOffset zur ASCII-Zeichenfolge, die den Namen des Moduls enthält. Kann NULL sein. Relativ zum Beginn der REL-Datei.
0x184nameGrößeGröße des Modulnamens in Byte.
0x1c4FassungVersionsnummer des REL-Dateiformats.
0x204bssGrößeGröße des Abschnitts „.bss“.
0x244relOffsetOffset zur Verschiebungstabelle.
0x284impOffsetVersatz zur Imp-Tabelle.
0x2c4impSizeGröße der Imp-Tabelle in Byte.
0x301prologAbschnittIndex in die Abschnittstabelle, zu der der Prolog relativ ist. Überspringen, wenn dieses Feld 0 ist.
0x311epilogSectionIndex in Abschnittstabelle, auf die sich der Epilog bezieht. Überspringen, wenn dieses Feld 0 ist.
0x321ungelöster AbschnittIndex in die Abschnittstabelle, auf die sich der ungelöste Wert bezieht. Überspringen, wenn dieses Feld 0 ist.
0x331bssAbschnittIndex in die Abschnittstabelle, zu der bs relativ ist. Zur Laufzeit gefüllt!
0x344PrologOffset in den angegebenen Abschnitt der _prolog-Funktion.
0x384EpilogOffset in den angegebenen Abschnitt der _epilog-Funktion.
0x3c4ungelöstOffset in den angegebenen Abschnitt der _unresolved-Funktion.
0x404ausrichtenNur Version ≥ 2. Ausrichtungsbeschränkung für alle Abschnitte, ausgedrückt als Potenz von 2.
0x444bssAusrichtenNur Version ≥ 2. Ausrichtungseinschränkung für alle ‘.bss’-Abschnitte, ausgedrückt als Potenz von 2.
0x484fixSizeNur Version ≥ 3. Wenn REL mit OSLinkFixed (anstelle von OSLink) verknüpft ist, kann das Leerzeichen nach dieser Adresse für andere Zwecke (wie BSS) verwendet werden.

Abschnitt-Info-Tabelle

Die Abschnittsinfotabelle enthält numSections-Einträge mit jeweils 0x8 Bytes Länge:

VersatzGrößeBeschreibung
0x030 BitVersatz vom Anfang des REL zum Abschnitt. Wenn dies null ist, ist der Abschnitt ein nicht initialisierter Abschnitt (dh .bss).
0x3,61 BitUnbekannt.
0x3,71 BitAusführbares Flag; wenn dies 1 ist, ist der Abschnitt ausführbar.
0x44Länge in Byte des Abschnitts. Ist dieser Null, wird dieser Eintrag übersprungen.
0x8Nächster EintragNächster Eintrag

Umzugsdaten

Die Verschiebungsdaten sind eine oder mehrere Listen von 0x8-Byte-Strukturen. Das Ende jeder Liste wird durch den speziellen Typencode 203 gekennzeichnet:

VersatzNameGrößeBeschreibung
0x0Offset2Offset in Bytes von der vorherigen Verschiebung zu dieser. Handelt es sich um die erste Verschiebung im Abschnitt, ist dies relativ zum Abschnittsanfang.
0x2Typ1Der Umzugstyp. Nachstehend beschrieben.
0x3Abschnitt1Der Abschnitt des Symbols, gegen den verschoben werden soll. Für den speziellen Umzugstyp 202 ist dies stattdessen die Nummer des Abschnitts in dieser Datei, für den die folgenden Umzugseinträge gelten.
0x4Nachtrag4Offset in Bytes des Symbols, gegen das verschoben werden soll, relativ zum Beginn seines Abschnitts. Dies ist stattdessen eine absolute Adresse für Umzüge gegen main.dol.
0x8Nächster EintragNächster EintragNächster Eintrag

Verweise

Siehe auch