The 3DSX format is an executable file-format designed for homebrew
applications on the 3DS.
The file is structured like this:
- Header
- Extended Header, if the header size field is greater than 32.
- Code relocation table header
- Rodata relocation table header
- Data relocation table header
- Code segment
- Rodata segment
- Data segment
- Code relocation table
- Rodata relocation table
- Data relocation table
- SMDH data, if there is an extended header.
- RomFS data, if there is an extended header.
| Offset | Size | Description |
|---|
| 0x0 | 4 | Magic (3DSX) |
| 0x4 | 2 | Header size |
| 0x6 | 2 | Relocation Header size |
| 0x8 | 4 | Format version |
| 0xC | 4 | Flags |
| 0x10 | 4 | Code segment size |
| 0x14 | 4 | Rodata segment size |
| 0x18 | 4 | Data segment size (including bss) |
| 0x1C | 4 | Bss segment size |
| Offset | Size | Description |
|---|
| 0x0 | 4 | SMDH offset |
| 0x4 | 4 | SMDH size |
| 0x8 | 4 | RomFS offset |
| Offset | Size | Description |
|---|
| 0x0 | 4 | Number of absolute relocations |
| 0x4 | 4 | Number of relative relocations |
Relocation
#
| Offset | Size | Description |
|---|
| 0x0 | 2 | Number of words to skip |
| 0x2 | 2 | Number of words to patch |