/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400c8610 FUN_1400c8610 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_1400c8610(longlong *param_1,undefined8 param_2,longlong ****param_3,longlong param_4) { int *piVar1; undefined8 *puVar2; longlong ******pppppplVar3; char cVar4; int *piVar5; longlong *plVar6; undefined8 uVar7; int *piVar8; longlong lVar9; bool bVar10; undefined1 auStack_1d8 [32]; char local_1b8; int local_1b7; longlong ******local_1b0; longlong ******local_1a8; longlong *local_1a0; undefined1 local_198; int *local_190; undefined1 local_188; undefined8 local_180; longlong local_178 [39]; int *local_40; ulonglong local_28; local_180 = 0xfffffffffffffffe; local_28 = DAT_1401ac5a0 ^ (ulonglong)auStack_1d8; FUN_1400f8570(&local_1b8); if (*(longlong *)(param_1[0x29] + 0x758) != 0) { (**(code **)(**(longlong **)(param_1[0x29] + 0x758) + 0x58))(); } piVar5 = (int *)(**(code **)(*(longlong *)param_1[0x29] + 0x58))(); plVar6 = local_178; FUN_1400de500((undefined4 *)plVar6,piVar5); cVar4 = (char)param_1[0x28]; while (cVar4 == '\0') { local_1b0 = (longlong ******)0x0; plVar6 = (longlong *)(**(code **)(*(longlong *)param_1[0x29] + 0x58))(); local_1a0 = plVar6; FUN_14006b350((int *)plVar6); local_198 = 1; if (DAT_1401b42cf != '\0') { (**(code **)(*(longlong *)param_1[0x29] + 200)) ((longlong *)param_1[0x29],L"Proud::CNetThreads_S::UserWorkerThread_Main"); } param_3 = (longlong ****)&local_1b0; piVar5 = local_40; uVar7 = FUN_1400ded10(param_1 + 0x2c,(longlong)local_40,(longlong *)param_3,param_4); cVar4 = (char)uVar7; FUN_14006b3e0((longlong)plVar6); local_198 = 0; if (cVar4 == '\x01') { if (*(longlong *)(param_1[0x29] + 0x758) != 0) { puVar2 = *(undefined8 **)(param_1[0x29] + 0x758); param_3 = (longlong ****)*puVar2; (*(code *)param_3[0xf])(puVar2,&local_1b7); } piVar1 = local_40; plVar6 = param_1; piVar5 = local_40; if (*local_40 == 1) { param_3 = (longlong ****)local_1b0; FUN_1400c26d0((longlong)param_1,(longlong)local_40,(char *)local_1b0,param_4); } else if (*local_40 == 2) { param_3 = (longlong ****)local_1b0; FUN_1400c7d50((longlong)param_1,(longlong)local_40,(char *)local_1b0,param_4); } else { FUN_1400958c0((longlong *)param_1[0x29],local_40 + 0x14,param_3,param_4); param_3 = (longlong ****)0x0; piVar5 = (int *)(ulonglong)(uint)piVar1[0xc]; plVar6 = param_1 + 0x2c; FUN_1400dee00(plVar6,piVar1[0xc],'\0',param_4); } if (*(longlong *)(param_1[0x29] + 0x758) != 0) { plVar6 = *(longlong **)(param_1[0x29] + 0x758); piVar5 = &local_1b7; (**(code **)(*plVar6 + 0x80))(); } } if (*(longlong *)(param_1[0x29] + 0x758) != 0) { LOCK(); bVar10 = (int)param_1[0x48] == 0; if (bVar10) { *(int *)(param_1 + 0x48) = 1; } UNLOCK(); if (bVar10) { LOCK(); bVar10 = (int)param_1[0x40] == 1; if (bVar10) { *(int *)(param_1 + 0x40) = 0; } UNLOCK(); if (bVar10) { cVar4 = '\x01'; plVar6 = *(longlong **)(param_1[0x29] + 0x758); piVar5 = *(int **)(param_1[0x29] + 0x260); (**(code **)(*plVar6 + 0x88))(); } LOCK(); *(undefined4 *)(param_1 + 0x48) = 0; UNLOCK(); } } if (cVar4 == '\0') { plVar6 = param_1 + 0x2c; FUN_1400dec80((longlong)plVar6); } cVar4 = (char)param_1[0x28]; } if (*(longlong *)(param_1[0x29] + 0x758) != 0) { plVar6 = *(longlong **)(param_1[0x29] + 0x758); (**(code **)(*plVar6 + 0x60))(); } if (*(longlong *)(param_1[0x29] + 0x17f0) != 0) { FUN_14006cb70(plVar6,piVar5,param_3,param_4); local_1a8 = (longlong ******)PTR_DAT_1401ac010; FUN_140053d20((longlong *)&local_1a8,L"%s thread 종료.", L"Proud::CNetThreads_S::UserWorkerThread_Main",param_4); pppppplVar3 = local_1a8; param_3 = (longlong ****)local_1a8; if ((longlong *******)local_1a8 == (longlong *******)0x0) { param_3 = (longlong ****)PTR_DAT_1401ac010; } piVar5 = (int *)0x0; lVar9 = *(longlong *)(param_1[0x29] + 0x17f0); FUN_1400cb700(lVar9,0,(short *)param_3,param_4); if ((((longlong *******)pppppplVar3 != (longlong *******)0x0) && (pppppplVar3 != (longlong ******)PTR_DAT_1401ac010)) && ((longlong *******)(pppppplVar3 + -1) != (longlong *******)0x0)) { piVar8 = (int *)FUN_14006cb70(lVar9,piVar5,param_3,param_4); local_190 = piVar8; FUN_14006b350(piVar8); local_188 = 1; piVar1 = (int *)((longlong)pppppplVar3 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14006cc60(pppppplVar3 + -1); } FUN_14006b3e0((longlong)piVar8); } } FUN_1400de540((longlong)local_178,piVar5,param_3,param_4); FUN_1400f85a0(&local_1b8); return; }