SFO
Contents |
Description
SFO / param.sfo is used for System Information and Paramaters for games and applications on PlayStation Consoles, such as the PlayStation Portable, PlayStation 3, PlayStation Vita, and PlayStation 4. for storing metadata about a given program or applications - it is not used on the PlayStation 5, where they switched to using a JSON file instead, and it is also not used in PlayStation Mobile, or on older consoles, such as the PS2 or PS1-
Data Structure
the file is a binary format. and is made from very common primitives; it stores key-value pairs, consisting of a header, a name table, and a value table;
File header
| Data | Offset | Type | Data |
|---|---|---|---|
| Magic | 0x00 | Int32LE | Always \0PSF |
| Version | 0x04 | Int32LE | 0x1 or 0x101 |
| KeyTable | 0x08 | Int32LE | Absolute position of Key Table |
| ValueTable | 0x0C | Int32LE | Absolute position of Value Table |
| Count | 0x10 | Int32LE | Total number of entries in the param file |
directly after the header, is a list of entries, there are Header.Count of these; it always begins at 0x14 ..
Entry list
| Data | Offset | Type | Data |
|---|---|---|---|
| Name Offset | 0x00 | Int16LE | Position of C-Style string containing key name; Header.KeyTable + Name Offset |
| Align | 0x02 | Int8 | Number of bytes to align each value to, usually 4 bytes. |
| Type | 0x03 | Int8 | Type of Value; Either BINARY = 0, STRING = 2, INT32LE = 4 |
| Size | 0x04 | Int32LE | Size of the value in bytes; |
| TotalSize | 0x08 | Int32LE | Total reserved size of value buffer, |
| Data Offset | 0x0C | Depends on type; Either BINARY, STRING or INT32LE | Position of Value; Header.ValueTable + Data Offset |
each of the values in the value table are padded out to atleast 4 bytes (or whatever the 'align' value is) however the keys are packed together separated only by nullbytes.
See Also
- PARAM.SFO - PSP Developer Wiki
- PARAM.SFO - Vita Developer Wiki
- PARAM.SFO - PS3 Developer Wiki
- PARAM.SFO - PS4 Developer Wiki