Changes

Jump to navigation Jump to search
1,052 bytes added ,  03:15, 5 December 2019
Line 40: Line 40:  
| 0x0
 
| 0x0
 
| 0x10
 
| 0x10
| Decrypted header's CTR
+
| Header's CTR, official code copies the pre-decryption CTR over the decrypted result. Also used as metadata.
 
|-
 
|-
 
| 0x10
 
| 0x10
Line 129: Line 129:  
Each section follows each other immediately and is encrypted with the same key used for encrypting the header.
 
Each section follows each other immediately and is encrypted with the same key used for encrypting the header.
 
The section offsets are relative to a base, which is typically 0x80000000 pointing to the base of DRAM.
 
The section offsets are relative to a base, which is typically 0x80000000 pointing to the base of DRAM.
 +
 +
Before being decrypted, the encrypted header's CTR additionally encodes metadata used to validate package2's contents as follows:
 +
* Size of the entire package2 with the raw header = ctr_word2 ^ ctr_word3 ^ ctr_word0
 +
* Metadata version field = ((ctr_word1 ^ (ctr_word1 >> 16)) & 0xFF) ^ (ctr_word1 >> 24)
 +
 +
In [4.0.0], the metadata version field must be less or equal to 4.
    
== Section 0 ==
 
== Section 0 ==
Line 135: Line 141:  
== Section 1 ==
 
== Section 1 ==
 
When decrypted, this section contains the built-in system modules encapsulated in a custom format.
 
When decrypted, this section contains the built-in system modules encapsulated in a custom format.
 +
 +
Note: On firmware [[8.0.0]] INI1 is contained within the Kernel and section 1 is empty with NULL SHA256 to match.
    
=== INI1 ===
 
=== INI1 ===
Line 153: Line 161:  
| 0x8
 
| 0x8
 
| u32
 
| u32
| NumberProcesses
+
| NumberProcesses (Must be <0x51)
 
|-
 
|-
 
| 0xC
 
| 0xC
Line 161: Line 169:     
==== KIP1 ====
 
==== KIP1 ====
Kernel internal process?
+
Kernel Initial Process.
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 183: Line 191:  
| 0x18
 
| 0x18
 
| u32
 
| u32
| KProcess+0x280
+
| Process category (0: regular title, 1: kernel built-in). Should be 1 here.
 
|-
 
|-
 
| 0x1C
 
| 0x1C
Line 199: Line 207:  
| 0x1F
 
| 0x1F
 
| u8
 
| u8
| Flags: bit0-2: compression-enable for each section, when set. Bit3: Is64Bit. Bit4: IsAddrSpace36Bit. Bit5-7: reserved (unused)
+
| Flags: bit0-2: compression-enable for each section, when set. Bit3: Is64Bit. Bit4: IsAddrSpace36Bit. Bit5: [2.0.0+] UseSystemPoolPartition (1: System, 0: Application). Bit6, Bit7: reserved (unused)
 
|-
 
|-
 
| 0x20
 
| 0x20
Line 206: Line 214:  
|-
 
|-
 
| 0x80
 
| 0x80
| u64[0x20]
+
| u32[0x20]
 
| KernelCaps
 
| KernelCaps
 
|}
 
|}
Line 231: Line 239:  
| 0xC
 
| 0xC
 
| u32
 
| u32
| Attribute: the size of the main thread's stack for .rodata, reserved otherwise.
+
| Attribute: the size in pages of the main thread's stack for .rodata, reserved otherwise.
 
|}
 
|}
   Line 263: Line 271:  
| 0x0205
 
| 0x0205
 
|-
 
|-
| [[4.1.0]]
+
| [[3.0.0]]
 +
| 0x4
 +
| 0x5
 +
| 0x0306
 +
|-
 +
| [[3.0.2]]
 +
| 0x5
 +
| 0x6
 +
| 0x0407
 +
|-
 +
| [[4.0.0]]
 
| 0x6
 
| 0x6
 
| 0x7
 
| 0x7
 
| 0x0508
 
| 0x0508
 +
|-
 +
| [[5.0.0]]
 +
| 0x7
 +
| 0x8
 +
| 0x0609
 +
|-
 +
| [[6.0.0]]
 +
| 0x8
 +
| 0x9
 +
| 0x070A
 +
|-
 +
| [[6.2.0]]
 +
| 0x9
 +
| 0xA
 +
| 0x080B
 +
|-
 +
| [[7.0.0]]
 +
| 0xA
 +
| 0xB
 +
| 0x090C
 +
|-
 +
| [[8.1.0]]
 +
| 0xB
 +
| 0xC
 +
| 0x0A0D
 +
|-
 +
| [[9.0.0]]
 +
| 0xC
 +
| 0xD
 +
| 0x0B0E
 +
|-
 +
| [[9.1.0]]
 +
| 0xD
 +
| 0xE
 +
| 0x0C0F
 
|}
 
|}
  

Navigation menu