aspose.info
ZH

REL - 可重定位模块文件

更新于

什么是一 .rel 文件?

具有 .rel 扩展名的文件可用于多种用途。因此,在游戏分类方面,它被称为一些 Nintendo Wii 游戏使用的可重定位模块文件,例如 Brawl、Super Smash Bros 和 Mario Kart Wii。它包含游戏数据,包括角色模型和阶段。 REL 文件的执行方式与 Microsoft Windows 使用的 .DLL 文件类似。

REL 文件格式

在 REL 文件格式中,文件分为几个部分,按类似的访问权限分组,例如,一个部分中的只读数据,所有可执行代码都放在另一个部分中,等等。文件以标题部分开头,后面是:

  • 包含部分信息的表格。
  • 部分数据。
  • 搬迁信息。

文件头

该文件以最多 0x4C 字节的标头开头:

偏移尺寸字段名称说明
0x004编号任意识别号。在游戏使用的所有 REL 中必须是唯一的。不得为 0。
0x044下一个指向下一个模块的指针,在运行时填充。
0x084上一页指向前一个模块的指针,在运行时填充。
0x0c4numSections文件中的节数。
0x104sectionInfoOffset到截面表开始处的偏移量。
0x144名称偏移偏移到包含模块名称的 ASCII 字符串。可能为 NULL。相对于 REL 文件的开头。
0x184名称大小模块名称的大小(以字节为单位)。
0x1c4版本REL 文件格式的版本号。
0x204大小“.bss"部分的大小。
0x244相对偏移重定位表的偏移量。
0x284impOffset小鬼表的偏移量。
0x2c4小尺寸imp 表的大小(以字节为单位)。
0x301序言部分索引到 prolog 相对的节表。如果此字段为 0,则跳过。
0x311结语部分索引到与 Epilog 相关的节表中。如果此字段为 0,则跳过。
0x321未解决部分索引到未解析的相对于节表。如果此字段为 0,则跳过。
0x331bss部分索引到 bss 相对的节表。在运行时填充!
0x344序言偏移到 _prolog 函数的指定部分。
0x384结语偏移到 _epilog 函数的指定部分。
0x3c4未解决偏移到 _unresolved 函数的指定部分。
0x404对齐仅限版本 ≥ 2。所有部分的对齐约束,表示为 2 的幂。
0x444bss对齐仅限版本 ≥ 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下一个条目下一个条目下一个条目

参考

另请参阅