KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: sceNetUpnp Library
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Leute Tongue
Ich habe eine kleine Bitte an euch. Könnte mir jemand vielleicht die letzten fehlenden Funktionen der Library reversen?

Ich habe selbst schon angefangen, aber mein Assembler "Skill" ist noch nicht hochgenug für die anderen Funktionen.

Alles was ihr zum reversen braucht, habe ich euch hier hochgeladen.
( Die EBOOT gehört zu einem Spiel, das die Library benutzt. Einfach mal reinschauen. )

Das währe echt super von euch, wenn ihr mir helfen würdet Big Grin

Ich sage schonmal Danke im vorraus =)
Push für die Genesis competition 2011 Big Grin
Ich hab dir mal die Funktionen und die direkt aufgerufenen Unterroutinen "reversed" (ich würd eher sagen, dass ich es nur in pseudo-C umgeschrieben hab...). Die Routinen, die von Unterroutinen aufgerufen werden, hab ich nicht gemacht (wenns umbedingt sein muss, kann ich die auch noch machen).
Ich habs nach kürzester Zeit aufgegeben, die globalen Variablen oben aufzulisten^^

Code:
int dat_9A18[...];
int dat_92E4 = 0x00766E65;

int sub_000035BC(int arg0)
{
    if((dat_9A18[0x4C/4] & 0x1) != 0)
        return 0x80411603;
    
    dat_9A18[0x4C/4] |= 0x1;
    
    if(arg0 == 1)
        dat_9A18[0x4C/4] |= 0x0801;
    else
        dat_9A18[0x4C/4] &= 0xFFFF7FFF;
    
    dat_9A18[0x50/4] = 1;
    
    sceKernelSetEventFlag(dat_9A18[0x44/4], 2);
    
    return 0;
};

int sceNetUpnp_3432B2E5(void)
{
    if(sceKernelCheckThreadStack() < 0x07F0)
        return 0x80410005;
    
    if(!dat_9A00)
        return 0x80411601;
    
    return sub_000035BC(dat_9A00);
};

int sub_00003630(void)
{
    if(dat_9A18[0x18/4] >= 0)
        sceNetInetSocketAbort(dat_9A18[0x18/4]);
    
    sceKernelSetEventFlag(dat_9A18[0x44/4], 4);
    return 0;
};

int sceNetUpnp_3E32ED9E(void)
{
    if(sceKernelCheckThreadStack() < 0x07F0)
        return 0x80410005;
    
    if(!dat_9A00);
        return 0x80411601;
    
    return sub_00003630();
};

void sub_00003434(void)
{
    if(dat_9A18[0x4C/4] & 0x1 != 0)
    {
        if(dat_9A18[0x30/4] >= 0)
            sceNetInetSocketAbort(dat_9A18[0x30/4]);
        
        sceKernelSetEventFlag(dat_9A18[0x44/4], 4);
    };
    
    sceKernelSetEventFlag(dat_9A18[0x44/4], 1);
    
    sub_00005EB4();
    
    if(dat_9A18[0x40/4] != -1)
    {
        sceKernelWaitThreadEnd(dat_9A18[0x44/4], 0);
        sceKernelDeleteThread(dat_9A18[0x40/4]);
        sceNetFreeThreadInfo(dat_9A18[0x40/4]);
    };
    
    dat_9A18[0x40/4] = -1;
    
    if(dat_9A18[0x44/4] != -1);
    {
        sceKernelDeleteEventFlag(dat_9A18[0x44/4], dat_9A18[0x4C/4]);
        dat_9A18[0x44/4] = -1;
    };
    
    if(dat_9A18[0x4C/4] & 0x8 != 0)
    {
        sceKernelDeleteMutex(dat_9A18[0x48/4]);
        dat_9A18[0x48/4] = -1;
        dat_9A18[0x4C/4] &= 0xFFFFFFF7;
    };
    
    return;
};

int sceNetUpnp_540491EF(void)
{
    if(sceKernelCheckThreadStack() < 0x07F0)
        return 0x80410005;
    
    if(dat_9A00)
    {
        sub_00003434();
        dat_9A00 = 0;
    };
    
    return 0;
};

int sub_00002D80(int arg0, int arg1)
{
    char buf[0x9];
    
    sceNetMemset(&dat_AF40, 0, 36);
    sceNetMemset(&dat_9A18, 0, 5416);
    sceNetMemset(buf, 0, sizeof(buf));
    sceNetMemset(&dat_9A18, 0, 36); // What the hell? >.>
    
    int ret = sub_00003814("/CONFIG/NP", dat_92E4, buf, sizeof(buf));
    if(ret >= 0)
    {
        sceNetSprintf(dat_9A18, &dat_92E8, &dat_92F4, buf, &dat_92F8);
        
        dat_9A18[0x24/4] = arg0;
        dat_9A18[0x28/4] = arg1;
        dat_9A18[0x48/4] = -1;
        dat_9A18[0x34/4] = 0;
        dat_9A18[0x2C/4] = -1;
        dat_9A18[0x30/4] = -1;
        dat_9A18[0x40/4] = -1;
        dat_9A18[0x44/4] = -1;
        
        ret = sceKernelCreateEventFlag("SceNetUpnpEvf", 0, 0, NULL);
        if(ret >= 0)
        {
            dat_9A18[0x44/4] = ret;
            
            ret = sceKernelCreateMutex(&dat_9320, 512, 0, 0);
            if(ret >= 0)
            {
                dat_9A18[0x48/4] = ret;
                dat_9A18[0x4C/4] |= 0x8
                
                ret = sceKernelCreateThread(&dat_9330, func_4DD4, dat_9A18[0x28/4], dat_9A18[0x24/4], NULL);
                if(ret >= 0)
                {
                    dat_9A18[0x40/4] = ret;
                    
                    int *ptr = dat_9A18;
                    ret = sceKernelStartThread(ret, 4, &ptr);
                    if(ret >= 0)
                    {
                        ret = sub_00005E5C();
                        if(ret >= 0)
                            return 0;
                    };
                };
            };
        };
    };
    
    sub_00005EB4();
    
    if(dat_9A18[0x40/4] != -1)
    {
        sceKernelWaitThread(dat_9A18[0x44/4], 0);
        sceKernelDeleteThread(dat_9A18[0x40/4]);
        sceKernelFreeThreadInfo(dat_9A18[0x40/4]);
        
        dat_9A18[0x40/4] = -1;
    };
    
    if(dat_9A18[0x44/4] != -1)
    {
        sceKernelDeleteEventFlag(dat_9A18[0x4C/4]);
        dat_9A18[0x44/4] = -1;
    };
    
    if((dat_9A18[0x4C/4] & 0x8) != 0)
    {
        sceKernelDeleteMutex(dat_9A18[0x48/4]);
        
        dat_9A18[0x48/4] = -1;
        dat_9A18[0x4C/4] &= 0xFFFFFFF7;
    };
    
    return ret;
};

int sceNetUpnp_E24220B5(int arg0, int arg1)
{
    if(sceKernelCheckThreadStack() < 0x07F0)
        return 0x80410005;
    
    if(dat_9A00 <= 0)
    {
        int ret = sub_00002D80(arg0, arg1);
        if(ret >= 0)
            dat_9A00 = 1;
        
        return ret;
    };
    
    return 0x80411602;
};



mfg, HacKmaN

Danke Hackman Big Grin
Ich war schon in vielen Szenen, aber du bist der erste Pro, der den Newbies hilft xD
Referenz-URLs