SILKPADD

From PS3 Developer wiki
Revision as of 13:12, 4 October 2018 by Sandungas (talk | contribs) (wip)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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.