NPDM: Difference between revisions
Access descriptors...this is basically 3ds, but with type at bottom instead of top |
No edit summary |
||
| Line 12: | Line 12: | ||
|- | |- | ||
| 0x80 | | 0x80 | ||
| <Varies> | | <Varies> | ||
| ACID | | ACID | ||
| Line 24: | Line 20: | ||
|} | |} | ||
=META= | = META = | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
| Line 33: | Line 29: | ||
| 0x0 | | 0x0 | ||
| 0x4 | | 0x4 | ||
| | | Magic "META". | ||
|- | |- | ||
| 0x20 | | 0x20 | ||
| ? | | ? | ||
| | | Title name | ||
|- | |- | ||
| 0x70 | | 0x70 | ||
| Line 58: | Line 54: | ||
Switch version of 3DS "System Control Info"? | Switch version of 3DS "System Control Info"? | ||
=ACID= | = ACID = | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
| Line 65: | Line 61: | ||
! Description | ! Description | ||
|- | |- | ||
| | | 0 | ||
| | | 0x100 | ||
| | | RSA-2048 signature | ||
|- | |- | ||
| | | 0x100 | ||
| | | 0x100 | ||
| | | RSA-2048 public key | ||
|- | |- | ||
| | | 0x200 | ||
| 0x4 | | 0x4 | ||
| | | Magic "ACID". | ||
|- | |- | ||
| | | 0x204 | ||
| | | 0x8 | ||
| | | Zeroes | ||
|- | |- | ||
| | | 0x20C | ||
| | | 0x4 | ||
| | | Format version? (1) | ||
|- | |- | ||
| | | 0x210 | ||
| | | 0x8 | ||
| | | Title id | ||
|- | |- | ||
| 0x218 | |||
| 0x8 | |||
| Title id again | |||
|- | |- | ||
| | | 0x220 | ||
| 0x4 | | 0x4 | ||
| | | FS Access Control offset | ||
|- | |- | ||
| 0x24 | |||
| 0x4 | | 0x4 | ||
| FS Access Control size | |||
|- | |||
| 0x28 | | 0x28 | ||
| | | 0x4 | ||
| Service Access Control offset | |||
|- | |- | ||
| 0x2C | | 0x2C | ||
| 0x4 | | 0x4 | ||
| | | Service Access Control size | ||
|- | |- | ||
| 0x30 | | 0x30 | ||
| | | 4 | ||
| | | Kernel Access Control offset | ||
|- | |- | ||
| | | 0x34 | ||
| | | 4 | ||
| | | Kernel Access Control size | ||
|- | |- | ||
| | | 0x38 | ||
| | | 0x8 | ||
| | | Padding | ||
|} | |} | ||
= ACI0 = | |||
Looks like an old crappy version of ACID. It has the guessed version field 0 instead of 1. | |||
= Service Access Control = | |||
=Service Access Control= | |||
This is a list of [[Services_API|service]]-name strings which the title has access to, with the following structure: | This is a list of [[Services_API|service]]-name strings which the title has access to, with the following structure: | ||
+0: control_byte | +0: control_byte | ||
| Line 138: | Line 132: | ||
The service string can contain a wildcard <code>*</code> character. | The service string can contain a wildcard <code>*</code> character. | ||
=Access Descriptors= | = Access Descriptors = | ||
Like the 3DS, the switch has a number of kernel capability descriptors. Unlike 3ds, where descriptors were identified by pattern 11..10 in high bits, on switch descriptors are identified by pattern 01..11 in low bits. | Like the 3DS, the switch has a number of kernel capability descriptors. Unlike 3ds, where descriptors were identified by pattern 11..10 in high bits, on switch descriptors are identified by pattern 01..11 in low bits. | ||
Revision as of 00:07, 29 June 2017
This is the Switch equivalent of 3DS exheader. This is the file with extension ".npdm" in {Switch ExeFS}. The size of this file varies.
| Offset | Size | Description |
|---|---|---|
| 0x0 | 0x80 | META |
| 0x80 | <Varies> | ACID |
| <See META> | <See META> | ACI0 |
META
| Offset | Size | Description |
|---|---|---|
| 0x0 | 0x4 | Magic "META". |
| 0x20 | ? | Title name |
| 0x70 | 0x4 | Absolute offset for ACI0. |
| 0x74 | 0x4 | Size of ACI0. |
| 0x78 | 0x4 | Absolute offset of the RSA signature. |
| 0x7C | 0x4 | Size used with the above offset. Offset+size is normally ACI0_start-8. |
Switch version of 3DS "System Control Info"?
ACID
| Offset | Size | Description |
|---|---|---|
| 0 | 0x100 | RSA-2048 signature |
| 0x100 | 0x100 | RSA-2048 public key |
| 0x200 | 0x4 | Magic "ACID". |
| 0x204 | 0x8 | Zeroes |
| 0x20C | 0x4 | Format version? (1) |
| 0x210 | 0x8 | Title id |
| 0x218 | 0x8 | Title id again |
| 0x220 | 0x4 | FS Access Control offset |
| 0x24 | 0x4 | FS Access Control size |
| 0x28 | 0x4 | Service Access Control offset |
| 0x2C | 0x4 | Service Access Control size |
| 0x30 | 4 | Kernel Access Control offset |
| 0x34 | 4 | Kernel Access Control size |
| 0x38 | 0x8 | Padding |
ACI0
Looks like an old crappy version of ACID. It has the guessed version field 0 instead of 1.
Service Access Control
This is a list of service-name strings which the title has access to, with the following structure:
+0: control_byte
+1: {service-name without nul-terminator}
Bitmask 0x0F in control_byte is the {length of the service-name without nul-terminator} - 1.
Bitmask 0x80 in control_byte means service is allowed to be registered.
The service string can contain a wildcard * character.
Access Descriptors
Like the 3DS, the switch has a number of kernel capability descriptors. Unlike 3ds, where descriptors were identified by pattern 11..10 in high bits, on switch descriptors are identified by pattern 01..11 in low bits.
| Pattern of bits 20-31 | Type | Fields |
|---|---|---|
0bxxxxxxxx0111?
|
Interrupt info? | ? |
0bxxxxxxx01111
|
System call mask | Bits 29-31: System call mask table index; Bits 5-28: mask |
0bxxxxx0111111?
|
Kernel release version? | ? |
0bxxxx01111111?
|
Handle table size? | ? |
0bxxx011111111?
|
Kernel flags? | ? |
0bx0111111111?
|
Map address range? | ? |
0b011111111111?
|
Map memory page? | ? |
FS Permissions
| Bit | Description |
|---|---|
| 0 | MountContent* is accessible when set. |
| 3 | This is only bit set for ShopN in the permissions-u32. |