NSO: Difference between revisions

No edit summary
Undo revision 1894 by Aerosoul (talk) Removed info which appears to be directly from SDK.
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 32: Line 56:
| 0x4
| 0x4
| 4
| 4
| Version
|  
|-
|-
| 0x8
| 0x8
| 4
| 4
| Reserved1
|  
|-
|-
| 0xC
| 0xC
| 4
| 4
| Flags: TextCompress = 1, RoCompress = 2, DataCompress = 4, TextHash = 8, RoHash = 0x10, DataHash = 0x20
| Always 0x3f?
|-
|-
| 0x10
| 0x10
| 4
| 0x10 * 3
| TextFileOffset
| SegmentHeader for each segment
|-
| 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 95: Line 75:
|-
|-
| 0x60
| 0x60
| 0x4
| 0x4 * 3
| TextFileSize
| file size of each segment (i.e. LZ4-compressed size)
|-
| 0x64
| 0x4
| RoFileSize
|-
| 0x68
| 0x4
| DataFileSize
|-
|-
| 0x6c
| 0x6c