ExeFS
ExeFS or Executable Filesystem, is the part of the CXI, which is executed when the CXI is run. And contains the compiled ARM Code, Banner, Icon and Logo(the logo is not a necessary part of ExeFS). The ExeFS for all retail CXI is encrypted.
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. .