Difference between revisions of "NRO"
Jump to navigation
Jump to search
(Based on the NSO page.) |
|||
Line 32: | Line 32: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
− | | | + | | 0x4 |
| Magic "NRO0" | | Magic "NRO0" | ||
|- | |- | ||
| 0x4 | | 0x4 | ||
− | | | + | | 0x4 |
| ? | | ? | ||
|- | |- | ||
| 0x8 | | 0x8 | ||
| 4 | | 4 | ||
− | | Total NRO filesize | + | | size (Total NRO filesize) |
|- | |- | ||
| 0xC | | 0xC | ||
− | | | + | | 0x4 |
| ? | | ? | ||
|- | |- | ||
Line 80: | Line 80: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
− | | | + | | 0x4 |
| FileOffset | | FileOffset | ||
|- | |- | ||
| 0x4 | | 0x4 | ||
− | | | + | | 0x4 |
+ | | Size | ||
+ | |} | ||
+ | |||
+ | =Assets= | ||
+ | This is an optional custom assets section for homebrew, this is located at file offset {NroHeader.size}. See also [https://github.com/switchbrew/switch-tools switch-tools] for implementation. | ||
+ | |||
+ | The below offsets are relative to the beginning of the assets section (AssetHeader). | ||
+ | |||
+ | == AssetHeader == | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x4 | ||
+ | | Magic "ASET" | ||
+ | |- | ||
+ | | 0x4 | ||
+ | | 0x4 | ||
+ | | Format version, currently 0. | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | AssetSection icon. Used by the Homebrew Launcher. Like official icons, this is a 256x256 JPEG. | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | AssetSection [[Control.nacp|nacp]]. Used by the Homebrew Launcher. | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | AssetSection romfs. Can be used by the application. | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | == AssetSection == | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x4 | ||
+ | | Offset | ||
+ | |- | ||
+ | | 0x4 | ||
+ | | 0x4 | ||
| Size | | Size | ||
|} | |} |
Revision as of 20:51, 18 February 2018
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):
NRO Start
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | Unused |
0x4 | 0x4 | MOD0 offset |
0x8 | 0x8 | Padding |
NRO Header
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | Magic "NRO0" |
0x4 | 0x4 | ? |
0x8 | 4 | size (Total NRO filesize) |
0xC | 0x4 | ? |
0x10 | 0x8 * 3 | SegmentHeader[3] |
0x28 | 0x4 | bssSize |
0x2C | 0x4 | ? |
0x30 | 0x20 | Value of "build id" from ELF's GNU .note section. Contains variable sized digest, up to 32bytes. |
0x50 | 0x10 | Padding |
0x60 | 0x10 | ? |
SegmentHeader
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | FileOffset |
0x4 | 0x4 | Size |
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 | 0x8 | AssetSection icon. Used by the Homebrew Launcher. Like official icons, this is a 256x256 JPEG. |
0x10 | 0x8 | AssetSection nacp. Used by the Homebrew Launcher. |
0x18 | 0x8 | AssetSection romfs. Can be used by the application. |
AssetSection
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | Offset |
0x4 | 0x4 | Size |