PRX: Difference between revisions
Jump to navigation
Jump to search
Aerosoul94 (talk | contribs) (more info, second load segment is nothing special (maps to .data, .opd, .toc, etc). nothing new.) |
CelesteBlue (talk | contribs) No edit summary |
||
Line 1: | Line 1: | ||
=Overview= | = Overview = | ||
'''S'''igned '''P'''PU '''R'''elocatable E'''x'''ecutable (SPRX) | '''S'''igned '''P'''PU '''R'''elocatable E'''x'''ecutable (SPRX) | ||
=Structure= | = Structure = | ||
First LOAD segment p_paddr points to module info. | First LOAD segment p_paddr points to module info. | ||
==Module Info== | |||
== Module Info == | |||
{| class="wikitable" | {| class="wikitable" | ||
! Offset | ! Offset | ||
Line 43: | Line 47: | ||
|} | |} | ||
===Exports=== | === Exports === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Offset | ! Offset | ||
Line 98: | Line 103: | ||
|} | |} | ||
===Imports=== | === Imports === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Offset | ! Offset | ||
Line 166: | Line 172: | ||
== Relocations == | == Relocations == | ||
Relocations can be found in either PT_SCE_PPURELA segments or SHT_SCE_PPURELA / SHT_RELA sections. RELA relocations are standard relocations while PPURELA relocations have 2 segment (program header) indexes stored in r_sym of r_info. | Relocations can be found in either PT_SCE_PPURELA segments or SHT_SCE_PPURELA / SHT_RELA sections. RELA relocations are standard relocations while PPURELA relocations have 2 segment (program header) indexes stored in r_sym of r_info. | ||
*The first index can be extracted with 0x7FFFFF00 as a mask and is used as a base address for r_addend. This sum will be the value applied to the patch. | *The first index can be extracted with 0x7FFFFF00 as a mask and is used as a base address for r_addend. This sum will be the value applied to the patch. | ||
Line 171: | Line 178: | ||
*The first bit (0x80000000) is also set on earlier PRX's but it is currently unknown what it is used for. | *The first bit (0x80000000) is also set on earlier PRX's but it is currently unknown what it is used for. | ||
{{File Formats}} | {{File Formats}} | ||
<noinclude>[[Category:Main]]</noinclude> | <noinclude>[[Category:Main]]</noinclude> |
Revision as of 18:34, 23 December 2019
Overview
Signed PPU Relocatable Executable (SPRX)
Structure
First LOAD segment p_paddr points to module info.
Module Info
Offset | Type | Description |
---|---|---|
+0 | short | Module attributes |
+2 | char[2] | Module version |
+4 | char[28] | Module name |
+32 | long | TOC address |
+36 | long | Pointer to the start of exports section |
+40 | long | Pointer to end of exports section |
+44 | long | Points to the start of imports section |
+48 | long | Points to the end of imports section |
Exports
Offset | Type | Description |
---|---|---|
+0 | char[2] | Structure size (0x1C 32-bit or 0x28 64-bit), padding |
+2 | short | Version |
+4 | short | Attributes |
+6 | short | Number of functions |
+8 | short | Number of variables |
+10 | short | Number of thread local storage variables |
+12 | char | Hash info |
+13 | char | Thread local storage hash info |
+14 | char[2] | Reserved |
+16 | long | Pointer to exported library name |
+20 | long | Pointer to function NID table |
+24 | long | Pointer to function stub table |
Imports
Offset | Type | Description |
---|---|---|
+0 | char | Structure size (0x2C) |
+1 | char | Unused |
+2 | short | Version |
+4 | short | Attributes. AUTO_EXPORT=0x0001, WEAK_EXPORT=0x0002, NOLINK_EXPORT=0x0004, WEAK_IMPORT=0x0008, 0x2000 seems to indicate a non-PRX library (like "stdc" or "allocator") that comes from somewhere else (LV2?) |
+6 | short | Number of functions |
+8 | short | Number of variables |
+10 | short | Number of thread local storage variables |
+12 | byte[4] | reserved |
+16 | long | Pointer to imported library name. |
+20 | long | Pointer to the list of NID's for the exported functions. |
+24 | long | Pointer to the list of exported functions. |
+28 | long | var_nid_table |
+32 | long | var_entry_table |
+36 | long | tls_nid_table |
+40 | long | tls_entry_table |
Relocations
Relocations can be found in either PT_SCE_PPURELA segments or SHT_SCE_PPURELA / SHT_RELA sections. RELA relocations are standard relocations while PPURELA relocations have 2 segment (program header) indexes stored in r_sym of r_info.
- The first index can be extracted with 0x7FFFFF00 as a mask and is used as a base address for r_addend. This sum will be the value applied to the patch.
- The second index can be extracted with 0x000000FF as a mask and is used as a base address for the target segment to patch and is added to r_offset.
- The first bit (0x80000000) is also set on earlier PRX's but it is currently unknown what it is used for.
|