aspose.info
PL

REL - Przenośny Plik Modułu

Zaktualizowano

Czym jest plik REL?

Plik z rozszerzeniem .rel może być używany do kilku rodzajów celów. Dlatego pod względem klasyfikacji gier jest znany jako relokowalny plik modułu używany przez niektóre gry Nintendo Wii, takie jak Brawl, Super Smash Bros i Mario Kart Wii. Zawiera dane rozgrywki, w tym modele postaci i etapy. Pliki REL działają podobnie do plików .DLL używanych przez system Microsoft Windows.

Format pliku REL

W formacie pliku REL plik jest podzielony na kilka sekcji, pogrupowanych według podobnego dostępu, np. dane tylko do odczytu w jednej sekcji, cały kod wykonywalny jest umieszczony w innej, itp. Plik rozpoczyna się sekcją nagłówka, po której następuje:

  • Tabela zawierająca informacje o sekcji.
  • Dane sekcji.
  • Informacje o przeprowadzce.

Nagłówek pliku

Plik zaczyna się od nagłówka o długości do 0x4C bajtów:

PrzesunięcieRozmiarNazwa polaOpis
0x004identyfikatorDowolny numer identyfikacyjny. Musi być unikalny wśród wszystkich REL używanych przez grę. Nie może wynosić 0.
0x044następnyWskaźnik do następnego modułu, wypełniany w czasie wykonywania.
0x084poprzedniWskaźnik do poprzedniego modułu, wypełniany w czasie wykonywania.
0x0c4liczbaSekcjeLiczba sekcji w pliku.
0x104przekrójInformacjePrzesunięcieOdsunięcie do początku tabeli przekroju.
0x144nazwaPrzesunięciePrzesunięcie do ciągu ASCII zawierającego nazwę modułu. Może być NULL. Względem początku pliku REL.
0x184nazwaRozmiarRozmiar nazwy modułu w bajtach.
0x1c4wersjaNumer wersji formatu pliku REL.
0x204bssRozmiarRozmiar sekcji „.bss”.
0x244odsunięcie względnePrzesunięcie do tabeli relokacji.
0x284impPrzesunięciePrzesunięcie do tabeli imp.
0x2c4impRozmiarRozmiar tabeli imp w bajtach.
0x301prologSekcjaIndeks do tabeli sekcji, do której odnosi się prolog. Pomiń, jeśli to pole ma wartość 0.
0x311epilogSekcjaIndeks do tabeli sekcji, do której odnosi się epilog. Pomiń, jeśli to pole ma wartość 0.
0x321nierozwiązanySekcjaIndeks do tabeli sekcji, do której odnosi się nierozwiązany. Pomiń, jeśli to pole ma wartość 0.
0x331bssSekcjaIndeks do tabeli sekcji, do której odnosi się bss. Wypełniony w czasie wykonywania!
0x344prologPrzesunięcie do określonej sekcji funkcji _prolog.
0x384epilogPrzesunięcie do określonej sekcji funkcji _epilog.
0x3c4nierozwiązanyPrzesunięcie do określonej sekcji funkcji _unresolved.
0x404wyrównaćTylko wersja ≥ 2. Wiązanie wyrównania dla wszystkich sekcji, wyrażone jako potęga 2.
0x444bssWyrównajTylko wersja ≥ 2. Ograniczenie wyrównania dla wszystkich sekcji „.bss”, wyrażone jako potęga 2.
0x484naprawRozmiarTylko wersja ≥ 3. Jeśli REL jest połączony z OSLinkFixed (zamiast OSLink), spacja po tym adresie może być wykorzystana do innych celów (np. BSS).

Tabela informacji o sekcji

Tabela informacji o sekcji zawiera wpisy numSections, każdy o długości 0x8 bajtów:

PrzesunięcieRozmiarOpis
0x030 bitówPrzesunięcie od początku REL do sekcji. Jeśli jest to zero, sekcja jest sekcją niezainicjowaną (tj. .bss).
0x3.61 bitNieznany.
0x3.71 bitFlaga wykonywalna; jeśli jest to 1, sekcja jest wykonywalna.
0x44Długość sekcji w bajtach. Jeśli jest to zero, ten wpis jest pomijany.
0x8Następny wpisNastępny wpis

Dane relokacji

Dane relokacji to jedna lub więcej list struktur bajtów 0x8. Koniec każdej listy jest oznaczony specjalnym kodem typu 203:

PrzesunięcieImięRozmiarOpis
0x0przesunięcie2Przesunięcie w bajtach od poprzedniej relokacji do tej. Jeśli jest to pierwsza relokacja w sekcji, jest ona względna względem początku sekcji.
0x2wpisz1Typ przeprowadzki. Opisane poniżej.
0x3sekcja1Sekcja symbolu, względem której ma zostać przeniesione. W przypadku specjalnego typu relokacji 202 jest to zamiast tego numer sekcji w tym pliku, do której odnoszą się następujące wpisy relokacji.
0x4dodaj4Przesunięcie w bajtach symbolu, względem którego ma zostać przeniesione, względem początku jego sekcji. Zamiast tego jest to adres bezwzględny dla relokacji względem main.dol.
0x8Następny wpisNastępny wpisNastępny wpis

Bibliografia

Zobacz też