Last active
February 16, 2021 08:55
-
-
Save sajattack/d7d68c9e1ea5176cc9b46944e717fa67 to your computer and use it in GitHub Desktop.
Ghidra export of my PSP leda RE project
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
bool is_elf(int *param_1) | |
{ | |
if (*param_1 != 0x464c457f) { | |
return false; | |
} | |
return *(short *)(param_1 + 4) == 2; | |
} | |
int more_elf_junk(int *param_1) | |
{ | |
undefined uVar1; | |
int iVar2; | |
uint uVar3; | |
if (*param_1 == 0x464c457f) { | |
if (*(ushort *)(param_1 + 0xc) != 0) { | |
uVar3 = 0; | |
iVar2 = (int)param_1 + param_1[8]; | |
if (*(ushort *)((int)param_1 + 0x32) == 0) goto LAB_000000bc; | |
uVar1 = *(undefined *)((int)param_1 + 0x2f); | |
while( true ) { | |
while( true ) { | |
uVar3 = uVar3 + 1; | |
iVar2 = iVar2 + (uint)CONCAT11(uVar1,*(undefined *)((int)param_1 + 0x2e)); | |
if (uVar3 == *(ushort *)(param_1 + 0xc)) { | |
return 0; | |
} | |
if (*(ushort *)((int)param_1 + 0x32) == uVar3) break; | |
uVar1 = *(undefined *)((int)param_1 + 0x2f); | |
} | |
LAB_000000bc: | |
if (*(int *)(iVar2 + 4) == 3) break; | |
uVar1 = *(undefined *)((int)param_1 + 0x2f); | |
} | |
return *(int *)(iVar2 + 0x10) + (int)param_1; | |
} | |
} | |
return 0; | |
} | |
bool find_return(int *param_1) | |
{ | |
bool bVar1; | |
bVar1 = true; | |
if (*param_1 == 0x3e00008) { | |
bVar1 = false; | |
if (param_1[1] != 0) { | |
return param_1[1] != 0x3cc; | |
} | |
} | |
return bVar1; | |
} | |
undefined4 module_stop(void) | |
{ | |
return 0; | |
} | |
undefined4 module_start(void) | |
{ | |
int iVar1; | |
iVar1 = sceKernelInitApitype(); | |
if (iVar1 != 0x141) { | |
return 1; | |
} | |
Kprintf("LEDA - Legacy Software Loader, version 0.1, by Dark_AleX\n"); | |
// 0xce8 is the address of remap_multiple_nids | |
sctrlHENRegisterHomebrewLoader(remap_multiple_nids); | |
return 0; | |
} | |
void kubridge_init(void) | |
{ | |
kuKernelLoadModule((char *)0x0,0,(SceKernelLMOption *)0x0); | |
kuKernelLoadModuleWithApitype2(0,(char *)0x0,0,(SceKernelLMOption *)0x0); | |
kuKernelInitApitype(); | |
kuKernelInitFileName((char *)0x0); | |
kuKernelBootFrom(); | |
kuKernelInitKeyConfig(); | |
kuKernelGetUserLevel(); | |
kuKernelSetDdrMemoryProtection((void *)0x0,0,0); | |
kuKernelGetModel(); | |
return; | |
} | |
SceOff seek_stuff(SceUID fd,int whence,SceOff param_3,SceOff offset) | |
{ | |
ulonglong uVar1; | |
ulonglong curpos; | |
curpos = sceIoLseek(fd,offset,whence); | |
uVar1 = curpos >> 0x20; | |
curpos._0_4_ = (undefined4)curpos; | |
if (((DAT_00003dcc != 0) && (param_3 == 0)) && ((int)((ulonglong)offset >> 0x20) == 2)) { | |
curpos = (ulonglong)DAT_00003dcc << 0x20; | |
} | |
DAT_00003dd0 = (int)uVar1; | |
DAT_00003dd4 = (undefined4)curpos; | |
return (SceOff)curpos; | |
} | |
undefined * read_scemoduleinfo_imports(int param_1,uint param_2,char *param_3) | |
{ | |
ushort uVar1; | |
int iVar2; | |
uint uVar3; | |
uVar1 = *(ushort *)(param_1 + 0x30); | |
if (uVar1 != 0) { | |
uVar3 = 0; | |
do { | |
uVar3 = uVar3 + 1; | |
iVar2 = strcmp(param_3 + *(int *)param_2,".rodata.sceModuleInfo"); | |
if (iVar2 == 0) { | |
if (*(short *)(param_1 + *(int *)(param_2 + 0x10)) == 0) { | |
DAT_00003dc8 = 1; | |
} | |
else { | |
*(short *)(param_1 + *(int *)(param_2 + 0x10)) = 0; | |
} | |
return (undefined *)(param_1 + *(int *)(param_2 + 0x10) + 4); | |
} | |
param_2 = param_2 + *(ushort *)(param_1 + 0x2e); | |
} while (uVar3 != uVar1); | |
} | |
return &DAT_000035d8; | |
} | |
undefined4 | |
create_threads(undefined4 param_1,void *param_2,undefined4 param_3,undefined4 param_4,int param_5, | |
undefined4 param_6) | |
{ | |
uint uVar1; | |
SceUID SVar2; | |
undefined4 uVar3; | |
uVar1 = set_k1(0); | |
SVar2 = sceKernelGetModuleIdByAddress(param_2); | |
if ((SVar2 == DAT_00003de4) && (-1 < param_5)) { | |
uVar3 = sceKernelCreateThread | |
(param_1,(uint)param_2 | 0x80000000,param_3,param_4,param_5,param_6); | |
set_k1(uVar1); | |
return uVar3; | |
} | |
set_k1(uVar1); | |
uVar3 = sceKernelCreateThread(param_1,param_2,param_3,param_4,param_5,param_6); | |
return uVar3; | |
} | |
char * get_next_modname(char *param_1) | |
{ | |
SceModule *pSVar1; | |
int iVar2; | |
char **ppcVar3; | |
int iVar4; | |
void *pvVar5; | |
uint uVar6; | |
pSVar1 = sceKernelFindModuleByName("sceSystemMemoryManager"); | |
if (pSVar1 != (SceModule *)0x0) { | |
uVar6 = pSVar1->ent_size; | |
while( true ) { | |
pvVar5 = pSVar1->ent_top; | |
if ((int)uVar6 < 1) { | |
pSVar1 = (SceModule *)pSVar1->next; | |
} | |
else { | |
iVar4 = 0; | |
do { | |
ppcVar3 = (char **)((int)pvVar5 + iVar4); | |
iVar2 = strcmp(*ppcVar3,param_1); | |
if (iVar2 == 0) { | |
return pSVar1->modname; | |
} | |
iVar4 = iVar4 + (uint)*(byte *)(ppcVar3 + 2) * 4; | |
} while (iVar4 < (int)uVar6); | |
pSVar1 = (SceModule *)pSVar1->next; | |
} | |
if (pSVar1 == (SceModule *)0x0) break; | |
uVar6 = pSVar1->ent_size; | |
} | |
} | |
return (char *)0x0; | |
} | |
undefined4 find_function(char *param_1,char *param_2,uint param_3) | |
{ | |
u32 *puVar1; | |
u32 uVar2; | |
SceModule *pSVar3; | |
uint uVar4; | |
int iVar5; | |
u32 *puVar6; | |
int iVar7; | |
undefined4 *puVar8; | |
char **ppcVar9; | |
int iVar10; | |
uint uVar11; | |
void *pvVar12; | |
uVar2 = sctrlHENFindFunction(param_1,param_2,param_3); | |
if (uVar2 != 0) { | |
pSVar3 = sceKernelFindModuleByName(param_1); | |
uVar11 = pSVar3->ent_size; | |
pvVar12 = pSVar3->ent_top; | |
if (0 < (int)uVar11) { | |
iVar10 = 0; | |
do { | |
ppcVar9 = (char **)((int)pvVar12 + iVar10); | |
if (param_2 == (char *)0x0) { | |
LAB_00000634: | |
puVar8 = (undefined4 *)ppcVar9[3]; | |
if ((*(ushort *)((int)ppcVar9 + 10) != 0) && | |
(iVar5 = (uint)*(ushort *)((int)ppcVar9 + 10) + (uint)*(byte *)((int)ppcVar9 + 9), | |
iVar5 != 0)) { | |
puVar6 = puVar8 + iVar5; | |
if (uVar2 == *puVar6) { | |
return *puVar8; | |
} | |
iVar7 = 0; | |
while (iVar7 = iVar7 + 1, iVar5 != iVar7) { | |
puVar1 = puVar6 + 1; | |
puVar6 = puVar6 + 1; | |
if (uVar2 == *puVar1) { | |
return puVar8[iVar7]; | |
} | |
} | |
} | |
uVar4 = (uint)*(byte *)(ppcVar9 + 2); | |
} | |
else { | |
if (*ppcVar9 == (char *)0x0) { | |
uVar4 = (uint)*(byte *)(ppcVar9 + 2); | |
} | |
else { | |
iVar5 = strcmp(*ppcVar9,param_2); | |
if (iVar5 == 0) goto LAB_00000634; | |
uVar4 = (uint)*(byte *)(ppcVar9 + 2); | |
} | |
} | |
iVar10 = iVar10 + uVar4 * 4; | |
} while (iVar10 < (int)uVar11); | |
} | |
} | |
return 0; | |
} | |
uint ** FUN_000006dc(char *param_1) | |
{ | |
SceModule *pSVar1; | |
uint **ppuVar2; | |
uint uVar3; | |
SceModule *pSVar4; | |
SceUID blockid; | |
uint *puVar5; | |
uint *puVar6; | |
uint *puVar7; | |
uint **ppuVar8; | |
uVar3 = set_k1(0); | |
pSVar4 = sceKernelFindModuleByName(param_1); | |
if (pSVar4 == (SceModule *)0x0) { | |
set_k1(uVar3); | |
return (uint **)0x0; | |
} | |
if (DAT_00003dd8 == (uint **)0x0) { | |
blockid = sceKernelAllocPartitionMemory(2,(int)"FindModuleByNameUser",1,(void *)0xa0); | |
if (-1 < blockid) { | |
DAT_00003dd8 = (uint **)sceKernelGetBlockHeadAddr(blockid); | |
} | |
if (DAT_00003dd8 == (uint **)0x0) goto LAB_00000758; | |
} | |
pSVar1 = pSVar4 + 1; | |
ppuVar8 = DAT_00003dd8; | |
do { | |
ppuVar2 = &pSVar4->next; | |
puVar5 = *(uint **)&pSVar4->attribute; | |
puVar6 = *(uint **)pSVar4->modname; | |
puVar7 = *(uint **)(pSVar4->modname + 4); | |
pSVar4 = (SceModule *)(pSVar4->modname + 8); | |
*ppuVar8 = *ppuVar2; | |
ppuVar8[1] = puVar5; | |
ppuVar8[2] = puVar6; | |
ppuVar8[3] = puVar7; | |
ppuVar8 = ppuVar8 + 4; | |
} while (pSVar4 != (SceModule *)&pSVar1->attribute); | |
LAB_00000758: | |
set_k1(uVar3); | |
return DAT_00003dd8; | |
} | |
SceUID load_modules(char *param_1,SceKernelLMOption *param_2) | |
{ | |
uint uVar1; | |
int iVar2; | |
SceUID SVar3; | |
uVar1 = set_k1(0); | |
iVar2 = strcmp(param_1,"flash0:/kd/semawm.prx"); | |
if (iVar2 == 0) { | |
SVar3 = sceKernelLoadModule((int)"flash0:/kd/chkreg.prx",(SceKernelLMOption *)0x0); | |
if (-1 < SVar3) { | |
sceKernelStartModule(SVar3,0,(void *)0x0,(int *)0x0,(SceKernelSMOption *)0x0); | |
} | |
SVar3 = sceKernelLoadModule((int)"flash0:/kd/npdrm.prx",(SceKernelLMOption *)0x0); | |
if (-1 < SVar3) { | |
sceKernelStartModule(SVar3,0,(void *)0x0,(int *)0x0,(SceKernelSMOption *)0x0); | |
} | |
} | |
else { | |
iVar2 = strcmp(param_1,"flash0:/kd/audiocodec.prx"); | |
if (iVar2 == 0) { | |
param_1 = "flash0:/kd/audiocodec_260.prx"; | |
} | |
else { | |
iVar2 = strcmp(param_1,"flash0:/kd/videocodec.prx"); | |
if (iVar2 == 0) { | |
param_1 = "flash0:/kd/videocodec_260.prx"; | |
} | |
} | |
} | |
SVar3 = sceKernelLoadModule((int)param_1,param_2); | |
set_k1(uVar1); | |
return SVar3; | |
} | |
int read_controller(SceCtrlData *param_1,int param_2) | |
{ | |
uint uVar1; | |
int iVar2; | |
uVar1 = set_k1(0); | |
iVar2 = sceCtrlPeekBufferPositive(param_1,param_2); | |
set_k1(uVar1); | |
return iVar2; | |
} | |
undefined4 invalidate_icache(void) | |
{ | |
uint uVar1; | |
uVar1 = set_k1(0); | |
sceKernelIcacheInvalidateAll(); | |
set_k1(uVar1); | |
return 0; | |
} | |
undefined4 set_brightness(int param_1,int param_2) | |
{ | |
uint uVar1; | |
uVar1 = set_k1(0); | |
sceDisplaySetBrightness(param_1,param_2); | |
set_k1(uVar1); | |
return 0; | |
} | |
int set_led(int param_1,int param_2) | |
{ | |
uint uVar1; | |
int iVar2; | |
uVar1 = set_k1(0); | |
iVar2 = sceSysconCtrlLED(param_1,param_2); | |
set_k1(uVar1); | |
return iVar2; | |
} | |
bool does_it_exist(char *szMod,char *szLib,u32 nid) | |
{ | |
u32 uVar1; | |
int iVar2; | |
uVar1 = sctrlHENFindFunction(szMod,szLib,nid); | |
if (uVar1 == 0) { | |
return false; | |
} | |
iVar2 = sceKernelQuerySystemCall(uVar1); | |
return iVar2 != 0; | |
} | |
char * get_nid_addr(char *param_1,char *param_2,int param_3) | |
{ | |
byte bVar1; | |
SceModule *pSVar2; | |
int iVar3; | |
int iVar4; | |
code *pcVar5; | |
char *pcVar6; | |
char **ppcVar7; | |
uint uVar8; | |
uint uVar9; | |
int iVar10; | |
char **ppcVar11; | |
pSVar2 = sceKernelFindModuleByName(param_1); | |
if ((pSVar2 != (SceModule *)0x0) && (iVar3 = sceKernelFindModuleByUID(pSVar2->modid), iVar3 != 0)) | |
{ | |
iVar10 = *(int *)(iVar3 + 0x4c); | |
ppcVar11 = *(char ***)(iVar3 + 0x48); | |
if (0 < iVar10) { | |
iVar3 = 0; | |
ppcVar7 = ppcVar11; | |
do { | |
uVar8 = (uint)*(ushort *)((int)ppcVar7 + 10); | |
pcVar6 = *ppcVar7; | |
if (uVar8 == 0) { | |
LAB_00000bd0: | |
bVar1 = *(byte *)(ppcVar7 + 2); | |
} | |
else { | |
if (uVar8 != 0) { | |
uVar9 = 0; | |
do { | |
if (pcVar6 != (char *)0x0) { | |
iVar4 = strcmp(pcVar6,param_2); | |
if ((iVar4 == 0) && (*(int *)(ppcVar7[3] + uVar9 * 4) == param_3)) { | |
pcVar5 = (code *)sctrlHENFindFunction | |
("sceSystemMemoryManager","SysMemUserForUser", | |
0x3fc9ae6a); | |
iVar3 = (*pcVar5)(0,0); | |
if (0x30000 < iVar3 + 0xfe000000U >> 8) { | |
pcVar5 = (code *)sctrlHENFindFunction | |
("SystemControl","SystemCtrlForKernel",0x764a319b); | |
(*pcVar5)(0,0xffffffff); | |
} | |
return ppcVar7[4] + uVar9 * 8; | |
} | |
} | |
uVar9 = uVar9 + 1; | |
} while (uVar8 != uVar9); | |
goto LAB_00000bd0; | |
} | |
bVar1 = *(byte *)(ppcVar7 + 2); | |
} | |
iVar3 = iVar3 + (uint)bVar1 * 4; | |
ppcVar7 = (char **)((int)ppcVar11 + iVar3); | |
} while (iVar3 < iVar10); | |
} | |
} | |
return (char *)0x0; | |
} | |
void writeback_dcache_clear_icache(void) | |
{ | |
sceKernelDcacheWritebackAll(); | |
sceKernelIcacheClearAll(); | |
return; | |
} | |
uint remap_multiple_nids(int param_1,char *param_2,int param_3,SceKernelLMOption *param_4) | |
{ | |
uint iVar1; | |
int thid; | |
undefined4 *puVar1; | |
undefined4 *puVar2; | |
undefined4 uVar3; | |
iVar1 = sceKernelLoadModuleForLoadExecVSHMs2(param_1,param_2,param_3,param_4); | |
if (iVar1 == 0x80020148) { | |
// sceIoRead | |
puVar1 = (undefined4 *)get_nid_addr("sceModuleManager","IoFileMgrForKernel",0x6a638d83); | |
// sceIoLseek | |
puVar2 = (undefined4 *)get_nid_addr("sceModuleManager","IoFileMgrForKernel",0x27eb27b8); | |
*puVar1 = 0x800047a; | |
*puVar2 = 0x800007f; | |
writeback_dcache_clear_icache(); | |
iVar1 = sceKernelLoadModuleForLoadExecVSHMs2(param_1,param_2,param_3,param_4); | |
*puVar1 = 0x8000bba; | |
*puVar2 = 0x8000bbc; | |
writeback_dcache_clear_icache(); | |
if ((-1 < (int)iVar1) && (DAT_00003dc8 == 0)) { | |
// sceKernelLinkLibraryEntriesWithModule | |
uVar3 = find_function("sceLoaderCore","LoadCoreForKernel",0xc0913394); | |
puVar1 = (undefined4 *)get_nid_addr("sceModuleManager","LoadCoreForKernel",uVar3); | |
*puVar1 = 0x8000ab3; | |
// sceKernelLinkLibraryEntries | |
uVar3 = find_function("sceLoaderCore","LoadCoreForKernel",0xe760dba); | |
puVar1 = (undefined4 *)get_nid_addr("sceModuleManager","LoadCoreForKernel",uVar3); | |
*puVar1 = 0x8000aa2; | |
// sceKernelCreateThread | |
puVar1 = (undefined4 *)get_nid_addr("SystemControl","ThreadManForKernel",0x446d8de6); | |
*puVar1 = 0x80003d0; | |
writeback_dcache_clear_icache(); | |
} | |
} | |
else { | |
thid = sceKernelCreateThread("Destruction of Leda",0x280,0x10,0x1000,0,0); | |
if (-1 < thid) { | |
sceKernelStartThread(thid,0,(void *)0x0); | |
} | |
} | |
return iVar1; | |
} | |
void remap_more_nids(char *param_1,uint param_2,undefined4 param_3,undefined4 param_4, | |
undefined4 param_5,int param_6) | |
{ | |
int iVar1; | |
undefined4 *puVar2; | |
void *pvVar3; | |
iVar1 = strcmp(param_1,"SceModmgrStart"); | |
if (iVar1 == 0) { | |
if (DAT_00003d70 == 0) { | |
set_k1(0); | |
*(undefined4 *)(param_6 + 4) = 1; | |
param_2 = param_2 | 0x80000000; | |
// sceKernelCreateThread | |
puVar2 = (undefined4 *)get_nid_addr("SystemControl","ThreadManForKernel",0x446d8de6); | |
*puVar2 = 0x8000bc8; | |
param_5 = 0; | |
pvVar3 = (void *)sctrlHENFindFunction("sceThreadManager","ThreadManForUser",0x446d8de6); | |
sctrlHENPatchSyscall(pvVar3,create_threads); | |
} | |
else { | |
// sceKernelStartModule | |
pvVar3 = (void *)sctrlHENFindFunction("sceModuleManager","ModuleMgrForUser",0x50f0c1ec); | |
sctrlHENPatchSyscall(pvVar3,&LAB_00002068); | |
iVar1 = strcmp(&DAT_00003df4,"WlanScanner"); | |
if (iVar1 == 0) { | |
// sceCtrlReadBufferPositive | |
pvVar3 = (void *)sctrlHENFindFunction("sceController_Service","sceCtrl",0x1f803938); | |
sctrlHENPatchSyscall(pvVar3,&LAB_0000090c); | |
// sceCtrlPeekBufferPositive | |
pvVar3 = (void *)sctrlHENFindFunction("sceController_Service","sceCtrl",0x3a622550); | |
sctrlHENPatchSyscall(pvVar3,read_controller); | |
remap_more_nids2(); | |
return; | |
} | |
puVar2 = (undefined4 *)get_nid_addr("sceIOFileManager","ThreadManForKernel",0xf6427665); | |
*puVar2 = 0x800003a; | |
puVar2 = (undefined4 *)get_nid_addr("sceLFatFs_Driver","ThreadManForKernel",0xf6427665); | |
*puVar2 = 0x800003a; | |
iVar1 = strcmp(&DAT_00003df4,"\"WEBNAB\""); | |
if (iVar1 == 0) { | |
pvVar3 = (void *)sctrlHENFindFunction | |
("sceSystemMemoryManager","SysMemUserForUser",0x3fc9ae6a); | |
sctrlHENPatchSyscall(pvVar3,(void *)0xdc); | |
} | |
} | |
pvVar3 = (void *)sctrlHENFindFunction("sceModuleManager","ModuleMgrForUser",0x977de386); | |
sctrlHENPatchSyscall(pvVar3,load_modules); | |
writeback_dcache_clear_icache(); | |
} | |
sceKernelCreateThread(param_1,param_2,param_3,param_4,param_5,param_6); | |
return; | |
} | |
void remap_more_nids2(void) | |
{ | |
void *pvVar1; | |
uint *puVar2; | |
int iVar3; | |
int unaff_s0; | |
uint uVar4; | |
// sceKernelGetUserLevel | |
uVar4 = (unaff_s0 + 0xe8U & 0xffffffc) >> 2 | 0x8000000; | |
puVar2 = (uint *)get_nid_addr("sceIOFileManager","ThreadManForKernel",0xf6427665); | |
*puVar2 = uVar4; | |
puVar2 = (uint *)get_nid_addr("sceLFatFs_Driver","ThreadManForKernel",0xf6427665); | |
*puVar2 = uVar4; | |
iVar3 = strcmp(&DAT_00003df4,"\"WEBNAB\""); | |
if (iVar3 == 0) { | |
// sceKernelDevkitVersion | |
pvVar1 = (void *)sctrlHENFindFunction("sceSystemMemoryManager","SysMemUserForUser",0x3fc9ae6a); | |
sctrlHENPatchSyscall(pvVar1,(void *)0xdc); | |
} | |
// sceKernelLoadModule | |
pvVar1 = (void *)sctrlHENFindFunction("sceModuleManager","ModuleMgrForUser",0x977de386); | |
sctrlHENPatchSyscall(pvVar1,load_modules); | |
writeback_dcache_clear_icache(); | |
sceKernelCreateThread(); | |
return; | |
} | |
// WARNING: Instruction at (ram,0x000016b0) overlaps instruction at (ram,0x000016ac) | |
// | |
void FUN_0000127c(void) | |
{ | |
undefined uVar1; | |
int iVar2; | |
char *pcVar3; | |
undefined4 uVar4; | |
int iVar5; | |
int *piVar6; | |
int unaff_s1; | |
uint uVar7; | |
uint *puVar8; | |
int unaff_s2; | |
uint uVar9; | |
uint uVar10; | |
uint uVar11; | |
int *unaff_s3; | |
uint uStackX4; | |
if (((*(int *)((int)&DAT_00003dc0 + unaff_s1) == 0) && (*unaff_s3 == 0x464c457f)) && | |
(unaff_s2 != 0x200)) { | |
*(undefined4 *)((int)&DAT_00003dc0 + unaff_s1) = 1; | |
iVar2 = is_elf(); | |
if ((iVar2 != 0) && (pcVar3 = (char *)more_elf_junk(), pcVar3 != (char *)0x0)) { | |
piVar6 = (int *)((int)unaff_s3 + unaff_s3[8]); | |
uVar4 = read_scemoduleinfo_imports(unaff_s3,(uint)piVar6,pcVar3); | |
strcpy(&DAT_00003df4,uVar4); | |
if (DAT_00003dc8 == 0) { | |
sceCtrlReadBufferPositive(); | |
if ((uStackX4 & 0x200) == 0) { | |
iVar2 = strstr(&DAT_00003df4,"Resurssiklunssi"); | |
if (iVar2 != 0) { | |
DAT_00003d70 = 0; | |
} | |
} | |
else { | |
DAT_00003d70 = 0; | |
} | |
uVar9 = (uint)*(byte *)((int)unaff_s3 + 0x31); | |
uVar7 = (uint)*(byte *)(unaff_s3 + 0xc); | |
if (*(short *)(unaff_s3 + 0xc) != 0) { | |
iVar2 = 0; | |
do { | |
iVar5 = strcmp(pcVar3 + *piVar6,".text"); | |
if (iVar5 == 0) { | |
iVar5 = piVar6[4]; | |
if ((uint)piVar6[5] >> 2 != 0) { | |
uVar7 = 0; | |
do { | |
if (DAT_00003d70 == 0) { | |
puVar8 = (uint *)((int)unaff_s3 + iVar5 + uVar7 * 4); | |
uVar9 = *puVar8; | |
if (uVar9 == 0x160f809) { | |
*puVar8 = 0xc000afd; | |
} | |
else { | |
if (uVar9 < 0x160f80a) { | |
if (uVar9 == 0xc00008) { | |
*puVar8 = 0x8000b49; | |
} | |
else { | |
if (uVar9 < 0xc00009) { | |
if (uVar9 == 0x60f809) { | |
*puVar8 = 0xc000add; | |
} | |
else { | |
if (uVar9 < 0x60f80a) { | |
if (uVar9 == 0x400008) { | |
*puVar8 = 0x8000b39; | |
} | |
else { | |
if (uVar9 < 0x400009) { | |
if (uVar9 == 0x20f809) { | |
*puVar8 = 0xc000ad5; | |
} | |
} | |
else { | |
if (uVar9 == 0x40f809) { | |
*puVar8 = 0xc000ad9; | |
} | |
else { | |
if (uVar9 == 0x600008) { | |
*puVar8 = 0x8000b3d; | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar9 == 0x80f809) { | |
*puVar8 = 0xc000ae1; | |
} | |
else { | |
if (uVar9 < 0x80f80a) { | |
if (uVar9 == 0x800008) { | |
*puVar8 = 0x8000b41; | |
} | |
} | |
else { | |
if (uVar9 == 0xa00008) { | |
*puVar8 = 0x8000b45; | |
} | |
else { | |
if (uVar9 == 0xa0f809) { | |
*puVar8 = 0xc000ae5; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar9 == 0x100f809) { | |
*puVar8 = 0xc000af1; | |
} | |
else { | |
if (uVar9 < 0x100f80a) { | |
if (uVar9 == 0xe00008) { | |
*puVar8 = 0x8000b4d; | |
} | |
else { | |
if (uVar9 < 0xe00009) { | |
if (uVar9 == 0xc0f809) { | |
*puVar8 = 0xc000ae9; | |
} | |
} | |
else { | |
if (uVar9 == 0xe0f809) { | |
*puVar8 = 0xc000aed; | |
} | |
else { | |
if (uVar9 == 0x1000008) { | |
*puVar8 = 0x8000b51; | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar9 == 0x1400008) { | |
*puVar8 = 0x8000b59; | |
} | |
else { | |
if (uVar9 < 0x1400009) { | |
if (uVar9 == 0x1200008) { | |
*puVar8 = 0x8000b55; | |
} | |
else { | |
if (uVar9 == 0x120f809) { | |
*puVar8 = 0xc000af5; | |
} | |
} | |
} | |
else { | |
if (uVar9 == 0x140f809) { | |
*puVar8 = 0xc000af9; | |
} | |
else { | |
if (uVar9 == 0x1600008) { | |
*puVar8 = 0x8000b5d; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar9 == 0x220f809) { | |
*puVar8 = 0xc000b1d; | |
} | |
else { | |
if (uVar9 < 0x220f80a) { | |
if (uVar9 == 0x1c00008) { | |
*puVar8 = 0x8000b69; | |
} | |
else { | |
if (uVar9 < 0x1c00009) { | |
if (uVar9 == 0x180f809) { | |
*puVar8 = 0xc000b01; | |
} | |
else { | |
if (uVar9 < 0x180f80a) { | |
if (uVar9 == 0x1800008) { | |
*puVar8 = 0x8000b61; | |
} | |
} | |
else { | |
if (uVar9 == 0x1a00008) { | |
*puVar8 = 0x8000b65; | |
} | |
else { | |
if (uVar9 == 0x1a0f809) { | |
*puVar8 = 0xc000b05; | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar9 == 0x1e00008) { | |
*puVar8 = 0x8000b6d; | |
} | |
else { | |
if (uVar9 < 0x1e00009) { | |
if (uVar9 == 0x1c0f809) { | |
*puVar8 = 0xc000b09; | |
} | |
} | |
else { | |
if (uVar9 == 0x1e0f809) { | |
*puVar8 = 0xc000b0d; | |
} | |
else { | |
if (uVar9 == 0x200f809) { | |
*puVar8 = 0xc000b19; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar9 == 0x2c0f809) { | |
*puVar8 = 0xc000b31; | |
} | |
else { | |
if (uVar9 < 0x2c0f80a) { | |
if (uVar9 == 0x260f809) { | |
*puVar8 = 0xc000b25; | |
} | |
else { | |
if (uVar9 < 0x260f80a) { | |
if (uVar9 == 0x240f809) { | |
*puVar8 = 0xc000b21; | |
} | |
} | |
else { | |
if (uVar9 == 0x280f809) { | |
*puVar8 = 0xc000b29; | |
} | |
else { | |
if (uVar9 == 0x2a0f809) { | |
*puVar8 = 0xc000b2d; | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar9 == 0x300f809) { | |
*puVar8 = 0xc000b11; | |
} | |
else { | |
if (uVar9 < 0x300f80a) { | |
if (uVar9 == 0x2e0f809) { | |
*puVar8 = 0xc000b35; | |
} | |
else { | |
if (uVar9 == 0x3000008) { | |
*puVar8 = 0x8000b71; | |
} | |
} | |
} | |
else { | |
if (uVar9 == 0x3200008) { | |
*puVar8 = 0x8000b75; | |
} | |
else { | |
if (uVar9 == 0x320f809) { | |
*puVar8 = 0xc000b15; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
else { | |
puVar8 = (uint *)((int)unaff_s3 + iVar5 + uVar7 * 4); | |
uVar9 = *puVar8; | |
if ((uVar9 >> 0x1a == 0xf) && ((uVar9 & 0xffff) == 0x8000)) { | |
uVar11 = puVar8[1]; | |
if ((uVar11 >> 0x1a == 0) && | |
(((((uVar11 & 0x3f) == 0x25 && | |
((uVar9 << 0xb) >> 0x1b == (uVar11 << 0xb) >> 0x1b)) && | |
(uVar10 = puVar8[2], uVar10 >> 0x1a == 0)) && | |
(((uVar10 & 0x3f) == 8 && | |
((uVar11 << 0x10) >> 0x1b == (uVar10 << 6) >> 0x1b)))))) { | |
uVar11 = puVar8[-1] >> 0x1a; | |
if ((uVar11 == 9) || (uVar11 == 0xd)) { | |
uVar10 = puVar8[-1] & 0xffff; | |
uVar11 = uVar7 * 4 + piVar6[3] + 0x10 & 0xffff; | |
if ((uVar10 == uVar11) || ((uVar10 == uVar11 + 4 && (puVar8[4] == 0)))) { | |
*puVar8 = uVar9 & 0xffff0000; | |
} | |
} | |
} | |
} | |
else { | |
if ((uVar9 >> 0x1a == 0xf) && ((uVar9 & 0xffff) == 0x3ff)) { | |
uVar11 = puVar8[1]; | |
if (((((uVar11 >> 0x1a == 0xd) && | |
((((uVar11 & 0xffff) == 0xffff && | |
(uVar9 = (uVar9 << 0xb) >> 0x1b, uVar9 == (uVar11 << 0xb) >> 0x1b)) | |
&& (uVar9 == (uVar11 << 6) >> 0x1b)))) && | |
(((puVar8[3] >> 0x1a == 0xf && ((puVar8[3] & 0xffff) == 0xffe0)) && | |
(puVar8[4] >> 0x1a == 0xf)))) && | |
((((puVar8[4] & 0xffff) == 0x8000 && (puVar8[8] >> 0x1a == 0xf)) && | |
(((puVar8[8] & 0xffff) == 0x4000 && | |
(((puVar8[9] >> 0x1a == 0xf && | |
((char *)(puVar8[9] & 0xffff) == "pdrm.prx")) && | |
(puVar8[10] >> 0x1a == 0xd)))))))) && | |
((puVar8[10] & 0xffff) == 0xb000)) { | |
puVar8[-4] = 0x3e00008; | |
puVar8[-3] = 0x1021; | |
} | |
} | |
else { | |
if ((uVar9 >> 0x1a == 0xd) && ((uVar9 & 0xffff) == 0xdc02)) { | |
if ((((puVar8[-2] >> 0x1a == 0xf) && | |
(((puVar8[-2] & 0xffff) == 0x1b && (puVar8[-3] >> 0x1a == 0xf)))) && | |
((puVar8[-3] & 0xffff) == 0x8000)) && | |
((puVar8[-7] >> 0x1a == 0xf && ((puVar8[-7] & 0xffff) == 0x3ff)))) { | |
puVar8[-0xb] = 0x3e00008; | |
puVar8[-10] = 0x1021; | |
} | |
} | |
else { | |
if ((uVar9 >> 0x1a == 0xf) && ((uVar9 & 0xffff) == 0xbe50)) { | |
if (puVar8[-5] >> 0x1a == 0xf) { | |
if ((puVar8[-5] & 0xffff) == 0x5b8) { | |
if ((puVar8[-4] >> 0x1a == 0xd) && ((puVar8[-4] & 0xffff) == 0xd800) | |
) { | |
puVar8[-5] = 0x3e00008; | |
puVar8[-4] = 0x1021; | |
} | |
goto LAB_00001644; | |
} | |
uVar9 = puVar8[1]; | |
} | |
else { | |
uVar9 = puVar8[1]; | |
} | |
if ((((uVar9 >> 0x1a == 0xd) && ((uVar9 & 0xffff) == 0x18)) && | |
(puVar8[3] >> 0x1a == 0xc)) && | |
((uVar9 = puVar8[3] & 0xffff, uVar9 == 0x20 || (uVar9 == 0x10)))) { | |
*puVar8 = 0x3e00008; | |
puVar8[1] = 0x1021; | |
} | |
} | |
} | |
} | |
} | |
} | |
LAB_00001644: | |
uVar7 = uVar7 + 1; | |
} while (uVar7 < (uint)piVar6[5] >> 2); | |
uVar7 = (uint)*(byte *)(unaff_s3 + 0xc); | |
uVar9 = (uint)*(byte *)((int)unaff_s3 + 0x31); | |
} | |
uVar1 = *(undefined *)((int)unaff_s3 + 0x2f); | |
} | |
else { | |
uVar1 = *(undefined *)((int)unaff_s3 + 0x2f); | |
} | |
iVar2 = iVar2 + 1; | |
if ((int)(uVar9 << 8 | uVar7) <= iVar2) break; | |
piVar6 = (int *)((int)piVar6 + | |
(uint)CONCAT11(uVar1,*(undefined *)((int)unaff_s3 + 0x2e))); | |
} while( true ); | |
} | |
writeback_dcache_clear_icache(); | |
} | |
} | |
} | |
return; | |
} | |
// WARNING: Globals starting with '_' overlap smaller symbols at the same address | |
void FUN_000012d0(undefined4 param_1,int param_2) | |
{ | |
undefined uVar1; | |
undefined4 *puVar2; | |
int iVar3; | |
char *pcVar4; | |
int iVar5; | |
undefined4 uVar6; | |
undefined4 uVar7; | |
undefined4 uVar8; | |
undefined4 *puVar9; | |
undefined4 *puVar10; | |
undefined4 in_t1; | |
SceUID unaff_s0; | |
int *piVar11; | |
int unaff_s1; | |
uint uVar12; | |
uint *puVar13; | |
int unaff_s2; | |
uint uVar14; | |
uint uVar15; | |
uint uVar16; | |
undefined4 *unaff_s3; | |
SceOff SVar17; | |
uint uStackX4; | |
if ((DAT_00003dd0 | DAT_00003dd4) == 0) { | |
SVar17 = sceIoLseek(unaff_s0,CONCAT44(2,in_t1),param_2); | |
DAT_00003d98 = (int)((ulonglong)SVar17 >> 0x20) + 0x1c0; | |
puVar2 = &DAT_00003d74; | |
DAT_00003dcc = DAT_00003d98; | |
do { | |
puVar10 = puVar2; | |
puVar9 = unaff_s3; | |
uVar6 = puVar10[1]; | |
uVar7 = puVar10[2]; | |
uVar8 = puVar10[3]; | |
*puVar9 = *puVar10; | |
puVar9[1] = uVar6; | |
puVar9[2] = uVar7; | |
puVar9[3] = uVar8; | |
unaff_s3 = puVar9 + 4; | |
puVar2 = puVar10 + 4; | |
} while (puVar10 + 4 != (undefined4 *)&DAT_00003d94); | |
uVar6 = puVar10[5]; | |
puVar9[4] = _DAT_00003d94; | |
puVar9[5] = uVar6; | |
FUN_0000127c(); | |
return; | |
} | |
if ((param_2 == 0x464c457f) && (unaff_s2 != 0x200)) { | |
*(undefined4 *)((int)&DAT_00003dc0 + unaff_s1) = 1; | |
iVar3 = is_elf(); | |
if ((iVar3 != 0) && (pcVar4 = (char *)more_elf_junk(), pcVar4 != (char *)0x0)) { | |
piVar11 = (int *)((int)unaff_s3 + unaff_s3[8]); | |
uVar6 = read_scemoduleinfo_imports(unaff_s3,(uint)piVar11,pcVar4); | |
strcpy(&DAT_00003df4,uVar6); | |
if (DAT_00003dc8 == 0) { | |
sceCtrlReadBufferPositive(); | |
if ((uStackX4 & 0x200) == 0) { | |
iVar3 = strstr(&DAT_00003df4,"Resurssiklunssi"); | |
if (iVar3 != 0) { | |
DAT_00003d70 = 0; | |
} | |
} | |
else { | |
DAT_00003d70 = 0; | |
} | |
uVar14 = (uint)*(byte *)((int)unaff_s3 + 0x31); | |
uVar12 = (uint)*(byte *)(unaff_s3 + 0xc); | |
if (*(short *)(unaff_s3 + 0xc) != 0) { | |
iVar3 = 0; | |
do { | |
iVar5 = strcmp(pcVar4 + *piVar11,".text"); | |
if (iVar5 == 0) { | |
iVar5 = piVar11[4]; | |
if ((uint)piVar11[5] >> 2 != 0) { | |
uVar12 = 0; | |
do { | |
if (DAT_00003d70 == 0) { | |
puVar13 = (uint *)((int)unaff_s3 + iVar5 + uVar12 * 4); | |
uVar14 = *puVar13; | |
if (uVar14 == 0x160f809) { | |
*puVar13 = 0xc000afd; | |
} | |
else { | |
if (uVar14 < 0x160f80a) { | |
if (uVar14 == 0xc00008) { | |
*puVar13 = 0x8000b49; | |
} | |
else { | |
if (uVar14 < 0xc00009) { | |
if (uVar14 == 0x60f809) { | |
*puVar13 = 0xc000add; | |
} | |
else { | |
if (uVar14 < 0x60f80a) { | |
if (uVar14 == 0x400008) { | |
*puVar13 = 0x8000b39; | |
} | |
else { | |
if (uVar14 < 0x400009) { | |
if (uVar14 == 0x20f809) { | |
*puVar13 = 0xc000ad5; | |
} | |
} | |
else { | |
if (uVar14 == 0x40f809) { | |
*puVar13 = 0xc000ad9; | |
} | |
else { | |
if (uVar14 == 0x600008) { | |
*puVar13 = 0x8000b3d; | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar14 == 0x80f809) { | |
*puVar13 = 0xc000ae1; | |
} | |
else { | |
if (uVar14 < 0x80f80a) { | |
if (uVar14 == 0x800008) { | |
*puVar13 = 0x8000b41; | |
} | |
} | |
else { | |
if (uVar14 == 0xa00008) { | |
*puVar13 = 0x8000b45; | |
} | |
else { | |
if (uVar14 == 0xa0f809) { | |
*puVar13 = 0xc000ae5; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar14 == 0x100f809) { | |
*puVar13 = 0xc000af1; | |
} | |
else { | |
if (uVar14 < 0x100f80a) { | |
if (uVar14 == 0xe00008) { | |
*puVar13 = 0x8000b4d; | |
} | |
else { | |
if (uVar14 < 0xe00009) { | |
if (uVar14 == 0xc0f809) { | |
*puVar13 = 0xc000ae9; | |
} | |
} | |
else { | |
if (uVar14 == 0xe0f809) { | |
*puVar13 = 0xc000aed; | |
} | |
else { | |
if (uVar14 == 0x1000008) { | |
*puVar13 = 0x8000b51; | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar14 == 0x1400008) { | |
*puVar13 = 0x8000b59; | |
} | |
else { | |
if (uVar14 < 0x1400009) { | |
if (uVar14 == 0x1200008) { | |
*puVar13 = 0x8000b55; | |
} | |
else { | |
if (uVar14 == 0x120f809) { | |
*puVar13 = 0xc000af5; | |
} | |
} | |
} | |
else { | |
if (uVar14 == 0x140f809) { | |
*puVar13 = 0xc000af9; | |
} | |
else { | |
if (uVar14 == 0x1600008) { | |
*puVar13 = 0x8000b5d; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar14 == 0x220f809) { | |
*puVar13 = 0xc000b1d; | |
} | |
else { | |
if (uVar14 < 0x220f80a) { | |
if (uVar14 == 0x1c00008) { | |
*puVar13 = 0x8000b69; | |
} | |
else { | |
if (uVar14 < 0x1c00009) { | |
if (uVar14 == 0x180f809) { | |
*puVar13 = 0xc000b01; | |
} | |
else { | |
if (uVar14 < 0x180f80a) { | |
if (uVar14 == 0x1800008) { | |
*puVar13 = 0x8000b61; | |
} | |
} | |
else { | |
if (uVar14 == 0x1a00008) { | |
*puVar13 = 0x8000b65; | |
} | |
else { | |
if (uVar14 == 0x1a0f809) { | |
*puVar13 = 0xc000b05; | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar14 == 0x1e00008) { | |
*puVar13 = 0x8000b6d; | |
} | |
else { | |
if (uVar14 < 0x1e00009) { | |
if (uVar14 == 0x1c0f809) { | |
*puVar13 = 0xc000b09; | |
} | |
} | |
else { | |
if (uVar14 == 0x1e0f809) { | |
*puVar13 = 0xc000b0d; | |
} | |
else { | |
if (uVar14 == 0x200f809) { | |
*puVar13 = 0xc000b19; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar14 == 0x2c0f809) { | |
*puVar13 = 0xc000b31; | |
} | |
else { | |
if (uVar14 < 0x2c0f80a) { | |
if (uVar14 == 0x260f809) { | |
*puVar13 = 0xc000b25; | |
} | |
else { | |
if (uVar14 < 0x260f80a) { | |
if (uVar14 == 0x240f809) { | |
*puVar13 = 0xc000b21; | |
} | |
} | |
else { | |
if (uVar14 == 0x280f809) { | |
*puVar13 = 0xc000b29; | |
} | |
else { | |
if (uVar14 == 0x2a0f809) { | |
*puVar13 = 0xc000b2d; | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar14 == 0x300f809) { | |
*puVar13 = 0xc000b11; | |
} | |
else { | |
if (uVar14 < 0x300f80a) { | |
if (uVar14 == 0x2e0f809) { | |
*puVar13 = 0xc000b35; | |
} | |
else { | |
if (uVar14 == 0x3000008) { | |
*puVar13 = 0x8000b71; | |
} | |
} | |
} | |
else { | |
if (uVar14 == 0x3200008) { | |
*puVar13 = 0x8000b75; | |
} | |
else { | |
if (uVar14 == 0x320f809) { | |
*puVar13 = 0xc000b15; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
else { | |
puVar13 = (uint *)((int)unaff_s3 + iVar5 + uVar12 * 4); | |
uVar14 = *puVar13; | |
if ((uVar14 >> 0x1a == 0xf) && ((uVar14 & 0xffff) == 0x8000)) { | |
uVar16 = puVar13[1]; | |
if (((uVar16 >> 0x1a == 0) && | |
((((uVar16 & 0x3f) == 0x25 && | |
((uVar14 << 0xb) >> 0x1b == (uVar16 << 0xb) >> 0x1b)) && | |
(uVar15 = puVar13[2], uVar15 >> 0x1a == 0)))) && | |
(((uVar15 & 0x3f) == 8 && | |
((uVar16 << 0x10) >> 0x1b == (uVar15 << 6) >> 0x1b)))) { | |
uVar16 = puVar13[-1] >> 0x1a; | |
if ((uVar16 == 9) || (uVar16 == 0xd)) { | |
uVar15 = puVar13[-1] & 0xffff; | |
uVar16 = uVar12 * 4 + piVar11[3] + 0x10 & 0xffff; | |
if ((uVar15 == uVar16) || ((uVar15 == uVar16 + 4 && (puVar13[4] == 0)))) { | |
*puVar13 = uVar14 & 0xffff0000; | |
} | |
} | |
} | |
} | |
else { | |
if ((uVar14 >> 0x1a == 0xf) && ((uVar14 & 0xffff) == 0x3ff)) { | |
uVar16 = puVar13[1]; | |
if ((((uVar16 >> 0x1a == 0xd) && | |
((((((uVar16 & 0xffff) == 0xffff && | |
(uVar14 = (uVar14 << 0xb) >> 0x1b, | |
uVar14 == (uVar16 << 0xb) >> 0x1b)) && | |
(uVar14 == (uVar16 << 6) >> 0x1b)) && | |
((puVar13[3] >> 0x1a == 0xf && ((puVar13[3] & 0xffff) == 0xffe0)))) | |
&& (puVar13[4] >> 0x1a == 0xf)))) && | |
((((puVar13[4] & 0xffff) == 0x8000 && (puVar13[8] >> 0x1a == 0xf)) && | |
((puVar13[8] & 0xffff) == 0x4000)))) && | |
((((puVar13[9] >> 0x1a == 0xf && | |
((char *)(puVar13[9] & 0xffff) == "pdrm.prx")) && | |
(puVar13[10] >> 0x1a == 0xd)) && ((puVar13[10] & 0xffff) == 0xb000)))) | |
{ | |
puVar13[-4] = 0x3e00008; | |
puVar13[-3] = 0x1021; | |
} | |
} | |
else { | |
if ((uVar14 >> 0x1a == 0xd) && ((uVar14 & 0xffff) == 0xdc02)) { | |
if ((((puVar13[-2] >> 0x1a == 0xf) && | |
(((puVar13[-2] & 0xffff) == 0x1b && (puVar13[-3] >> 0x1a == 0xf)))) | |
&& ((puVar13[-3] & 0xffff) == 0x8000)) && | |
((puVar13[-7] >> 0x1a == 0xf && ((puVar13[-7] & 0xffff) == 0x3ff)))) { | |
puVar13[-0xb] = 0x3e00008; | |
puVar13[-10] = 0x1021; | |
} | |
} | |
else { | |
if ((uVar14 >> 0x1a == 0xf) && ((uVar14 & 0xffff) == 0xbe50)) { | |
if (puVar13[-5] >> 0x1a == 0xf) { | |
if ((puVar13[-5] & 0xffff) == 0x5b8) { | |
if ((puVar13[-4] >> 0x1a == 0xd) && | |
((puVar13[-4] & 0xffff) == 0xd800)) { | |
puVar13[-5] = 0x3e00008; | |
puVar13[-4] = 0x1021; | |
} | |
goto LAB_00001644; | |
} | |
uVar14 = puVar13[1]; | |
} | |
else { | |
uVar14 = puVar13[1]; | |
} | |
if ((((uVar14 >> 0x1a == 0xd) && ((uVar14 & 0xffff) == 0x18)) && | |
(puVar13[3] >> 0x1a == 0xc)) && | |
((uVar14 = puVar13[3] & 0xffff, uVar14 == 0x20 || (uVar14 == 0x10)))) | |
{ | |
*puVar13 = 0x3e00008; | |
puVar13[1] = 0x1021; | |
} | |
} | |
} | |
} | |
} | |
} | |
LAB_00001644: | |
uVar12 = uVar12 + 1; | |
} while (uVar12 < (uint)piVar11[5] >> 2); | |
uVar12 = (uint)*(byte *)(unaff_s3 + 0xc); | |
uVar14 = (uint)*(byte *)((int)unaff_s3 + 0x31); | |
} | |
uVar1 = *(undefined *)((int)unaff_s3 + 0x2f); | |
} | |
else { | |
uVar1 = *(undefined *)((int)unaff_s3 + 0x2f); | |
} | |
iVar3 = iVar3 + 1; | |
if ((int)(uVar14 << 8 | uVar12) <= iVar3) break; | |
piVar11 = (int *)((int)piVar11 + | |
(uint)CONCAT11(uVar1,*(undefined *)((int)unaff_s3 + 0x2e))); | |
} while( true ); | |
} | |
writeback_dcache_clear_icache(); | |
} | |
} | |
} | |
return; | |
} | |
// WARNING: Instruction at (ram,0x0000190c) overlaps instruction at (ram,0x00001908) | |
// | |
// WARNING: Removing unreachable block (ram,0x00001aa8) | |
void FUN_00001390(void) | |
{ | |
undefined uVar1; | |
int in_v0; | |
int iVar2; | |
char *pcVar3; | |
undefined4 uVar4; | |
int iVar5; | |
int *piVar6; | |
int unaff_s1; | |
uint uVar7; | |
uint *puVar8; | |
int unaff_s2; | |
uint uVar9; | |
uint uVar10; | |
uint uVar11; | |
int unaff_s3; | |
uint uStackX4; | |
if (unaff_s2 != in_v0) { | |
*(undefined4 *)((int)&DAT_00003dc0 + unaff_s1) = 1; | |
iVar2 = is_elf(); | |
if ((iVar2 != 0) && (pcVar3 = (char *)more_elf_junk(), pcVar3 != (char *)0x0)) { | |
piVar6 = (int *)(unaff_s3 + *(int *)(unaff_s3 + 0x20)); | |
uVar4 = read_scemoduleinfo_imports(unaff_s3,(uint)piVar6,pcVar3); | |
strcpy(&DAT_00003df4,uVar4); | |
if (DAT_00003dc8 == 0) { | |
sceCtrlReadBufferPositive(); | |
if ((uStackX4 & 0x200) == 0) { | |
iVar2 = strstr(&DAT_00003df4,"Resurssiklunssi"); | |
if (iVar2 != 0) { | |
DAT_00003d70 = 0; | |
} | |
} | |
else { | |
DAT_00003d70 = 0; | |
} | |
uVar9 = (uint)*(byte *)(unaff_s3 + 0x31); | |
uVar7 = (uint)*(byte *)(short *)(unaff_s3 + 0x30); | |
if (*(short *)(unaff_s3 + 0x30) != 0) { | |
iVar2 = 0; | |
do { | |
iVar5 = strcmp(pcVar3 + *piVar6,".text"); | |
if (iVar5 == 0) { | |
iVar5 = piVar6[4]; | |
if ((uint)piVar6[5] >> 2 != 0) { | |
uVar7 = 0; | |
do { | |
if (DAT_00003d70 == 0) { | |
puVar8 = (uint *)(unaff_s3 + iVar5 + uVar7 * 4); | |
uVar9 = *puVar8; | |
if (uVar9 == 0x160f809) { | |
*puVar8 = 0xc000afd; | |
} | |
else { | |
if (uVar9 < 0x160f80a) { | |
if (uVar9 == 0xc00008) { | |
*puVar8 = 0x8000b49; | |
} | |
else { | |
if (uVar9 < 0xc00009) { | |
if (uVar9 == 0x60f809) { | |
*puVar8 = 0xc000add; | |
} | |
else { | |
if (uVar9 < 0x60f80a) { | |
if (uVar9 == 0x400008) { | |
*puVar8 = 0x8000b39; | |
} | |
else { | |
if (uVar9 < 0x400009) { | |
if (uVar9 == 0x20f809) { | |
*puVar8 = 0xc000ad5; | |
} | |
} | |
else { | |
if (uVar9 == 0x40f809) { | |
*puVar8 = 0xc000ad9; | |
} | |
else { | |
if (uVar9 == 0x600008) { | |
*puVar8 = 0x8000b3d; | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar9 == 0x80f809) { | |
*puVar8 = 0xc000ae1; | |
} | |
else { | |
if (uVar9 < 0x80f80a) { | |
if (uVar9 == 0x800008) { | |
*puVar8 = 0x8000b41; | |
} | |
} | |
else { | |
if (uVar9 == 0xa00008) { | |
*puVar8 = 0x8000b45; | |
} | |
else { | |
if (uVar9 == 0xa0f809) { | |
*puVar8 = 0xc000ae5; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar9 == 0x100f809) { | |
*puVar8 = 0xc000af1; | |
} | |
else { | |
if (uVar9 < 0x100f80a) { | |
if (uVar9 == 0xe00008) { | |
*puVar8 = 0x8000b4d; | |
} | |
else { | |
if (uVar9 < 0xe00009) { | |
if (uVar9 == 0xc0f809) { | |
*puVar8 = 0xc000ae9; | |
} | |
} | |
else { | |
if (uVar9 == 0xe0f809) { | |
*puVar8 = 0xc000aed; | |
} | |
else { | |
if (uVar9 == 0x1000008) { | |
*puVar8 = 0x8000b51; | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar9 == 0x1400008) { | |
*puVar8 = 0x8000b59; | |
} | |
else { | |
if (uVar9 < 0x1400009) { | |
if (uVar9 == 0x1200008) { | |
*puVar8 = 0x8000b55; | |
} | |
else { | |
if (uVar9 == 0x120f809) { | |
*puVar8 = 0xc000af5; | |
} | |
} | |
} | |
else { | |
if (uVar9 == 0x140f809) { | |
*puVar8 = 0xc000af9; | |
} | |
else { | |
if (uVar9 == 0x1600008) { | |
*puVar8 = 0x8000b5d; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar9 == 0x220f809) { | |
*puVar8 = 0xc000b1d; | |
} | |
else { | |
if (uVar9 < 0x220f80a) { | |
if (uVar9 == 0x1c00008) { | |
*puVar8 = 0x8000b69; | |
} | |
else { | |
if (uVar9 < 0x1c00009) { | |
if (uVar9 == 0x180f809) { | |
*puVar8 = 0xc000b01; | |
} | |
else { | |
if (uVar9 < 0x180f80a) { | |
if (uVar9 == 0x1800008) { | |
*puVar8 = 0x8000b61; | |
} | |
} | |
else { | |
if (uVar9 == 0x1a00008) { | |
*puVar8 = 0x8000b65; | |
} | |
else { | |
if (uVar9 == 0x1a0f809) { | |
*puVar8 = 0xc000b05; | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar9 == 0x1e00008) { | |
*puVar8 = 0x8000b6d; | |
} | |
else { | |
if (uVar9 < 0x1e00009) { | |
if (uVar9 == 0x1c0f809) { | |
*puVar8 = 0xc000b09; | |
} | |
} | |
else { | |
if (uVar9 == 0x1e0f809) { | |
*puVar8 = 0xc000b0d; | |
} | |
else { | |
if (uVar9 == 0x200f809) { | |
*puVar8 = 0xc000b19; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar9 == 0x2c0f809) { | |
*puVar8 = 0xc000b31; | |
} | |
else { | |
if (uVar9 < 0x2c0f80a) { | |
if (uVar9 == 0x260f809) { | |
*puVar8 = 0xc000b25; | |
} | |
else { | |
if (uVar9 != 0) { | |
if (uVar9 == 0x280f809) { | |
*puVar8 = 0xc000b29; | |
} | |
else { | |
if (uVar9 == 0x2a0f809) { | |
*puVar8 = 0xc000b2d; | |
} | |
} | |
} | |
} | |
} | |
else { | |
if (uVar9 == 0x300f809) { | |
*puVar8 = 0xc000b11; | |
} | |
else { | |
if (uVar9 < 0x300f80a) { | |
if (uVar9 == 0x2e0f809) { | |
*puVar8 = 0xc000b35; | |
} | |
else { | |
if (uVar9 == 0x3000008) { | |
*puVar8 = 0x8000b71; | |
} | |
} | |
} | |
else { | |
if (uVar9 == 0x3200008) { | |
*puVar8 = 0x8000b75; | |
} | |
else { | |
if (uVar9 == 0x320f809) { | |
*puVar8 = 0xc000b15; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
else { | |
puVar8 = (uint *)(unaff_s3 + iVar5 + uVar7 * 4); | |
uVar9 = *puVar8; | |
if ((uVar9 >> 0x1a == 0xf) && ((uVar9 & 0xffff) == 0x8000)) { | |
uVar11 = puVar8[1]; | |
if (((uVar11 >> 0x1a == 0) && | |
((((uVar11 & 0x3f) == 0x25 && | |
((uVar9 << 0xb) >> 0x1b == (uVar11 << 0xb) >> 0x1b)) && | |
(uVar10 = puVar8[2], uVar10 >> 0x1a == 0)))) && | |
(((uVar10 & 0x3f) == 8 && | |
((uVar11 << 0x10) >> 0x1b == (uVar10 << 6) >> 0x1b)))) { | |
uVar11 = puVar8[-1] >> 0x1a; | |
if ((uVar11 == 9) || (uVar11 == 0xd)) { | |
uVar10 = puVar8[-1] & 0xffff; | |
uVar11 = uVar7 * 4 + piVar6[3] + 0x10 & 0xffff; | |
if ((uVar10 == uVar11) || ((uVar10 == uVar11 + 4 && (puVar8[4] == 0)))) { | |
*puVar8 = uVar9 & 0xffff0000; | |
} | |
} | |
} | |
} | |
else { | |
if ((uVar9 >> 0x1a == 0xf) && ((uVar9 & 0xffff) == 0x3ff)) { | |
uVar11 = puVar8[1]; | |
if ((((uVar11 >> 0x1a == 0xd) && | |
((((((uVar11 & 0xffff) == 0xffff && | |
(uVar9 = (uVar9 << 0xb) >> 0x1b, uVar9 == (uVar11 << 0xb) >> 0x1b)) | |
&& (uVar9 == (uVar11 << 6) >> 0x1b)) && | |
((puVar8[3] >> 0x1a == 0xf && ((puVar8[3] & 0xffff) == 0xffe0)))) && | |
(puVar8[4] >> 0x1a == 0xf)))) && | |
((((puVar8[4] & 0xffff) == 0x8000 && (puVar8[8] >> 0x1a == 0xf)) && | |
((puVar8[8] & 0xffff) == 0x4000)))) && | |
((((puVar8[9] >> 0x1a == 0xf && | |
((char *)(puVar8[9] & 0xffff) == "pdrm.prx")) && | |
(puVar8[10] >> 0x1a == 0xd)) && ((puVar8[10] & 0xffff) == 0xb000)))) { | |
puVar8[-4] = 0x3e00008; | |
puVar8[-3] = 0x1021; | |
} | |
} | |
else { | |
if ((uVar9 >> 0x1a == 0xd) && ((uVar9 & 0xffff) == 0xdc02)) { | |
if (((puVar8[-2] >> 0x1a == 0xf) && | |
(((puVar8[-2] & 0xffff) == 0x1b && (puVar8[-3] >> 0x1a == 0xf)))) && | |
(((puVar8[-3] & 0xffff) == 0x8000 && | |
((puVar8[-7] >> 0x1a == 0xf && ((puVar8[-7] & 0xffff) == 0x3ff)))))) { | |
puVar8[-0xb] = 0x3e00008; | |
puVar8[-10] = 0x1021; | |
} | |
} | |
else { | |
if ((uVar9 >> 0x1a == 0xf) && ((uVar9 & 0xffff) == 0xbe50)) { | |
if (puVar8[-5] >> 0x1a == 0xf) { | |
if ((puVar8[-5] & 0xffff) == 0x5b8) { | |
if ((puVar8[-4] >> 0x1a == 0xd) && ((puVar8[-4] & 0xffff) == 0xd800) | |
) { | |
puVar8[-5] = 0x3e00008; | |
puVar8[-4] = 0x1021; | |
} | |
goto LAB_00001644; | |
} | |
uVar9 = puVar8[1]; | |
} | |
else { | |
uVar9 = puVar8[1]; | |
} | |
if ((((uVar9 >> 0x1a == 0xd) && ((uVar9 & 0xffff) == 0x18)) && | |
(puVar8[3] >> 0x1a == 0xc)) && | |
((uVar9 = puVar8[3] & 0xffff, uVar9 == 0x20 || (uVar9 == 0x10)))) { | |
*puVar8 = 0x3e00008; | |
puVar8[1] = 0x1021; | |
} | |
} | |
} | |
} | |
} | |
} | |
LAB_00001644: | |
uVar7 = uVar7 + 1; | |
} while (uVar7 < (uint)piVar6[5] >> 2); | |
uVar7 = (uint)*(byte *)(unaff_s3 + 0x30); | |
uVar9 = (uint)*(byte *)(unaff_s3 + 0x31); | |
} | |
uVar1 = *(undefined *)(unaff_s3 + 0x2f); | |
} | |
else { | |
uVar1 = *(undefined *)(unaff_s3 + 0x2f); | |
} | |
iVar2 = iVar2 + 1; | |
if ((int)(uVar9 << 8 | uVar7) <= iVar2) break; | |
piVar6 = (int *)((int)piVar6 + (uint)CONCAT11(uVar1,*(undefined *)(unaff_s3 + 0x2e))); | |
} while( true ); | |
} | |
writeback_dcache_clear_icache(); | |
} | |
} | |
} | |
return; | |
} | |
void FUN_00002114(void) | |
{ | |
uint uVar1; | |
int iVar2; | |
SceUID modid; | |
u32 uVar3; | |
int unaff_s0; | |
int unaff_s1; | |
int unaff_s4; | |
if (*(int *)((int)&PTR_00003dec + unaff_s4) == 0) { | |
return; | |
} | |
uVar1 = set_k1(0); | |
if (DAT_00003dc4 == 0) { | |
DAT_00003dc4 = 1; | |
modid = sceKernelLoadModuleBuffer(0x52c,&DAT_00003840,0,0); | |
sceKernelStartModule(modid,0,(void *)0x0,(int *)0x0,(SceKernelSMOption *)0x0); | |
iVar2 = *(int *)((int)&DAT_00003df0 + unaff_s0); | |
} | |
else { | |
iVar2 = *(int *)((int)&DAT_00003df0 + unaff_s0); | |
} | |
if (iVar2 == 0) { | |
iVar2 = *(int *)((int)&DAT_00003e14 + unaff_s1); | |
} | |
else { | |
uVar3 = sctrlHENFindFunction("Circulo Rectangular","HappyWorld",0x12345678); | |
if (uVar3 != 0) { | |
*DAT_00003df0 = uVar3 >> 2 & 0x3ffffff | 0x8000000; | |
DAT_00003df0[1] = 0; | |
writeback_dcache_clear_icache(); | |
} | |
DAT_00003df0 = (uint *)0x0; | |
iVar2 = *(int *)((int)&DAT_00003e14 + unaff_s1); | |
} | |
if (iVar2 == 0) { | |
iVar2 = *(int *)((int)&PTR_00003dec + unaff_s4); | |
} | |
else { | |
uVar3 = sctrlHENFindFunction("Circulo Rectangular","HappyWorld",0x87654321); | |
if (uVar3 != 0) { | |
*DAT_00003e14 = uVar3 >> 2 & 0x3ffffff | 0x8000000; | |
DAT_00003e14[1] = 0; | |
writeback_dcache_clear_icache(); | |
} | |
DAT_00003e14 = (uint *)0x0; | |
iVar2 = *(int *)((int)&PTR_00003dec + unaff_s4); | |
} | |
if (iVar2 != 0) { | |
uVar3 = sctrlHENFindFunction("Circulo Rectangular","HappyWorld",0x1234567); | |
if (uVar3 == 0) { | |
PTR_00003dec = (undefined *)0x0; | |
} | |
else { | |
*(u32 *)PTR_00003dec = uVar3 >> 2 & 0x3ffffff | 0x8000000; | |
*(undefined4 *)(PTR_00003dec + 4) = 0; | |
writeback_dcache_clear_icache(); | |
PTR_00003dec = (undefined *)0x0; | |
} | |
} | |
set_k1(uVar1); | |
return; | |
} | |
void find_and_patch_nids(void) | |
{ | |
int iVar1; | |
uint *puVar2; | |
uint *puVar3; | |
uint *puVar4; | |
bool bVar5; | |
uint uVar6; | |
uint iVar6; | |
undefined3 extraout_var; | |
int iVar7; | |
uint uVar8; | |
undefined3 extraout_var_00; | |
uint iVar9; | |
undefined3 extraout_var_01; | |
undefined3 extraout_var_02; | |
undefined3 extraout_var_03; | |
void *pvVar9; | |
undefined3 extraout_var_04; | |
char **ppcVar10; | |
char *iVar12; | |
uint uVar11; | |
uint *puVar12; | |
uint iVar13; | |
uint iVar14; | |
u32 uVar13; | |
uint local_2c; | |
iVar1 = DAT_00003e10; | |
if (0 < DAT_00003de8) { | |
local_2c = 0; | |
do { | |
ppcVar10 = (char **)(iVar1 + local_2c); | |
if (*ppcVar10 == (char *)0x0) { | |
uVar6 = (uint)*(byte *)(ppcVar10 + 2); | |
} | |
else { | |
iVar6 = get_next_modname(); | |
uVar6 = (uint)*(byte *)((int)ppcVar10 + 0xb); | |
uVar11 = (uint)*(byte *)(short *)((int)ppcVar10 + 10); | |
if (*(short *)((int)ppcVar10 + 10) == 0) { | |
uVar6 = (uint)*(byte *)(ppcVar10 + 2); | |
} | |
else { | |
iVar14 = 0; | |
iVar13 = 0; | |
do { | |
while( true ) { | |
puVar12 = (uint *)(ppcVar10[4] + iVar14 * 8); | |
iVar7 = find_return(puVar12); | |
if (iVar6 == 0) break; | |
uVar8 = uVar6 << 8; | |
if (iVar7 != 0) goto LAB_00002430; | |
if ((*(byte *)((int)ppcVar10 + 7) & 0x40) == 0) { | |
uVar13 = sctrlHENFindFunction | |
((char *)iVar6,*ppcVar10,*(u32 *)(ppcVar10[3] + iVar13)); | |
iVar12 = *ppcVar10; | |
// sceKernelCreateThread | |
iVar7 = strcmp(iVar12,"ThreadManForKernel"); | |
if ((iVar7 == 0) && (*(int *)(ppcVar10[3] + iVar13) == 0x446d8de6)) { | |
uVar13 = 0x3d8; | |
goto LAB_000026a4; | |
} | |
// sceKernelLoadModuleBuffer | |
iVar7 = strcmp(iVar12,"ModuleMgrForKernel"); | |
if ((iVar7 == 0) && (*(int *)(ppcVar10[3] + iVar13) == -0x457763f9)) { | |
uVar13 = 0x7cc; | |
goto LAB_000026a4; | |
} | |
iVar7 = strcmp(iVar12,"sceNet"); | |
puVar3 = puVar12; | |
if (iVar7 != 0) { | |
iVar7 = strcmp(iVar12,"sceNet_lib"); | |
if ((iVar7 != 0) || | |
(puVar2 = (uint *)PTR_00003dec, puVar4 = DAT_00003e14, | |
*(int *)(ppcVar10[3] + iVar13) != 0x7ba3ed91)) goto LAB_0000261c; | |
LAB_0000269c: | |
DAT_00003e14 = puVar4; | |
DAT_00003df0 = puVar3; | |
PTR_00003dec = (undefined *)puVar2; | |
if (uVar13 == 0) goto LAB_00002470; | |
goto LAB_000026a4; | |
} | |
puVar2 = (uint *)PTR_00003dec; | |
puVar4 = DAT_00003e14; | |
if (*(int *)(ppcVar10[3] + iVar13) == 0x7ba3ed91) goto LAB_0000269c; | |
LAB_0000261c: | |
iVar7 = strcmp(iVar12,"sceNetApctl"); | |
// sceNetApctlInit | |
if ((((iVar7 == 0) && | |
(puVar2 = (uint *)PTR_00003dec, puVar3 = DAT_00003df0, puVar4 = puVar12, | |
*(int *)(ppcVar10[3] + iVar13) == -0x1d06e065)) || | |
((iVar9 = strcmp(&DAT_00003df4,"\"LUAPLAYER\""), puVar3 = DAT_00003df0, | |
puVar4 = DAT_00003e14, iVar9 == 0 | |
// sceNetApctlConnect && | |
((iVar7 == 0 && | |
(puVar2 = puVar12, *(int *)(ppcVar10[3] + iVar13) == -0x3046a83a)))))) || | |
(puVar2 = (uint *)PTR_00003dec, DAT_00003d70 == 0)) goto LAB_0000269c; | |
// sceKernelFindModuleByName | |
iVar7 = strcmp(&DAT_00003df4,"callisto"); | |
if (((iVar7 == 0) && (iVar7 = strcmp(iVar12,"LoadCoreForKernel"), iVar7 == 0)) && | |
(*(int *)(ppcVar10[3] + iVar13) == -0x3075be4f)) { | |
bVar5 = does_it_exist("SystemControl","KUBridge",0x1742445f); | |
puVar2 = (uint *)PTR_00003dec; | |
puVar3 = DAT_00003df0; | |
puVar4 = DAT_00003e14; | |
if (CONCAT31(extraout_var_01,bVar5) == 0) goto LAB_0000269c; | |
pvVar9 = (void *)sctrlHENFindFunction("SystemControl","KUBridge",0x1742445f); | |
sctrlHENPatchSyscall(pvVar9,FUN_000006dc); | |
uVar6 = CONCAT31(extraout_var_01,bVar5) << 6; | |
LAB_00002410: | |
puVar12[1] = uVar6 | 0xc; | |
*puVar12 = 0x3e00008; | |
uVar11 = (uint)*(byte *)((int)ppcVar10 + 10); | |
uVar6 = (uint)*(byte *)((int)ppcVar10 + 0xb); | |
} | |
else { | |
iVar7 = strcmp(iVar12,"StdioForKernel"); | |
// sceKernelIcacheClearAll, sceKernelFindModuleByName, sceKernelFindModuleByUID | |
if ((((iVar7 == 0) || (iVar7 = strcmp(iVar12,"IoFileMgrForKernel"), iVar7 == 0)) | |
|| ((iVar7 = strcmp(iVar12,"ExceptionManagerForKernel"), iVar7 == 0 || | |
(iVar7 = strcmp(iVar12,"KDebugForKernel"), iVar7 == 0)))) || | |
((iVar7 = strcmp(iVar12,"LoadCoreForKernel"), iVar7 == 0 && | |
(((iVar7 = *(int *)(ppcVar10[3] + iVar13), iVar7 == -0x2788653a || | |
(iVar7 == -0x3075be4f)) || (iVar7 == -0x331b5ea9)))))) { | |
LAB_00002704: | |
*puVar12 = 0x3e00008; | |
puVar12[1] = 0x1021; | |
uVar11 = (uint)*(byte *)((int)ppcVar10 + 10); | |
uVar6 = (uint)*(byte *)((int)ppcVar10 + 0xb); | |
} | |
else { | |
// sceKernelIcacheInvalidateAll | |
iVar7 = strcmp(iVar12,"UtilsForKernel"); | |
if ((iVar7 != 0) || (*(int *)(ppcVar10[3] + iVar13) != -0x6df0efb6)) { | |
// sceSysconCtrlLED | |
iVar7 = strcmp(iVar12,"sceSyscon_driver"); | |
if (iVar7 == 0) { | |
if (*(int *)(ppcVar10[3] + iVar13) == 0x18bfbe65) { | |
// kuKernelLoadModule | |
bVar5 = does_it_exist("SystemControl","KUBridge",0x4c25ea72); | |
if (CONCAT31(extraout_var_03,bVar5) != 0) { | |
pvVar9 = (void *)sctrlHENFindFunction | |
("SystemControl","KUBridge",0x4c25ea72); | |
sctrlHENPatchSyscall(pvVar9,set_led); | |
uVar6 = CONCAT31(extraout_var_03,bVar5) << 6; | |
goto LAB_00002410; | |
} | |
LAB_00002530: | |
*puVar12 = 0x3e00008; | |
puVar12[1] = 0x1021; | |
uVar11 = (uint)*(byte *)((int)ppcVar10 + 10); | |
uVar6 = (uint)*(byte *)((int)ppcVar10 + 0xb); | |
goto LAB_0000242c; | |
} | |
// sceSysconCtrlHRPower | |
puVar2 = (uint *)PTR_00003dec; | |
puVar3 = DAT_00003df0; | |
puVar4 = DAT_00003e14; | |
if (*(int *)(ppcVar10[3] + iVar13) == 0x44439604) goto LAB_00002704; | |
} | |
else { | |
// sceSysregUartIoEnable | |
iVar7 = strcmp(iVar12,"sceSysreg_driver"); | |
if (iVar7 == 0) { | |
puVar2 = (uint *)PTR_00003dec; | |
puVar3 = DAT_00003df0; | |
puVar4 = DAT_00003e14; | |
if (*(int *)(ppcVar10[3] + iVar13) == 0x7fd7a631) goto LAB_00002944; | |
} | |
else { | |
iVar7 = strcmp(iVar12,"sceHprm_driver"); | |
if (iVar7 == 0) { | |
bVar5 = does_it_exist((char *)iVar6,iVar12, | |
*(u32 *)(ppcVar10[3] + iVar13)); | |
iVar7 = CONCAT31(extraout_var_00,bVar5); | |
if (iVar7 != 0) goto LAB_0000240c; | |
goto LAB_00002530; | |
} | |
iVar7 = strcmp(iVar12,"sceDisplay_driver"); | |
puVar2 = (uint *)PTR_00003dec; | |
puVar3 = DAT_00003df0; | |
puVar4 = DAT_00003e14; | |
if (iVar7 == 0) { | |
if (*(int *)(ppcVar10[3] + iVar13) != -0x61c3923a) goto LAB_000023e8; | |
// kuKernelLoadModuleWithApitype2 | |
bVar5 = does_it_exist("SystemControl","KUBridge",0x1e9f0498); | |
if (CONCAT31(extraout_var_04,bVar5) == 0) goto LAB_00002704; | |
pvVar9 = (void *)sctrlHENFindFunction | |
("SystemControl","KUBridge",0x1e9f0498); | |
sctrlHENPatchSyscall(pvVar9,set_brightness); | |
uVar6 = CONCAT31(extraout_var_04,bVar5) << 6; | |
goto LAB_00002410; | |
} | |
} | |
} | |
goto LAB_0000269c; | |
} | |
bVar5 = does_it_exist("SystemControl","KUBridge",0x8e5a4057); | |
if (CONCAT31(extraout_var_02,bVar5) != 0) { | |
pvVar9 = (void *)sctrlHENFindFunction("SystemControl","KUBridge",0x8e5a4057); | |
sctrlHENPatchSyscall(pvVar9,invalidate_icache); | |
uVar6 = CONCAT31(extraout_var_02,bVar5) << 6; | |
goto LAB_00002410; | |
} | |
LAB_00002944: | |
*puVar12 = 0x3e00008; | |
puVar12[1] = 0x1021; | |
uVar11 = (uint)*(byte *)((int)ppcVar10 + 10); | |
uVar6 = (uint)*(byte *)((int)ppcVar10 + 0xb); | |
} | |
} | |
} | |
else { | |
// sceKernelExitGame | |
if (((DAT_00003d70 != 0) || | |
(iVar7 = strcmp(*ppcVar10,"LoadExecForUser"), iVar7 != 0)) || | |
(*(int *)(ppcVar10[3] + iVar13) != 0x5572a5f)) { | |
iVar7 = strcmp(*ppcVar10,"KUBridge"); | |
if (iVar7 == 0) goto LAB_00002530; | |
LAB_000023e8: | |
bVar5 = does_it_exist((char *)iVar6,*ppcVar10,*(u32 *)(ppcVar10[3] + iVar13)); | |
iVar7 = CONCAT31(extraout_var,bVar5); | |
if (iVar7 != 0) { | |
LAB_0000240c: | |
uVar6 = iVar7 << 6; | |
goto LAB_00002410; | |
} | |
goto LAB_00002470; | |
} | |
uVar13 = 0xab0; | |
LAB_000026a4: | |
*puVar12 = uVar13 >> 2 & 0x3ffffff | 0x8000000; | |
puVar12[1] = 0; | |
uVar11 = (uint)*(byte *)((int)ppcVar10 + 10); | |
uVar6 = (uint)*(byte *)((int)ppcVar10 + 0xb); | |
} | |
LAB_0000242c: | |
uVar8 = uVar6 << 8; | |
LAB_00002430: | |
iVar14 = iVar14 + 1; | |
iVar13 = iVar13 + 4; | |
if ((int)(uVar8 | uVar11) <= (int)iVar14) goto LAB_0000249c; | |
} | |
uVar8 = uVar6 << 8; | |
if (iVar7 != 0) goto LAB_00002430; | |
LAB_00002470: | |
puVar12[1] = 0; | |
*puVar12 = 0x3e00008; | |
uVar6 = (uint)*(byte *)((int)ppcVar10 + 0xb); | |
uVar11 = (uint)*(byte *)(ushort *)((int)ppcVar10 + 10); | |
iVar14 = iVar14 + 1; | |
iVar13 = iVar13 + 4; | |
} while ((int)iVar14 < (int)(uint)*(ushort *)((int)ppcVar10 + 10)); | |
LAB_0000249c: | |
uVar6 = (uint)*(byte *)(ppcVar10 + 2); | |
} | |
} | |
local_2c = local_2c + uVar6 * 4; | |
} while ((int)local_2c < DAT_00003de8); | |
} | |
writeback_dcache_clear_icache(); | |
return; | |
} | |
int FUN_00002acc_unused(SceModule *param_1,SceStubLibraryEntryTable *param_2,u32 param_3) | |
{ | |
int iVar1; | |
iVar1 = sceKernelLinkLibraryEntriesWithModule(param_1,param_2,param_3); | |
if ((DAT_00003e10 == (SceStubLibraryEntryTable *)0x0) && (iVar1 < 0)) { | |
iVar1 = 0; | |
DAT_00003de4 = sceKernelGetModuleIdByAddress(param_2); | |
DAT_00003de8 = param_3; | |
DAT_00003e10 = param_2; | |
} | |
find_and_patch_nids(); | |
return iVar1; | |
} | |
uint set_k1(uint param_1) | |
{ | |
uint in_k1; | |
return in_k1; | |
} | |
SceUID sceKernelAllocPartitionMemory(SceUID partitionid,int type,SceSize size,void *addr) | |
{ | |
SceUID in_v0; | |
return in_v0; | |
} | |
void sceKernelGetSystemStatus(void) | |
{ | |
return; | |
} | |
void * sceKernelGetBlockHeadAddr(SceUID blockid) | |
{ | |
void *in_v0; | |
return in_v0; | |
} | |
u32 sctrlHENFindFunction(char *szMod,char *szLib,u32 nid) | |
{ | |
u32 in_v0; | |
return in_v0; | |
} | |
void sctrlHENPatchSyscall(void *addr,void *newaddr) | |
{ | |
return; | |
} | |
int sctrlHENRegisterHomebrewLoader(void *func) | |
{ | |
int in_v0; | |
return in_v0; | |
} | |
SceUID sceKernelLoadModuleForLoadExecVSHMs2 | |
(int apiType,char *path,int flag,SceKernelLMOption *pOption) | |
{ | |
SceUID in_v0; | |
return in_v0; | |
} | |
int sceKernelStartModule | |
(SceUID modid,SceSize argsize,void *argp,int *status,SceKernelSMOption *option) | |
{ | |
int in_v0; | |
return in_v0; | |
} | |
SceUID sceKernelLoadModule(int flags,SceKernelLMOption *option) | |
{ | |
SceUID in_v0; | |
return in_v0; | |
} | |
void sceKernelLoadModuleBuffer(void) | |
{ | |
return; | |
} | |
int sceKernelStopUnloadSelfModule(SceSize argsize,void *argp,int *status,SceKernelSMOption *option) | |
{ | |
int in_v0; | |
return in_v0; | |
} | |
SceUID sceKernelGetModuleIdByAddress(void *addr) | |
{ | |
SceUID in_v0; | |
return in_v0; | |
} | |
void sceKernelLinkLibraryEntries(void) | |
{ | |
return; | |
} | |
int sceKernelLinkLibraryEntriesWithModule | |
(SceModule *mod,SceStubLibraryEntryTable *libStubTable,u32 size) | |
{ | |
int in_v0; | |
return in_v0; | |
} | |
void sceKernelFindModuleByUID(SceUID modid) | |
{ | |
return; | |
} | |
SceModule * sceKernelFindModuleByName(char *param_1) | |
{ | |
SceModule *in_v0; | |
return in_v0; | |
} | |
// WARNING: Unknown calling convention yet parameter storage is locked | |
void sceKernelIcacheClearAll(void) | |
{ | |
return; | |
} | |
SceUID kuKernelLoadModule(char *path,int flags,SceKernelLMOption *option) | |
{ | |
SceUID in_v0; | |
return in_v0; | |
} | |
SceUID kuKernelLoadModuleWithApitype2(int apitype,char *path,int flags,SceKernelLMOption *option) | |
{ | |
SceUID in_v0; | |
return in_v0; | |
} | |
int kuKernelInitApitype(void) | |
{ | |
int in_v0; | |
return in_v0; | |
} | |
int kuKernelInitFileName(char *initfilename) | |
{ | |
int in_v0; | |
return in_v0; | |
} | |
int kuKernelBootFrom(void) | |
{ | |
int in_v0; | |
return in_v0; | |
} | |
int kuKernelInitKeyConfig(void) | |
{ | |
int in_v0; | |
return in_v0; | |
} | |
int kuKernelGetUserLevel(void) | |
{ | |
int in_v0; | |
return in_v0; | |
} | |
int kuKernelSetDdrMemoryProtection(void *addr,int size,int prot) | |
{ | |
int in_v0; | |
return in_v0; | |
} | |
int kuKernelGetModel(void) | |
{ | |
int in_v0; | |
return in_v0; | |
} | |
void sceDisplaySetBrightness(int level,int unk1) | |
{ | |
return; | |
} | |
int sceCtrlPeekBufferPositive(SceCtrlData *pad_data,int count) | |
{ | |
int in_v0; | |
return in_v0; | |
} | |
void sceCtrlReadBufferPositive(void) | |
{ | |
return; | |
} | |
void Kprintf(void) | |
{ | |
return; | |
} | |
void sceIoRead(void) | |
{ | |
return; | |
} | |
SceOff sceIoLseek(SceUID fd,SceOff offset,int whence) | |
{ | |
undefined4 in_v0; | |
undefined4 in_v1; | |
return CONCAT44(in_v0,in_v1); | |
} | |
// WARNING: Unknown calling convention yet parameter storage is locked | |
void sceKernelDcacheWritebackAll(void) | |
{ | |
return; | |
} | |
void sceKernelIcacheInvalidateAll(void) | |
{ | |
return; | |
} | |
int sceSysconCtrlLED(int SceLED,int state) | |
{ | |
int in_v0; | |
return in_v0; | |
} | |
void sceKernelQuerySystemCall(void) | |
{ | |
return; | |
} | |
void sceKernelDelayThread(void) | |
{ | |
return; | |
} | |
void sceKernelCreateThread(void) | |
{ | |
return; | |
} | |
int sceKernelStartThread(SceUID thid,SceSize arglen,void *argp) | |
{ | |
int in_v0; | |
return in_v0; | |
} | |
int sceKernelExitDeleteThread(int status) | |
{ | |
int in_v0; | |
return in_v0; | |
} | |
void strstr(void) | |
{ | |
return; | |
} | |
int strcmp(char *param_1,char *param_2) | |
{ | |
int in_v0; | |
return in_v0; | |
} | |
void strcpy(void) | |
{ | |
return; | |
} | |
// WARNING: Unknown calling convention yet parameter storage is locked | |
int sceKernelExitVSHKernel(void) | |
{ | |
int in_v0; | |
return in_v0; | |
} | |
// WARNING: Unknown calling convention yet parameter storage is locked | |
int sceKernelInitApitype(void) | |
{ | |
int in_v0; | |
return in_v0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment