ExeFS or Executable Filesystem contains information related to the executable program, and is the part of the CXI format.
The ExeFS usually contains one or more of the following files:
Format
The ExeFS header is 0x200 bytes long and follows this simple structure:
START | SIZE | DESCRIPTION |
---|---|---|
0x00 | 0xa0 | File headers (10 headers maximum, 16 bytes each) |
0xa0 | 0x20 | Reserved |
0xc0 | 0x140 | File hashes (10 hashes maximum, 32 bytes each, one for each header) |
File hashes are stored in reverse order, i.e. the hash at offset 0x1E0 corresponds to the first ExeFS section.
File headers
There are a maximum of 10* file headers in the ExeFS format, which have the following structure:
START | SIZE | DESCRIPTION |
---|---|---|
0x0 | 0x8 | File name |
0x8 | 0x4 | File offset |
0xC | 0x4 | File size |
* The maximum number of ExeFS file headers, is disputable. With makerom indicating a maximum of 8 sections, and makecia indicating a maximum of 10. From a non-SDK point of view ExeFS header format can hold no more than 10 file headers within the currently define size of 0x200 bytes.
File offsets are non-inclusive of the header's size (0x200 bytes). Also, file headers which are not used are filled with all zeros.
File hashes
Each file header has a corresponding file hash, which is the SHA256 hash calculated over the entire file contents.