NRO: Difference between revisions
		
		
		
		Jump to navigation
		Jump to search
		
| No edit summary | |||
| (One intermediate revision by one other user not shown) | |||
| Line 12: | Line 12: | ||
| | 0x0 | | 0x0 | ||
| | 0x4 | | 0x4 | ||
| | Unused | | Unused. Originally 0x0, with [17.0.0+] this is set to value 0x1. | ||
| |- | |- | ||
| | 0x4 | | 0x4 | ||
| Line 19: | Line 19: | ||
| |- | |- | ||
| | 0x8 | | 0x8 | ||
| |  | | 0x4 | ||
| | [1.0.0-16.1.0] Padding. [17.0.0+] [[NSO|nnSdk version]] offset | |||
| |- | |||
| | 0xC | |||
| | 0x4 | |||
| | Padding | | Padding | ||
| |} | |} | ||
| Line 60: | Line 64: | ||
| | 0x30 | | 0x30 | ||
| | 0x20 | | 0x20 | ||
| | [[#ModuleId]] | | [[#ModuleId|ModuleId]] | ||
| |- | |- | ||
| | 0x50 | | 0x50 | ||
Revision as of 03:07, 12 June 2024
NRO is the executable format for non-ExeFS binaries.
It starts with the NRO-start structure then the "NRO" header and mainly describes .text, .rodata, and .data segments (like a short-form of ELF program headers):
Start
| Offset | Size | Description | 
|---|---|---|
| 0x0 | 0x4 | Unused. Originally 0x0, with [17.0.0+] this is set to value 0x1. | 
| 0x4 | 0x4 | MOD0 offset | 
| 0x8 | 0x4 | [1.0.0-16.1.0] Padding. [17.0.0+] nnSdk version offset | 
| 0xC | 0x4 | Padding | 
Header
| Offset | Size | Description | 
|---|---|---|
| 0x0 | 0x4 | Magic "NRO0" | 
| 0x4 | 0x4 | Version (always 0) | 
| 0x8 | 4 | Size (total NRO file size) | 
| 0xC | 0x4 | Flags (unused) | 
| 0x10 | 0x8 * 3 | SegmentHeader[3] {.text, .ro, .data} | 
| 0x28 | 0x4 | BssSize | 
| 0x2C | 0x4 | Reserved | 
| 0x30 | 0x20 | ModuleId | 
| 0x50 | 0x04 | DsoHandleOffset (unused) | 
| 0x54 | 0x04 | Reserved (unused) | 
| 0x58 | 0x8 * 3 | SegmentHeader[3] {.apiInfo, .dynstr, .dynsym} | 
SegmentHeader
| Offset | Size | Description | 
|---|---|---|
| 0x0 | 0x4 | MemoryOffset | 
| 0x4 | 0x4 | Size | 
ModuleId
Value of "build id" from ELF's GNU .note section. Contains variable sized digest, up to 32bytes.
Assets
This is an optional custom assets section for homebrew, this is located at file offset {NroHeader.size}. See also switch-tools for implementation.
The below offsets are relative to the beginning of the assets section (AssetHeader).
AssetHeader
| Offset | Size | Description | 
|---|---|---|
| 0x0 | 0x4 | Magic "ASET" | 
| 0x4 | 0x4 | Format version, currently 0. | 
| 0x8 | 0x10 | AssetSection icon. Used by the Homebrew Launcher. Like official icons, this is a 256x256 JPEG. | 
| 0x18 | 0x10 | AssetSection NACP. Used by the Homebrew Launcher. | 
| 0x28 | 0x10 | AssetSection romfs. Can be used by the application. | 
AssetSection
| Offset | Size | Description | 
|---|---|---|
| 0x0 | 0x8 | Offset | 
| 0x8 | 0x8 | Size, 0 indicates this section is empty. |