aspose.info
RU

REL — файл перемещаемого модуля

Обновлено

.REL вариант №

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

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

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

  • Таблица с информацией о разделе.
  • Данные раздела.
  • Информация о переезде.

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

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

СмещениеРазмерИмя поляОписание
0x004идентификаторПроизвольный идентификационный номер. Должен быть уникальным среди всех REL, используемых в игре. Не должно быть 0.
0x044следующийУказатель на следующий модуль, заполняемый во время выполнения.
0x084предыдущийУказатель на предыдущий модуль, заполненный во время выполнения.
0x0с4числоСекцийКоличество разделов в файле.
0x104разделИнформацияСмещениеСмещение к началу таблицы разделов.
0x144имяOffsetСмещение к строке ASCII, содержащей имя модуля. Может быть NULL. Относительно начала файла REL.
0x184имяРазмерРазмер имени модуля в байтах.
0x1с4версияНомер версии формата файла REL.
0x204bssРазмерРазмер раздела ‘.bss’.
0x244отн. смещениеСмещение к таблице перемещений.
0x284импСмещениеСмещение к таблице имп.
0x2с4импРазмерРазмер таблицы импов в байтах.
0x301прологРазделИндекс в таблице разделов, относительно которой пролог. Пропустить, если это поле равно 0.
0x311эпилогРазделУкажите в таблице разделов, к какому эпилогу относится. Пропустить, если это поле равно 0.
0x321неразрешенныйразделУказатель в таблицу разделов, к которой относится unresolved. Пропустить, если это поле равно 0.
0x331bsРазделУкажите в таблице разделов, относительно которой находится bss. Заполняется во время выполнения!
0x344прологСмещение в указанный раздел функции _prolog.
0x384эпилогСмещение в указанный раздел функции _epilog.
0x3c4нерешенныйСмещение в указанный раздел функции _unresolved.
0x404выровнятьТолько версия ≥ 2. Ограничение выравнивания для всех разделов, выраженное как степень числа 2.
0x444bssAlignТолько версия ≥ 2. Ограничение выравнивания для всех разделов ‘.bss’, выраженное как степень числа 2.
0x484исправитьРазмерТолько версия ≥ 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Следующая записьСледующая записьСледующая запись

использованная литература

См. также