¿Cual es la estructura de los archvios param.sfo?

Busco la estructura de los archivos param.sfo es decir algo asi: http://www.free60.org/XContent
hay un programita que se llama Ps3 SFO editor. igual abriendo un SFO con un editor hex y trasteando con el programita puedes interpretar algo
Gracias, era la estructura si estaba por ahi no son muy complejos:

MGS: PW psp
PSFh" .$9(F0Q4`8o@vD|APP_VERBOOTABLECATEGORYDISC_IDDISC_NUMBERDISC_TOTALDISC_VERSIONHRKGMP_VERPARENTAL_LEVELPSP_SYSTEM_VERREGIONTITLEUSE_USB01.00UGULES013721.016.20METAL GEAR SOLID PEACE WALKER


Uncharted 2
PSF"6 E$T,_0l4r6{)4".4APP_VERBOOTABLECATEGORYLICENSENP_COMMUNICATION_IDPARENTAL_LEVELPS3_SYSTEM_VERRESOLUTIONSOUND_FORMATTITLETITLE_00TITLE_03TITLE_05TITLE_09TITLE_IDVERSION01.00DGLibrary programs Sony Computer Entertainment Inc. Licensed for play on the PLAYSTATION3 Computer Entertainment System or authorized PLAYSTATION3 format systems. For full terms and conditions see the user's manual. This product is authorized and produced under license from Sony Computer Entertainment Inc. Use is subject to the copyright laws and the terms and conditions of the user's license.NPWR00462_0002.8000?Uncharted 2: Among ThievesUncharted 2: El reino de los ladronesUncharted 2: Il covo dei ladriUncharted 2:   BCES0075701.00


Estos son los caracteres "imprimibles" no parece demasiado complejo, cuando dumpee algun juego mas de ps3 ire sacando la estructura, al menos la parte que me interesa
diossss ... pero estás loco!!! como que dumpeando los caracteres imprimibles ..
quieres el source del loader en C o en C# .. elige lenguaje y te lo paso
La verdad que lo que estaba haciendo es algo parecido a lo que has hecho tu, solo que en consola y para linux, solo queria leer el param.sfo no estaba usando tu codigo, si lo tienes en C, pues mejor que nunca he tocado C# y me ahorras ir mirando donde se encuentra cada cosa, de momento solo me intersa la posicion ( o la foma de calcularla) donde se encuentra el nombre del juego en español y el ID.

PD: Lo de los caracteres "imprimibles" era para que vierais ( o mejor dicho vieran, en linux es facil hacerlo " cat PARAM.SFO | tr -dc '{:print:}' ") mas o menos lo que contiene el param.sfo
Empezamos con la cabecera del archivo:

typedef struct
{
unsigned char magic[4]; // ID
unsigned char rfu000[4];
unsigned int label_ptr; // Pointer to Labels Section
unsigned int data_ptr; // Pointer to Data Section
unsigned int nsects; // Section Numbers
} PsfHdr;

nSects te dice cuantas secciones tiene el archivo, así que después de esta cabecera encuentras n veces esta estructura

typedef struct
{
unsigned short label_off;
unsigned char rfu001;
unsigned char data_type;
unsigned int datafield_used;
unsigned int datafield_size;
unsigned int data_off;
} PsfSec;

En la cabecera tienes la dirección de los label_ptr, que te indica la dirección dentro del archivo donde empieza el buffer de los Labels (tittle, tittleId, category, etc etc) y en data_ptr tienes la dirección donde están los datos.

Total, tienes que recorrer todas las secciones, ahí te dice cada una donde está su label y donde está su data, en data_Type te indica si es de tipo int, string .. y en datafield_size tienes el tamaño del buffer cuando es un string.

está facil ... no?
Ok gracias, con esto me aclaro, a ver si le hecho un vistazo mas detenidamente y lo paso a bash, luego subire el codigo
Anda toma .. aqui tienes source
http://download.ofcode.com/SfoLoader.zip [sonrisa]

Usage:
    sfoLoadFile("PARAM.SFO");

    if(sfoContains("TITLE"))
        {
        char *name = sfoGetString("TITLE");
        printf("TITLE = %s \n",name);
        }

    if(sfoContains("PARENTAL_LEVEL"))
        {
        int level = sfoGetInt("PARENTAL_LEVEL");
        printf("PARENTAL_LEVEL = %d \n",level);
        }

    if(sfoContains("PSP_SYSTEM_VER"))
        {
        char *region = sfoGetString("PSP_SYSTEM_VER");
        printf("PSP_SYSTEM_VER = %s \n",region);
        }
7 respuestas