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^^
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;
};