aspose.info
SV

REL - Relocatable Module File

Uppdaterad

Vad är REL fil?

En fil med filändelsen .rel kan användas för flera olika ändamål. När det gäller spelklassificering är den därför känd som en flyttbar modulfil som används av vissa Nintendo Wii-spel, som Brawl, Super Smash Bros och Mario Kart Wii. Den omfattar speldata, inklusive karaktärsmodeller och stadier. REL-filer fungerar på samma sätt som .DLL-filerna som används av Microsoft Windows.

REL filformat

I ett REL-filformat är filen uppdelad i flera sektioner, grupperade efter liknande åtkomst, t.ex. läsbara data i en sektion, all körbar kod placeras i en annan, etc. Filen börjar med en rubriksektion, följt av:

  • Tabell med avsnittsinformation.
  • Sektionsdata.
  • Flyttinformation.

Filhuvud

Filen börjar med en rubrik på upp till 0x4C byte:

OffsetStorlekFältnamnBeskrivning
0x004idGodtyckligt identifikationsnummer. Måste vara unik bland alla RELs som används av ett spel. Får inte vara 0.
0x044nästaPekare till nästa modul, fylld vid körning.
0x084föregåendePekare till föregående modul, fylld vid körning.
0x0c4numSektionerAntal avsnitt i filen.
0x104sectionInfoOffsetOffset till början av sektionstabellen.
0x144namnOffsetOffset till ASCII-sträng som innehåller modulens namn. Kan vara NULL. I förhållande till början av REL-fil.
0x184namnStorlekStorleken på modulnamnet i byte.
0x1c4versionVersionsnummer för REL-filformatet.
0x204bssStorlekStorleken på avsnittet ‘.bss’.
0x244relOffsetOffset till flytttabellen.
0x284impOffsetOffset till imp-tabell.
0x2c4impSizeStorlek på imp-tabellen i byte.
0x301prologSektionIndexera i sektionstabell vilken prolog är relativ till. Hoppa över om detta fält är 0.
0x311epilogSektionIndexera i sektionstabell vilken epilog är relativ till. Hoppa över om detta fält är 0.
0x321olöstAvsnittIndexera till sektionstabell som olöst är relativt. Hoppa över om detta fält är 0.
0x331bssSektionIndexera i sektionstabell som bss är relativ till. Fylld vid körning!
0x344prologOffset till specificerad del av _prolog-funktionen.
0x384epilogOffset till specificerad sektion av _epilog-funktionen.
0x3c4olöstOffset till specificerad sektion av _unresolved-funktionen.
0x404justeraEndast version ≥ 2. Justeringsbegränsning på alla sektioner, uttryckt som potens av 2.
0x444bssAlignEndast version ≥ 2. Justeringsbegränsning på alla ‘.bss’-sektioner, uttryckt som potens av 2.
0x484fixSizeEndast version ≥ 3. Om REL är länkad till OSLinkFixed (istället för OSLink), kan utrymmet efter denna adress användas för andra ändamål (som BSS).

Sektionsinformationstabell

Sektionsinformationstabellen innehåller numSections-poster var och en 0x8 byte lång:

OffsetStorlekBeskrivning
0x030 bitarOffset från början av REL till sektionen. Om detta är noll är avsnittet ett oinitierat avsnitt (dvs. .bss).
0x3,61 bitOkänd.
0x3,71 bitKörbar flagga; om detta är 1 är avsnittet körbart.
0x44Längd i byte av sektionen. Om detta är noll, hoppas denna post över.
0x8Nästa inläggNästa inlägg

Flyttdata

Omlokaliseringsdata är en eller flera listor med 0x8 bytestrukturer. Slutet på varje lista markeras med den speciella typkoden 203:

OffsetNamnStorlekBeskrivning
0x0offset2Offset i byte från föregående flytt till denna. Om detta är den första omplaceringen i sektionen är detta i förhållande till sektionsstarten.
0x2typ1Omplaceringstypen. Beskrivet nedan.
0x3avsnitt1Den del av symbolen som ska flyttas mot. För den särskilda flytttypen 202 är detta istället numret på den sektion i denna fil som följande flyttningsposter gäller.
0x4addend4Offset i byte av symbolen att flytta mot, i förhållande till början av dess sektion. Detta är en absolut adress istället för omplaceringar mot main.dol.
0x8Nästa inläggNästa inläggNästa inlägg

Referenser

Se även