SILKPADD
Structure
Header
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00000000 53 49 4C 4B 50 41 44 44 00 00 0C 00 00 00 00 00 SILKPADD........
Offset | Length | Example | Name | Notes |
---|---|---|---|---|
0x00 | 0x04 | 53 49 4C 4B | silk_signature | By now this 2 are represented in wiki separated just incase the format allows for other variants, like SILKFLAT, SILKCRAP, or any other names, but maybe the 8 bytes are processed together |
0x04 | 0x04 | 50 41 44 44 | padd_signature | |
0x08 | 0x02 | 00 00 | unknown | Always zeroes |
0x0A | 0x02 | 0C 00 | entry_amount | Number of entries in the file (in little endian) |
0x0C | 0x04 | 00 00 00 00 | padding ? | Always zeroes |
Index table
At offset 0x10 starts the index table, every entry has 0xC byes. All values in the table are in little endian. There is no gap or padding at the end of this index table
Example of the first entry in CEHtmlApi.bin
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00000010 B9 0B 00 00 A0 00 00 00 9B 00 00 00 ¹... ...›...
Offset | Length | Example | Name | Notes |
---|---|---|---|---|
0x00 | 0x04 | B9 0B 00 00 | entry_id | And unique ID for the entry, used by the web browser to identify and to access the data |
0x04 | 0x04 | A0 00 00 00 | data_offset | Absolute offset of the data (either a string or a file) |
0x08 | 0x04 | 9B 00 00 00 | data_lenght | Size of the data |
Data table
At this point is unknown if the PS3 parses every one of the datas in a specific way based on his type because the IDs of them are hardcoded in the .sprx (so the sprx knows well what to do with them defore reading them), or the data is identifyed by reading the first bytes. Anyway, to manage the datas in PC is needed to read the first bytes because in PC we are not using a database with all the IDs (so we dont know what to do with them before reading them). This identification method is what is explained here in wiki
Data types
All data entries starts with 4 bytes that indicates the length of the text string that comes inmediatly after, so the first bytes that needs to be processed are the 4 bytes + the lenght indicated by that 4 bytes
Offset | Length | Example | Name | Notes |
---|---|---|---|---|
0x00 | 0x04 | 00 00 00 05 | text_string_lenght | |
0x04 | varies | 54 65 73 74 00 | text_string | This string indicates the data entry type |
Text string
This is the most basic example, the entry can be identifyed as a "text string" because is null terminated (note how the text_string_lenght=5 includes the null byte 0x00 at the end)
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000 00 00 00 05 54 65 73 74 00 ....Test.
|