ExeFS
ExeFS or Executable Filesystem, is the part of the CXI, which is executed when the CXI is run. And contains:
AFTER DECRYPTION
The ExeFS header is 0x200 bytes long and follows this structure:
| START | SIZE | DESCRIPTION |
|---|---|---|
| 0x00 | 0x05 | Always '.code' |
| 0x05 | 0x03 | Reserved |
| 0x08 | 0x04 | ARM Code Offset* |
| 0x0C | 0x04 | ARM Code Length |
| 0x10 | 0x06 | Always 'banner' |
| 0x16 | 0x02 | Reserved |
| 0x18 | 0x04 | Banner Offset* |
| 0x1C | 0x04 | Banner Length |
| 0x20 | 0x04 | Always 'icon' |
| 0x24 | 0x04 | Reserved |
| 0x28 | 0x04 | Icon Offset |
| 0x2C | 0x04 | Icon Length |
| 0x30 | 0x04 | Always 'logo'** |
| 0x34 | 0x04 | Reserved |
| 0x38 | 0x04 | Logo Offset* ** |
| 0x3C | 0x04 | Logo Length** |
| 0x40 | 0x140 | Reserved |
| 0x180 | 0x20 | Logo Hash** |
| 0x1A0 | 0x20 | Icon Hash |
| 0x1C0 | 0x20 | Banner Hash |
| 0x1E0 | 0x20 | ARM Code Hash |
* Offsets are non-inclusive of the header's size(0x200 bytes).
** The 'Logo' is not a compulsory part of ExeFS, so an ExeFS without a 'Logo', will have these entries of the header filled with zeros. .