Какво е REL файл?
Файл с разширение .rel може да се използва за различни цели. Следователно, по отношение на класификацията на играта, той е известен като преместваем модулен файл, използван от някои игри на Nintendo Wii, като Brawl, Super Smash Bros и Mario Kart Wii. Той включва данните за играта, включително модели на герои и етапи. REL файловете работят подобно на .DLL файловете, използвани от Microsoft Windows.
файлов формат REL
Във файлов формат REL файлът е разделен на няколко секции, групирани по сходен достъп, например данни само за четене в една секция, целият изпълним код се поставя в друга и т.н. Файлът започва със заглавна секция, последвана от:
- Таблица, съдържаща информация за раздела.
- Данните за раздела.
- Информация за преместване.
Заглавка на файл
Файлът започва със заглавка до 0x4C байта:
Отместване | Размер | Име на поле | Описание |
---|---|---|---|
0x00 | 4 | ID | Произволен идентификационен номер. Трябва да е уникален сред всички REL, използвани от играта. Не трябва да е 0. |
0x04 | 4 | следващ | Указател към следващия модул, попълнен по време на изпълнение. |
0x08 | 4 | предишна | Указател към предишен модул, попълнен по време на изпълнение. |
0x0c | 4 | бройсекции | Брой секции във файла. |
0x10 | 4 | sectionInfoOffset | Отместване спрямо началото на таблицата със секции. |
0x14 | 4 | nameOffset | Отместване към ASCII низ, съдържащ името на модула. Може да е NULL. Спрямо началото на REL файла. |
0x18 | 4 | размер на името | Размер на името на модула в байтове. |
0x1c | 4 | версия | Номер на версията на файловия формат REL. |
0x20 | 4 | bssSize | Размер на секцията „.bss“. |
0x24 | 4 | relOffset | Отместване към таблицата за преместване. |
0x28 | 4 | impOffset | Отместване към имп таблица. |
0x2c | 4 | impSize | Размер на таблицата imp в байтове. |
0x30 | 1 | prologSection | Индексирайте в таблица със секции, спрямо която прологът е относителен. Пропуснете, ако това поле е 0. |
0x31 | 1 | epilogSection | Индексирайте в таблицата със секции кой епилог е относителен. Пропуснете, ако това поле е 0. |
0x32 | 1 | неразрешен раздел | Индексирайте в таблица на секции, към която неразрешеното е относително. Пропуснете, ако това поле е 0. |
0x33 | 1 | bssSection | Индексирайте в таблица със секции, към която е относителен bss. Попълва се по време на изпълнение! |
0x34 | 4 | пролог | Отместване в определен раздел на функцията _prolog. |
0x38 | 4 | епилог | Отместване в определен раздел на функцията _epilog. |
0x3c | 4 | неразрешен | Отместване в определен раздел на функцията _unresolved. |
0x40 | 4 | подравняване | Само версия ≥ 2. Ограничение за подравняване на всички секции, изразено като степен на 2. |
0x44 | 4 | bssAlign | Само версия ≥ 2. Ограничение за подравняване на цялата секция „.bss“, изразено като степен на 2. |
0x48 | 4 | fixSize | Само версия ≥ 3. Ако REL е свързан с OSLinkFixed (вместо OSLink), интервалът след този адрес може да се използва за други цели (като BSS). |
Таблица с информация за раздела
Таблицата с информация за секциите съдържа numSections записи с дължина 0x8 байта:
Отместване | Размер | Описание |
---|---|---|
0x0 | 30 бита | Отместване от началото на REL към секцията. Ако това е нула, секцията е неинициализирана секция (т.е. .bss). |
0x3.6 | 1 бит | неизвестен |
0x3.7 | 1 бит | Изпълним флаг; ако това е 1, секцията е изпълнима. |
0x4 | 4 | Дължина в байтове на секцията. Ако това е нула, този запис се пропуска. |
0x8 | Следващ запис | Следващ запис |
Данни за преместване
Данните за преместване са един или повече списъци от 0x8 байтови структури. Краят на всеки списък е маркиран със специалния тип код 203:
Отместване | Име | Размер | Описание |
---|---|---|---|
0x0 | офсет | 2 | Отместване в байтове от предишното преместване към това. Ако това е първото преместване в секцията, това е спрямо началото на секцията. |
0x2 | тип | 1 | Видът на преместването. Описано по-долу. |
0x3 | раздел | 1 | Частта от символа, срещу която да се премести. За специалния тип преместване 202 това вместо това е номерът на раздела в този файл, за който се отнасят следните записи за преместване. |
0x4 | добавям | 4 | Отместване в байтове на символа, спрямо който да се премести, спрямо началото на неговата секция. Това е абсолютен адрес вместо за премествания срещу main.dol. |
0x8 | Следващ запис | Следващ запис | Следващ запис |