SELF: Difference between revisions

From Vita Development Wiki
Jump to navigation Jump to search
Line 1: Line 1:
SELF files are a wrapper around encrypted [http://en.wikipedia.org/wiki/ELF ELF] files. The encrypted header contains keys to decrypt each encrypted ELF program, which are decrypted and loaded individually. Because of this, a copy of the ELF headers and ELF program headers are stored in plain text next to the SCE header.
SELF files are a wrapper around encrypted [http://en.wikipedia.org/wiki/ELF ELF] files. The encrypted header contains keys to decrypt each encrypted ELF program, which are decrypted and loaded individually. Because of this, a copy of the ELF headers and ELF program headers are stored in plain text next to the SCE header.


== Authentication ID ==
== Authority ID ==
Offset 0x80 in the SELF header. <code>SceWebCore</code> has 0x8000 set; the only system app with that flag set.


<code>sceAppMgrConvertVs0UserDrivePath</code> checks the authentication id to limit mount points.
8 Bytes long. Located at offset 0x80 in SELF header.


<code>0x2800000000008003</code> seen used by [[SceWebCore]] can only access <code>vs0:data/external/cert/</code> and <code>vs0:data/external/webcore/</code>
[[SceAppMgr#sceAppMgrConvertVs0UserDrivePath|sceAppMgrConvertVs0UserDrivePath]] checks the AuthId to limit mount points.


<code>0x2800000000008004</code> seen used by games and <code>0x210000101CD20007</code> seen used by [[PSM]] can only access <code>vs0:data/external</code> and <code>vs0:sys/external</code>
<code>0x2800000000008000</code> only used by [[SceWebCore]] eboot.bin (NPXS10017 / NPXS10037 on 1.69-3.01, replaced later by SceWebKit).
 
<code>0x2800000000008003</code> seen used by [[SceWebCore]] can access <code>vs0:data/external/cert/</code> and <code>vs0:data/external/webcore/</code>.
 
<code>0x210000101CD20007</code> seen used by [[PSM]] can access <code>vs0:data/external</code> and <code>vs0:sys/external</code>.


== Relocations ==
== Relocations ==

Revision as of 22:28, 31 March 2018

SELF files are a wrapper around encrypted ELF files. The encrypted header contains keys to decrypt each encrypted ELF program, which are decrypted and loaded individually. Because of this, a copy of the ELF headers and ELF program headers are stored in plain text next to the SCE header.

Authority ID

8 Bytes long. Located at offset 0x80 in SELF header.

sceAppMgrConvertVs0UserDrivePath checks the AuthId to limit mount points.

0x2800000000008000 only used by SceWebCore eboot.bin (NPXS10017 / NPXS10037 on 1.69-3.01, replaced later by SceWebKit).

0x2800000000008003 seen used by SceWebCore can access vs0:data/external/cert/ and vs0:data/external/webcore/.

0x210000101CD20007 seen used by PSM can access vs0:data/external and vs0:sys/external.

Relocations

Relocations are stored within the PT_SCE_RELA segment.

Relocation entry format can be one of 10 types which is determined by the first 4 bits.

Format 0

Start End Description
0 3 Entry format type set to 0
4 7 Symbol segment index
8 15 Relocation type
16 19 Patch segment index
20 27 Second relocation type
28 31 Distance from offset (used for second relocation)
32 63 Addend
64 95 Offset

Format 1

Start End Description
0 3 Entry format type set to 1
4 7 Symbol segment index
8 15 Relocation type
16 19 Patch segment index
20 41 Offset
42 63 Addend

Format 2

Start End Description
0 3 Entry format type set to 2
4 7 Symbol segment index
8 15 Relocation type
16 31 Offset
32 64 Addend

Format 3

Start End Description
0 3 Entry format type set to 3
4 7 Symbol segment index
8 8 Mode (ARM = 0, THUMB = 1)
9 26 Offset
27 31 Distance from offset
32 64 Addend

Format 4

Start End Description
0 3 Entry format type set to 4
4 26 Offset
27 31 Distance from offset

Format 5

Start End Description
0 3 Entry format type set to 5
4 12 Distance 1
13 17 Distance 2
18 26 Distance 3
27 31 Distance 4

Format 6

Start End Description
0 3 Entry format type set to 6
4 31 Offset

Format 7

Start End Description
0 3 Entry format type set to 7
4 10 Offset 1
11 17 Offset 2
18 24 Offset 3
25 31 Offset 4

Format 8

Start End Description
0 3 Entry format type set to 8
4 7 Offset 1
8 11 Offset 2
12 15 Offset 3
16 19 Offset 4
20 23 Offset 5
24 27 Offset 6
28 31 Offset 7

Format 9

Start End Description
0 3 Entry format type set to 9
4 5 Offset 1
6 7 Offset 2
8 9 Offset 3
10 11 Offset 4
12 13 Offset 5
14 15 Offset 6
16 17 Offset 7
18 19 Offset 8
20 21 Offset 9
22 23 Offset 10
24 25 Offset 11
26 27 Offset 12
28 29 Offset 13
30 31 Offset 14

Supported Relocation Codes (3.60)

Code Description
0 R_ARM_NONE
2 R_ARM_ABS32
3 R_ARM_REL32
10 R_ARM_THM_CALL
28 R_ARM_CALL
29 R_ARM_JUMP24
38 R_ARM_TARGET1 (same as R_ARM_ABS32)
40 R_ARM_V4BX (same as R_ARM_NONE)
41 R_ARM_TARGET2 (same as R_ARM_REL32)
42 R_ARM_PREL31
43 R_ARM_MOVW_ABS_NC
44 R_ARM_MOVT_ABS
47 R_ARM_THM_MOVW_ABS_NC
48 R_ARM_THM_MOVT_ABS