aspose.info
CS

REL - Relocatable Module File

Aktualizováno

Co je soubor REL?

Soubor s příponou .rel lze použít k několika účelům. Proto je z hlediska klasifikace her známý jako přemístitelný modulový soubor používaný některými hrami pro Nintendo Wii, jako jsou Brawl, Super Smash Bros a Mario Kart Wii. Zahrnuje herní data, včetně modelů postav a fází. Soubory REL fungují podobně jako soubory .DLL používané systémem Microsoft Windows.

Formát souboru REL

Ve formátu souboru REL je soubor rozdělen do několika sekcí, seskupených podle podobného přístupu, např. data pouze pro čtení v jedné sekci, veškerý spustitelný kód je umístěn v jiné atd. Soubor začíná sekcí záhlaví, za kterou následuje:

  • Tabulka obsahující informace o sekci.
  • Údaje o sekci.
  • Informace o přemístění.

Záhlaví souboru

Soubor začíná záhlavím o velikosti až 0x4C bajtů:

OffsetVelikostNázev polePopis
0x004idSvévolné identifikační číslo. Musí být jedinečné mezi všemi REL používanými hrou. Nesmí být 0.
0x044dalšíUkazatel na další modul, vyplněný za běhu.
0x084předchozíUkazatel na předchozí modul, vyplněný za běhu.
0x0c4numSectionsPočet oddílů v souboru.
0x104sectionInfoOffsetOdsazení na začátek tabulky sekcí.
0x144názevOffsetOffset na řetězec ASCII obsahující název modulu. Může být NULL. Relativní k začátku souboru REL.
0x184jménoVelikostVelikost názvu modulu v bajtech.
0x1c4verzeČíslo verze formátu souboru REL.
0x204velikost bssVelikost sekce ‘.bss’.
0x244relOffsetOffset k přemístění tabulky.
0x284imOffsetOffset k tabulce imp.
0x2c4imSizeVelikost tabulky imp v bajtech.
0x301sekce prologIndex do tabulky sekcí, ke které se prolog vztahuje. Přeskočte, pokud je toto pole 0.
0x311epilogSectionIndexujte do tabulky sekcí, ke kterému se epilog vztahuje. Přeskočte, pokud je toto pole 0.
0x321nevyřešená sekceIndex do tabulky sekcí, ke které se nevyřešené vztahují. Přeskočte, pokud je toto pole 0.
0x331bssSectionIndex do tabulky sekcí, ke které je bss relativní. Vyplněno za běhu!
0x344prologOffset do zadané části funkce _prolog.
0x384epilogOffset do zadané části funkce _epilog.
0x3c4nevyřešenoOffset do zadané části funkce _unresolved.
0x404zarovnatPouze verze ≥ 2. Omezení zarovnání na všech řezech, vyjádřené jako mocnina 2.
0x444bssAlignPouze verze ≥ 2. Omezení zarovnání na všech částech ‘.bss’, vyjádřené jako mocnina 2.
0x484fixSizePouze verze ≥ 3. Pokud je REL propojen s OSLinkFixed (místo OSLink), lze mezeru za touto adresou použít pro jiné účely (jako BSS).

Informační tabulka sekce

Informační tabulka sekce obsahuje numSections záznamů o délce 0x8 bajtů:

OffsetVelikostPopis
0x030 bitůOdsazení od začátku REL k sekci. Pokud je toto nula, sekce je neinicializovaná sekce (tj. .bss).
0x3,61 bitNeznámý.
0x3,71 bitSpustitelný příznak; pokud je to 1, sekce je spustitelná.
0x44Délka sekce v bajtech. Pokud je toto nula, bude tento záznam přeskočen.
0x8Další záznamDalší záznam

Údaje o přemístění

Data o přemístění jsou jeden nebo více seznamů struktur 0x8 bajtů. Konec každého seznamu je označen speciálním kódem typu 203:

OffsetJménoVelikostPopis
0x0offset2Posun v bajtech od předchozího přemístění do tohoto. Pokud se jedná o první přemístění v sekci, je to relativní k začátku sekce.
0x2typ1Typ přemístění. Popsané níže.
0x3sekce1Část symbolu, na kterou se má přemístit. Pro speciální typ přemístění 202 je to místo toho číslo sekce v tomto souboru, na kterou se vztahují následující položky přemístění.
0x4přidat4Odsazení v bajtech symbolu, proti kterému se má přemístit, vzhledem k začátku jeho části. Toto je absolutní adresa místo toho pro přemístění proti main.dol.
0x8Další záznamDalší záznamDalší záznam

Reference

Viz také