aspose.info
UK

REL - Переміщуваний файл модуля

Оновлено

Що таке файл REL?

Файл із розширенням .rel можна використовувати для різних цілей. Тому, з точки зору класифікації ігор, він відомий як переміщуваний модульний файл, який використовується в деяких іграх Nintendo Wii, таких як Brawl, Super Smash Bros і Mario Kart Wii. Він містить дані ігрового процесу, включаючи моделі персонажів і етапи. Файли REL працюють подібно до файлів .DLL, які використовуються в Microsoft Windows.

Формат файлу REL

У форматі файлу REL файл поділено на кілька розділів, згрупованих за однаковим доступом, наприклад, дані лише для читання в одному розділі, увесь виконуваний код розміщується в іншому тощо. Файл починається із розділу заголовка, після якого йде:

  • Таблиця, що містить інформацію про розділ.
  • Дані розділу.
  • Інформація про переїзд.

Заголовок файлу

Файл починається із заголовка розміром до 0x4C байтів:

ЗсувРозмірНазва поляОпис
0x004ідентифікаторДовільний ідентифікаційний номер. Має бути унікальним серед усіх REL, які використовуються в грі. Не має бути 0.
0x044наступнийПокажчик на наступний модуль, заповнений під час виконання.
0x084попереднійПокажчик на попередній модуль, заповнений під час виконання.
0x0c4кількістьрозділівКількість розділів у файлі.
0x104розділInfoOffsetЗсув до початку таблиці розділу.
0x144nameOffsetЗсув до рядка ASCII, що містить назву модуля. Може мати значення NULL. Відносно початку файлу REL.
0x184назва РозмірРозмір імені модуля в байтах.
0x1c4версіяНомер версії формату файлу REL.
0x204bssizeРозмір розділу «.bss».
0x244relOffsetЗсув до таблиці переміщення.
0x284impOffsetЗсув до таблиці imp.
0x2c4impSizeРозмір таблиці imp в байтах.
0x301prologSectionІндекс до таблиці розділів, до якого відноситься пролог. Пропустити, якщо це поле дорівнює 0.
0x311epilogSectionІндексуйте в таблицю розділів, до якого відноситься епілог. Пропустити, якщо це поле дорівнює 0.
0x321unresolvedSectionІндекс до розділу таблиці, до якого відноситься невирішене. Пропустити, якщо це поле дорівнює 0.
0x331bssSectionІндекс до таблиці розділів, відносно якого bss. Заповнюється під час виконання!
0x344прологЗсув у вказаний розділ функції _prolog.
0x384епілогЗсув у вказаний розділ функції _epilog.
0x3c4невирішеніЗсув у вказаний розділ функції _unresolved.
0x404вирівнятиТільки версія ≥ 2. Обмеження вирівнювання для всіх розділів, виражене як ступінь 2.
0x444bssAlignТільки версія ≥ 2. Обмеження вирівнювання для всіх розділів «.bss», виражене як ступінь 2.
0x484fixSizeТільки версія ≥ 3. Якщо REL пов’язано з OSLinkFixed (замість OSLink), пробіл після цієї адреси можна використовувати для інших цілей (наприклад, BSS).

Інформаційна таблиця розділу

Інформаційна таблиця розділу містить записи numSections довжиною 0x8 байтів:

ЗсувРозмірОпис
0x030 бітЗміщення від початку REL до розрізу. Якщо це нуль, розділ є неініціалізованим розділом (тобто .bss).
0x3,61 бітНевідомий.
0x3,71 бітВиконуваний прапор; якщо це 1, розділ є виконуваним.
0x44Довжина розділу в байтах. Якщо це нуль, цей запис пропускається.
0x8Наступний записНаступний запис

Дані переміщення

Дані переміщення є одним або кількома списками структур розміром 0x8 байт. Кінець кожного списку позначається спеціальним кодом типу 203:

ЗсувІм’яРозмірОпис
0x0зсув2Зсув у байтах від попереднього переміщення до цього. Якщо це перше переміщення в розділі, це відносно початку розділу.
0x2типу1Тип переміщення. Описано нижче.
0x3розділ1Розділ символу, проти якого потрібно переміститися. Для спеціального типу переміщення 202 це номер розділу в цьому файлі, до якого застосовуються наступні записи переміщення.
0x4додаток4Зсув у байтах символу, який потрібно перемістити, відносно початку його розділу. Це абсолютна адреса для переміщень у main.dol.
0x8Наступний записНаступний записНаступний запис

Список літератури

Див. також