فایل REL چیست؟
یک فایل با پسوند rel را می توان برای چندین نوع هدف استفاده کرد. بنابراین، از نظر طبقه بندی بازی، به عنوان یک فایل ماژول قابل جابجایی شناخته می شود که توسط برخی از بازی های Nintendo Wii مانند Brawl، Super Smash Bros و Mario Kart Wii استفاده می شود. این شامل داده های گیم پلی، از جمله مدل های شخصیت و مراحل است. فایلهای REL مشابه فایلهای DLL. مورد استفاده در ویندوز مایکروسافت عمل میکنند.
فرمت فایل REL
در یک فرمت فایل REL، فایل به چندین بخش تقسیم میشود که بر اساس دسترسی مشابه گروهبندی میشوند، به عنوان مثال فقط خواندن دادهها در یک بخش، همه کدهای اجرایی در دیگری قرار میگیرند، و غیره.
- جدول حاوی اطلاعات بخش.
- داده های بخش
- اطلاعات جابجایی
هدر فایل
فایل با هدر تا 0x4C بایت شروع می شود:
افست | اندازه | نام فیلد | توضیحات |
---|---|---|---|
0x00 | 4 | id | Arbitrary identification number. Must be unique amongst all RELs used by a game. Must not be 0. |
0x04 | 4 | بعدی | اشاره گر به ماژول بعدی، پر شده در زمان اجرا. |
0x08 | 4 | قبلی | اشاره گر به ماژول قبلی، پر شده در زمان اجرا. |
0x0c | 4 | numSections | تعداد بخش های فایل |
0x10 | 4 | بخشInfoOffset | به ابتدای جدول بخش افست شود. |
0x14 | 4 | nameOffset | افست به رشته ASCII حاوی نام ماژول. ممکن است NULL باشد. نسبت به شروع فایل REL. |
0x18 | 4 | nameSize | اندازه نام ماژول بر حسب بایت |
0x1c | 4 | نسخه | شماره نسخه فرمت فایل REL. |
0x20 | 4 | bssSize | اندازه بخش ‘.bss’. |
0x24 | 4 | relOffset | به جدول جابجایی افست شود. |
0x28 | 4 | impOffset | آفست به جدول imp. |
0x2c | 4 | impSize | اندازه جدول imp در بایت. |
0x30 | 1 | prologSection | Index into section table which prolog is relative to. Skip if this field is 0. |
0x31 | 1 | epilogSection | Index into section table which epilog is relative to. Skip if this field is 0. |
0x32 | 1 | unresolvedSection | Index into section table which unresolved is relative to. Skip if this field is 0. |
0x33 | 1 | bssSection | فهرست بندی در جدول بخش که bss نسبت به آن است. در زمان اجرا پر شد! |
0x34 | 4 | پرولوگ | در بخش مشخصی از تابع _prolog آفست کنید. |
0x38 | 4 | اپیلوگ | در بخش مشخصی از تابع _epilog آفست کنید. |
0x3c | 4 | حل نشده | در بخش مشخصی از تابع _unresolved افست کنید. |
0x40 | 4 | align | Version ≥ 2 only. Alignment constraint on all sections, expressed as power of 2. |
0x44 | 4 | bssAlign | Version ≥ 2 only. Alignment constraint on all ‘.bss’ section, expressed as power of 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 | ورودی بعدی | ورودی بعدی | ورودی بعدی |