ไฟล์ REL คืออะไร??
ไฟล์ที่มีนามสกุล .rel สามารถใช้เพื่อวัตถุประสงค์หลายประเภท ดังนั้นในแง่ของการจัดประเภทเกม จึงเรียกว่าไฟล์โมดูลที่ย้ายตำแหน่งได้ซึ่งใช้โดยเกม Nintendo Wii บางเกม เช่น Brawl, Super Smash Bros และ Mario Kart Wii ประกอบด้วยข้อมูลการเล่นเกม รวมถึงโมเดลตัวละครและสเตจ ไฟล์ REL ทำงานคล้ายกับไฟล์ .DLL ที่ใช้โดย Microsoft Windows
รูปแบบไฟล์ REL
ในรูปแบบไฟล์ REL ไฟล์จะถูกแบ่งออกเป็นหลายส่วน จัดกลุ่มตามสิทธิ์การเข้าถึง เช่น อ่านข้อมูลอย่างเดียวในส่วนเดียว โค้ดปฏิบัติการทั้งหมดจะอยู่ในอีกส่วน เป็นต้น ไฟล์เริ่มต้นด้วยส่วนหัว ตามด้วย:
- ตารางที่มีข้อมูลส่วน
- ข้อมูลส่วน
- ข้อมูลการย้ายถิ่นฐาน
ส่วนหัวของไฟล์
ไฟล์เริ่มต้นด้วยส่วนหัวสูงสุด 0x4C ไบต์:
ออฟเซ็ต | ขนาด | ชื่อฟิลด์ | คำอธิบาย |
---|---|---|---|
0x00 | 4 | รหัส | หมายเลขประจำตัวโดยพลการ ต้องไม่ซ้ำกันใน REL ทั้งหมดที่ใช้โดยเกม ต้องไม่เป็น 0 |
0x04 | 4 | ถัดไป | ชี้ไปที่โมดูลถัดไป เติมเมื่อรันไทม์ |
0x08 | 4 | ก่อนหน้า | ตัวชี้ไปยังโมดูลก่อนหน้า เติมเมื่อรันไทม์ |
0x0c | 4 | จำนวนส่วน | จำนวนส่วนในไฟล์ |
0x10 | 4 | ส่วนInfoOffset | ชดเชยกับจุดเริ่มต้นของตารางส่วน |
0x14 | 4 | ชื่อออฟเซ็ต | ออฟเซ็ตเป็นสตริง ASCII ที่มีชื่อของโมดูล อาจเป็นโมฆะ สัมพันธ์กับจุดเริ่มต้นของไฟล์ REL |
0x18 | 4 | ชื่อขนาด | ขนาดของชื่อโมดูลเป็นไบต์ |
0x1c | 4 | รุ่น | หมายเลขเวอร์ชันของรูปแบบไฟล์ REL |
0x20 | 4 | bssขนาด | ขนาดของส่วน ‘.bss’ |
0x24 | 4 | relOffset | ออฟเซ็ตกับตารางการย้ายถิ่นฐาน |
0x28 | 4 | อิมออฟเซ็ต | ออฟเซ็ตกับตารางเปรต |
0x2c | 4 | เปรตขนาด | ขนาดของตารางเปรตเป็นไบต์ |
0x30 | 1 | อารัมภบทส่วน | จัดทำดัชนีลงในตารางส่วนที่อารัมภบทสัมพันธ์ ข้ามถ้าฟิลด์นี้เป็น 0 |
0x31 | 1 | บทส่งท้ายSection | จัดทำดัชนีลงในตารางส่วนที่บทส่งท้ายสัมพันธ์กัน ข้ามถ้าฟิลด์นี้เป็น 0 |
0x32 | 1 | ยังไม่ได้แก้ไขส่วน | จัดทำดัชนีลงในตารางส่วนที่ยังไม่ได้แก้ไขซึ่งสัมพันธ์กับ ข้ามถ้าฟิลด์นี้เป็น 0 |
0x33 | 1 | bssส่วน | จัดทำดัชนีลงในตารางส่วนที่ bss สัมพันธ์กัน เต็มเมื่อรันไทม์! |
0x34 | 4 | อารัมภบท | ออฟเซ็ตในส่วนที่ระบุของฟังก์ชัน _prolog |
0x38 | 4 | บทส่งท้าย | ออฟเซ็ตในส่วนที่ระบุของฟังก์ชัน _epilog |
0x3c | 4 | ยังไม่ได้แก้ไข | ออฟเซ็ตในส่วนที่ระบุของฟังก์ชัน _unresolved |
0x40 | 4 | จัด | เวอร์ชัน ≥ 2 เท่านั้น ข้อจำกัดการจัดตำแหน่งในทุกส่วน แสดงเป็นยกกำลัง 2 |
0x44 | 4 | bssAlign | เวอร์ชัน ≥ 2 เท่านั้น ข้อจำกัดการจัดตำแหน่งในส่วน ‘.bss’ ทั้งหมด ซึ่งแสดงเป็นยกกำลัง 2 |
0x48 | 4 | แก้ไขขนาด | เวอร์ชัน ≥ 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 | รายการถัดไป | รายการถัดไป | รายการถัดไป |