.REL 파일이란?
확장자가 .rel인 파일은 여러 가지 용도로 사용할 수 있습니다. 따라서 게임 분류 측면에서 Brawl, Super Smash Bros 및 Mario Kart Wii와 같은 일부 Nintendo Wii 게임에서 사용되는 재배치 가능한 모듈 파일로 알려져 있습니다. 캐릭터 모델과 스테이지를 포함한 게임 플레이 데이터로 구성됩니다. REL 파일은 Microsoft Windows에서 사용하는 .DLL 파일과 유사하게 수행됩니다.
REL 파일 형식
REL 파일 형식에서 파일은 여러 섹션으로 나뉘며 같은 액세스로 그룹화됩니다. 예를 들어 한 섹션에 데이터 읽기 전용, 모든 실행 코드가 다른 섹션에 배치됩니다. 파일은 헤더 섹션으로 시작하고 그 뒤에 다음이 따라옵니다.
- 섹션 정보를 포함하는 테이블.
- 섹션 데이터.
- 이전 정보.
파일 헤더
파일은 최대 0x4C 바이트의 헤더로 시작합니다.
오프셋 | 크기 | 필드 이름 | 설명 |
---|---|---|---|
0x00 | 4 | 아이디 | 임의 식별 번호. 게임에서 사용하는 모든 REL 중에서 고유해야 합니다. 0이 아니어야 합니다. |
0x04 | 4 | 다음 | 런타임에 채워진 다음 모듈에 대한 포인터입니다. |
0x08 | 4 | 이전 | 런타임에 채워진 이전 모듈에 대한 포인터입니다. |
0x0c | 4 | numSections | 파일의 섹션 수입니다. |
0x10 | 4 | 섹션 정보 오프셋 | 단면 테이블의 시작 부분으로 오프셋합니다. |
0x14 | 4 | 이름 오프셋 | 모듈 이름을 포함하는 ASCII 문자열에 대한 오프셋입니다. NULL일 수 있습니다. REL 파일의 시작을 기준으로 합니다. |
0x18 | 4 | 이름크기 | 바이트 단위의 모듈 이름 크기입니다. |
0x1c | 4 | 버전 | REL 파일 형식의 버전 번호입니다. |
0x20 | 4 | bss크기 | ‘.bss’ 섹션의 크기입니다. |
0x24 | 4 | relOffset | 재배치 테이블에 대한 오프셋입니다. |
0x28 | 4 | 임프 오프셋 | 임프 테이블에 대한 오프셋. |
0x2c | 4 | 크기 | Imp 테이블의 크기(바이트)입니다. |
0x30 | 1 | 프롤로그섹션 | 프롤로그가 관련된 섹션 테이블에 대한 인덱스입니다. 이 필드가 0이면 건너뜁니다. |
0x31 | 1 | 에필로그섹션 | 에필로그가 관련된 섹션 테이블에 대한 인덱스입니다. 이 필드가 0이면 건너뜁니다. |
0x32 | 1 | 미해결섹션 | 미해결이 관련된 섹션 테이블에 대한 인덱스입니다. 이 필드가 0이면 건너뜁니다. |
0x33 | 1 | bss섹션 | bss가 상대적인 섹션 테이블에 대한 인덱스입니다. 런타임에 채워집니다! |
0x34 | 4 | 프롤로그 | _prolog 함수의 지정된 섹션으로 오프셋합니다. |
0x38 | 4 | 에필로그 | _epilog 함수의 지정된 섹션으로 오프셋합니다. |
0x3c | 4 | 미해결 | _unresolved 함수의 지정된 섹션으로 오프셋합니다. |
0x40 | 4 | 정렬 | 버전 ≥ 2만. 2의 거듭제곱으로 표현되는 모든 섹션의 정렬 제약 조건 |
0x44 | 4 | bss정렬 | 버전 ≥ 2만. 2의 거듭제곱으로 표현되는 모든 ‘.bss’ 섹션의 정렬 제약 조건 |
0x48 | 4 | 크기 수정 | 버전 ≥ 3만. REL이 OSLink 대신 OSLinkFixed와 연결된 경우 이 주소 뒤의 공간을 BSS와 같은 다른 용도로 사용할 수 있습니다. |
섹션 정보 테이블
섹션 정보 테이블에는 각각 0x8바이트 길이의 numSections 항목이 포함되어 있습니다.
오프셋 | 크기 | 설명 |
---|---|---|
0x0 | 30비트 | REL의 시작 부분에서 섹션까지의 오프셋입니다. 이것이 0이면 섹션은 초기화되지 않은 섹션(예: .bss)입니다. |
0x3.6 | 1비트 | 알려지지 않은. |
0x3.7 | 1비트 | 실행 플래그; 이것이 1이면 섹션이 실행 가능합니다. |
0x4 | 4 | 섹션의 길이(바이트)입니다. 0이면 이 항목을 건너뜁니다. |
0x8 | 다음 항목 | 다음 항목 |
재배치 데이터
재배치 데이터는 0x8 바이트 구조의 하나 이상의 목록입니다. 각 목록의 끝은 특수 유형 코드 203으로 표시됩니다.
오프셋 | 이름 | 크기 | 설명 |
---|---|---|---|
0x0 | 오프셋 | 2 | 이전 재배치에서 이 재배치로의 오프셋(바이트)입니다. 섹션의 첫 번째 재배치인 경우 섹션 시작을 기준으로 합니다. |
0x2 | 유형 | 1 | 재배치 유형입니다. 아래에서 묘사 되어진. |
0x3 | 섹션 | 1 | 재배치할 기호의 섹션입니다. 특수 재배치 유형 202의 경우 다음 재배치 항목이 적용되는 이 파일의 섹션 번호입니다. |
0x4 | 추가 | 4 | 섹션 시작을 기준으로 재배치할 기호의 오프셋(바이트)입니다. 이것은 main.dol에 대한 재배치 대신 절대 주소입니다. |
0x8 | 다음 항목 | 다음 항목 | 다음 항목 |