Changes

80 bytes added ,  16:07, 3 August 2017
no edit summary
Line 2: Line 2:     
It starts with the "NSO" header and mainly describes .text, .rodata, and .data segments (like a short-form of ELF program headers):
 
It starts with the "NSO" header and mainly describes .text, .rodata, and .data segments (like a short-form of ELF program headers):
  −
=== SegmentHeader ===
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 4
  −
| file offset of data
  −
|-
  −
| 0x4
  −
| 4
  −
| memory offset loaded to
  −
|-
  −
| 0x8
  −
| 4
  −
| size of data copied to memory offset (i.e. size after decompression)
  −
|-
  −
| 0xC
  −
| 4
  −
| alignment used on memory size / size of .bss in the case of .data segment
  −
|}
      
=== .rodata-relative extent ===
 
=== .rodata-relative extent ===
Line 56: Line 32:  
| 0x4
 
| 0x4
 
| 4
 
| 4
|  
+
| Version
 
|-
 
|-
 
| 0x8
 
| 0x8
 
| 4
 
| 4
|  
+
| Reserved1
 
|-
 
|-
 
| 0xC
 
| 0xC
 
| 4
 
| 4
| Always 0x3f?
+
| Flags: TextCompress = 1, RoCompress = 2, DataCompress = 4, TextHash = 8, RoHash = 0x10, DataHash = 0x20
 
|-
 
|-
 
| 0x10
 
| 0x10
| 0x10 * 3
+
| 4
| SegmentHeader for each segment
+
| TextFileOffset
 +
|-
 +
| 0x14
 +
| 4
 +
| TextMemoryOffset
 +
|-
 +
| 0x18
 +
| 4
 +
| TextSize
 +
|-
 +
| 0x1C
 +
| 4
 +
| ModuleNameOffset
 +
|-
 +
| 0x20
 +
| 4
 +
| RoFileOffset
 +
|-
 +
| 0x24
 +
| 4
 +
| RoMemoryOffset
 +
|-
 +
| 0x28
 +
| 4
 +
| RoSize
 +
|-
 +
| 0x2C
 +
| 4
 +
| ModuleNameSize
 +
|-
 +
| 0x30
 +
| 4
 +
| DataFileOffset
 +
|-
 +
| 0x34
 +
| 4
 +
| DataMemoryOffset
 +
|-
 +
| 0x38
 +
| 4
 +
| DataSize
 +
|-
 +
| 0x3C
 +
| 4
 +
| BssSize
 
|-
 
|-
 
| 0x40
 
| 0x40
Line 75: Line 95:  
|-
 
|-
 
| 0x60
 
| 0x60
| 0x4 * 3
+
| 0x4
| file size of each segment (i.e. LZ4-compressed size)
+
| TextFileSize
 +
|-
 +
| 0x64
 +
| 0x4
 +
| RoFileSize
 +
|-
 +
| 0x68
 +
| 0x4
 +
| DataFileSize
 
|-
 
|-
 
| 0x6c
 
| 0x6c
3

edits