/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400ca320 FUN_1400ca320 * Pseudocode, not original source. */ void FUN_1400ca320(IMAGE_DOS_HEADER *param_1,undefined8 param_2,IMAGE_DOS_HEADER *param_3, IMAGE_DOS_HEADER *param_4) { int *piVar1; byte bVar2; uint uVar3; short *psVar4; bool bVar5; HANDLE hThread; undefined8 uVar6; IMAGE_DOS_HEADER *pIVar7; IMAGE_DOS_HEADER *pIVar8; int *piVar9; longlong lVar10; IMAGE_DOS_HEADER *pIVar11; IMAGE_DOS_HEADER *pIVar12; int iVar13; undefined4 *puVar15; ulonglong uVar16; short *psVar17; ulonglong uVar18; double dVar19; char local_res10 [8]; longlong *local_res18; short *local_res20; undefined **local_108; IMAGE_DOS_HEADER *local_100; IMAGE_DOS_HEADER *local_f8; undefined8 local_f0; undefined8 local_e8; undefined **local_e0; longlong *local_d8; LPVOID local_d0; undefined8 local_c8; word local_c0 [4]; undefined **local_b8; longlong *local_b0; LPVOID local_a8; byte local_a0 [16]; IMAGE_DOS_HEADER *local_90; undefined8 local_88; uint local_80; byte local_78 [8]; word local_70 [4]; undefined **local_68; word local_60 [2]; word local_5c; int *local_58; byte local_50; byte local_48 [16]; ulonglong uVar14; local_48[0] = 0xfe; local_48[1] = 0xff; local_48[2] = 0xff; local_48[3] = 0xff; local_48[4] = 0xff; local_48[5] = 0xff; local_48[6] = 0xff; local_48[7] = 0xff; hThread = GetCurrentThread(); pIVar12 = (IMAGE_DOS_HEADER *)0x0; SetThreadPriorityBoost(hThread,0); pIVar11 = (IMAGE_DOS_HEADER *)local_res10; FUN_1400f8570(pIVar11); local_b8 = Proud::CFastArray::vftable; uVar16 = 0; local_b0 = (longlong *)0x0; local_a8 = (LPVOID)0x0; local_a0[0] = 0; local_a0[1] = 0; local_a0[2] = 0; local_a0[3] = 0; local_a0[4] = 0; local_a0[5] = 0; local_a0[6] = 0; local_a0[7] = 0; local_a0[8] = 0; local_a0[9] = 0; local_a0[10] = 0; local_a0[0xb] = 0; local_a0[0xc] = 0; local_a0[0xd] = 0; local_a0[0xe] = 0; local_a0[0xf] = 0; local_d8 = (longlong *)0x0; local_d0 = (LPVOID)0x0; local_c8._0_2_ = 0; local_c8._2_2_ = 0; local_c8._4_2_ = 0; local_c8._6_2_ = 0; local_e0 = Proud::CReceivedMessageList::vftable; local_c0[0] = 1000; local_c0[1] = 0; local_c0[2] = 1; local_c0[3] = 0; bVar5 = FUN_14006c410(pIVar11,pIVar12,param_3,param_4); if (bVar5) { local_108 = Proud::CFastArray::vftable; local_100 = (IMAGE_DOS_HEADER *)0x0; local_f8 = (IMAGE_DOS_HEADER *)0x0; local_f0 = 0; local_e8 = 0; pIVar12 = (IMAGE_DOS_HEADER *)0xa; FUN_1400c2510((longlong)&local_108,10,param_3,param_4); local_res18 = (longlong *)((ulonglong)local_res18 & 0xffffffff00000000); while (param_1[2].e_program[0] == 0) { param_4 = (IMAGE_DOS_HEADER *)(ulonglong)DAT_1401ac068; param_3 = (IMAGE_DOS_HEADER *)&local_res18; uVar6 = FUN_140075840(*(char **)(*(longlong *)(param_1[2].e_program + 8) + 0x788), (longlong *)&local_108,(uint *)param_3,param_4); pIVar12 = *(IMAGE_DOS_HEADER **)(*(longlong *)(param_1[2].e_program + 8) + 0x118); dVar19 = (double)(**(code **)&pIVar12->e_cparhdr)(); pIVar11 = *(IMAGE_DOS_HEADER **)(param_1[2].e_program + 8); if (*(double *)(pIVar11[0x10].e_res_4_ + 2) <= dVar19 - *(double *)(param_1 + 2) && dVar19 - *(double *)(param_1 + 2) != *(double *)(pIVar11[0x10].e_res_4_ + 2)) { *(double *)(param_1 + 2) = dVar19; pIVar12 = (IMAGE_DOS_HEADER *)&local_b8; pIVar11 = param_1; FUN_1400c2170((longlong)param_1,(longlong)pIVar12,param_3,(longlong)param_4); } if (((char)uVar6 != '\0') && (uVar14 = uVar16, uVar18 = uVar16, (uint)local_res18 != 0)) { do { iVar13 = (int)uVar14; if ((iVar13 < 0) || ((int)local_f0 <= iVar13)) { /* WARNING: Subroutine does not return */ FUN_14006be30(pIVar11,pIVar12,param_3,param_4); } pIVar12 = (IMAGE_DOS_HEADER *)(local_f8->e_magic + (longlong)iVar13 * 0x38); param_3 = (IMAGE_DOS_HEADER *)&local_e0; pIVar11 = param_1; FUN_1400ca250((longlong *)param_1,(undefined8 *)pIVar12,param_3,param_4); if ((int)local_f0 <= iVar13) { /* WARNING: Subroutine does not return */ FUN_14006be30(pIVar11,pIVar12,param_3,param_4); } pIVar8 = (IMAGE_DOS_HEADER *)(local_f8->e_magic + uVar18); pIVar11 = *(IMAGE_DOS_HEADER **)pIVar8; pIVar7 = (IMAGE_DOS_HEADER *)FUN_1400debf0((longlong *)pIVar11); if (pIVar7 != (IMAGE_DOS_HEADER *)0x0) { uVar3._0_2_ = pIVar8->e_sp; uVar3._2_2_ = pIVar8->e_csum; pIVar11 = (IMAGE_DOS_HEADER *)(ulonglong)uVar3; if (uVar3 == 2) { param_4 = (IMAGE_DOS_HEADER *)&local_e0; pIVar11 = param_1; FUN_1400c96e0((byte **)param_1,(longlong)pIVar8,pIVar7,param_4); pIVar12 = pIVar8; param_3 = pIVar7; } else if (uVar3 == 1) { pIVar11 = param_1; FUN_1400c1b10((longlong)param_1,(longlong)pIVar8,(longlong)pIVar7,param_4); pIVar12 = pIVar8; param_3 = pIVar7; } } uVar14 = (ulonglong)(iVar13 + 1U); uVar18 = uVar18 + 0x38; } while (iVar13 + 1U < (uint)local_res18); } } local_108 = Proud::CFastArray::vftable; pIVar11 = local_f8; if (local_f8 != (IMAGE_DOS_HEADER *)0x0) { param_3 = local_100; if (local_100 == (IMAGE_DOS_HEADER *)0x0) { FUN_14006cc60(local_f8); } else { pIVar11 = local_100; pIVar12 = local_f8; (**(code **)(*(longlong *)local_100 + 0x18))(); } } } else { bVar2 = param_1[2].e_program[0]; while (bVar2 == 0) { local_68 = Proud::AddrPort::vftable; local_90 = (IMAGE_DOS_HEADER *)0x0; local_78[0] = 0; local_78[1] = 0; local_78[2] = 0; local_78[3] = 0; local_78[4] = 0; local_78[5] = 0; local_78[6] = 0; local_78[7] = 0; local_88._0_2_ = 0; local_88._2_2_ = 0; local_88._4_2_ = 0; local_88._6_2_ = 0; local_80 = 5; local_70[0] = 0; local_70[1] = 0; param_3 = (IMAGE_DOS_HEADER *)(ulonglong)DAT_1401ac068; local_60 = (word [2])DAT_1401ac3d0; local_5c = DAT_1401ac3d4; uVar6 = FUN_1400753f0(*(char **)(*(longlong *)(param_1[2].e_program + 8) + 0x788), (longlong *)&local_90,(ulonglong)param_3,param_4); pIVar12 = *(IMAGE_DOS_HEADER **)(*(longlong *)(param_1[2].e_program + 8) + 0x118); dVar19 = (double)(**(code **)&pIVar12->e_cparhdr)(); pIVar11 = *(IMAGE_DOS_HEADER **)(param_1[2].e_program + 8); if (*(double *)(pIVar11[0x10].e_res_4_ + 2) <= dVar19 - *(double *)(param_1 + 2) && dVar19 - *(double *)(param_1 + 2) != *(double *)(pIVar11[0x10].e_res_4_ + 2)) { *(double *)(param_1 + 2) = dVar19; pIVar12 = (IMAGE_DOS_HEADER *)&local_b8; pIVar11 = param_1; FUN_1400c2170((longlong)param_1,(longlong)pIVar12,param_3,(longlong)param_4); } if ((char)uVar6 != '\0') { param_3 = (IMAGE_DOS_HEADER *)&local_e0; pIVar12 = (IMAGE_DOS_HEADER *)&local_90; FUN_1400ca250((longlong *)param_1,(undefined8 *)pIVar12,param_3,param_4); pIVar11 = local_90; pIVar8 = (IMAGE_DOS_HEADER *)FUN_1400debf0((longlong *)local_90); if (pIVar8 != (IMAGE_DOS_HEADER *)0x0) { pIVar11 = (IMAGE_DOS_HEADER *)(ulonglong)local_80; if (local_80 == 2) { param_4 = (IMAGE_DOS_HEADER *)&local_e0; pIVar12 = (IMAGE_DOS_HEADER *)&local_90; pIVar11 = param_1; FUN_1400c96e0((byte **)param_1,(longlong)pIVar12,pIVar8,param_4); param_3 = pIVar8; } else if (local_80 == 1) { pIVar12 = (IMAGE_DOS_HEADER *)&local_90; pIVar11 = param_1; FUN_1400c1b10((longlong)param_1,(longlong)pIVar12,(longlong)pIVar8,param_4); param_3 = pIVar8; } } } bVar2 = param_1[2].e_program[0]; } } if (*(longlong *)(*(longlong *)(param_1[2].e_program + 8) + 0x17f0) != 0) { FUN_14006cb70(pIVar11,pIVar12,param_3,param_4); local_res20 = (short *)PTR_DAT_1401ac010; FUN_140053d20((longlong *)&local_res20,L"%s thread 종료.", L"Proud::CNetThreads_S::NetWorkerThread_Main",param_4); psVar4 = local_res20; psVar17 = local_res20; if (local_res20 == (short *)0x0) { psVar17 = (short *)PTR_DAT_1401ac010; } uVar6 = 0; lVar10 = *(longlong *)(*(longlong *)(param_1[2].e_program + 8) + 0x17f0); FUN_1400cb700(lVar10,0,psVar17,param_4); if (((psVar4 != (short *)0x0) && (psVar4 != (short *)PTR_DAT_1401ac010)) && (psVar4 + -4 != (short *)0x0)) { piVar9 = (int *)FUN_14006cb70(lVar10,uVar6,psVar17,param_4); local_58 = piVar9; FUN_14006b350(piVar9); local_50 = 1; piVar1 = (int *)(psVar4 + -2); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14006cc60(psVar4 + -4); } FUN_14006b3e0((longlong)piVar9); } } local_e0 = Proud::CFastArray::vftable; lVar10 = (longlong)(int)local_c8; if (0 < (int)local_c8) { puVar15 = (undefined4 *)((longlong)local_d0 + 0x18); do { local_res18 = (longlong *)(puVar15 + -4); FUN_1400d1800(local_res18); if (*(longlong *)(puVar15 + -2) != 0) { if ((int)puVar15[1] < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } *puVar15 = 0; } uVar16 = uVar16 + 1; puVar15 = puVar15 + 0x12; } while ((longlong)uVar16 < lVar10); } if (local_d0 != (LPVOID)0x0) { if (local_d8 == (longlong *)0x0) { FUN_14006cc60(local_d0); } else { (**(code **)(*local_d8 + 0x18))(local_d8,local_d0); } } if (local_a8 != (LPVOID)0x0) { if (local_b0 == (longlong *)0x0) { FUN_14006cc60(local_a8); } else { (**(code **)(*local_b0 + 0x18))(local_b0,local_a8); } } FUN_1400f85a0(local_res10); return; }