/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400babb0 FUN_1400babb0 * Pseudocode, not original source. */ void FUN_1400babb0(longlong *param_1,double param_2,undefined *param_3,undefined *param_4) { undefined8 *puVar1; double dVar2; bool bVar3; DWORD DVar4; DWORD DVar5; undefined *puVar6; undefined *puVar7; undefined **ppuVar8; int *piVar9; longlong *plVar10; int *piVar11; longlong *plVar12; undefined8 in_RDX; wchar_t *pwVar13; char cVar14; int *piVar15; SIZE_T SVar16; longlong lVar17; undefined *puVar18; undefined8 uVar19; undefined *local_res10; undefined *local_res18; undefined *local_res20; undefined *local_168; int *local_160; char local_158; longlong *local_150; undefined1 local_148; undefined *local_140; undefined *local_138; undefined *local_130; undefined *local_128; undefined *local_120; undefined *local_118; undefined **local_110; undefined1 local_108; undefined **local_100; undefined1 local_f8; int *local_f0; undefined1 local_e8; undefined8 local_e0; int *local_d8; undefined1 local_d0; int *local_c8; undefined1 local_c0; undefined **local_b8; undefined1 local_b0; int *local_a8; undefined1 local_a0; int *local_98; undefined1 local_90; int *local_88; undefined1 local_80; int *local_78; undefined1 local_70; local_e0 = 0xfffffffffffffffe; local_150 = param_1 + 0x95; local_res18 = param_3; FUN_14006b350((int *)local_150); local_148 = 1; (**(code **)(param_1[1] + 0x18))(); bVar3 = false; puVar18 = (undefined *)0x0; puVar7 = puVar18; if (param_1[0xad] != 0) { puVar7 = *(undefined **)(param_1[0xad] + 0x38); } FUN_14006b350((int *)(puVar7 + 0x10)); puVar6 = puVar18; if (param_1[0xad] != 0) { puVar6 = *(undefined **)(param_1[0xad] + 0x38); } *(int *)(puVar6 + 0x288) = *(int *)(puVar6 + 0x288) + 1; LOCK(); *(int *)(param_1 + 0xa2) = (int)param_1[0xa2] + 1; UNLOCK(); FUN_14006b3e0((longlong)(puVar7 + 0x10)); DVar4 = GetTickCount(); dVar2 = param_2 * 2.0 * 1000.0; if (dVar2 <= 100000.0) { dVar2 = 100000.0; } if (((char)param_1[0x2e4] != '\0') || ((int)param_1[0xcb] != 0)) { puVar7 = puVar18; if (param_1[0xad] != 0) { puVar7 = *(undefined **)(param_1[0xad] + 0x38); } piVar15 = (int *)(puVar7 + 0x10); local_88 = piVar15; FUN_14006b350(piVar15); local_80 = 1; param_4 = (undefined *)(ulonglong)*(uint *)(param_1 + 0x2a1); param_3 = &DAT_14013eba0; in_RDX = 0; FUN_1400af0e0((longlong)(param_1 + -0xe),0, L"Client %d: CNetClient.Disconnect를 사용자가 콜 하였습니다.",param_4); FUN_14006b3e0((longlong)piVar15); } plVar12 = param_1 + -0xe; puVar7 = puVar18; do { piVar15 = (int *)(**(code **)(*plVar12 + 0x58))(plVar12); local_160 = piVar15; FUN_14006b350(piVar15); local_158 = '\x01'; if (((longlong *)param_1[0xac] == (longlong *)0x0) || (lVar17 = *(longlong *)param_1[0xac], lVar17 == 0)) { if ((((longlong *)param_1[0x2a0] != (longlong *)0x0) && (*(longlong *)param_1[0x2a0] != 0)) || (((longlong *)param_1[0x296] != (longlong *)0x0 && (*(longlong *)param_1[0x296] != 0)))) { FUN_14006cb70(0,in_RDX,param_3,param_4); local_140 = PTR_DAT_1401ac010; plVar10 = FUN_14006c8a0((longlong *)&local_118,in_RDX,param_3,param_4); param_3 = (undefined *)*plVar10; if ((undefined *)*plVar10 == (undefined *)0x0) { param_3 = PTR_DAT_1401ac010; } pwVar13 = L"Unstability in Disconnect #1! Process=%s"; ppuVar8 = &local_140; FUN_140053d20((longlong *)ppuVar8,L"Unstability in Disconnect #1! Process=%s",param_3, param_4); if (((local_118 != (undefined *)0x0) && (local_118 != PTR_DAT_1401ac010)) && (local_118 + -8 != (undefined *)0x0)) { ppuVar8 = (undefined **)FUN_14006cb70(ppuVar8,pwVar13,param_3,param_4); local_b8 = ppuVar8; FUN_14006b350((int *)ppuVar8); local_b0 = 1; piVar9 = (int *)(local_118 + -4); *piVar9 = *piVar9 + -1; if (*piVar9 == 0) { FUN_14006cc60(local_118 + -8); } FUN_14006b3e0((longlong)ppuVar8); } FUN_14006cb70(ppuVar8,pwVar13,param_3,param_4); puVar7 = local_140; local_168 = PTR_DAT_1401ac010; if (PTR_DAT_1401ac010 == (undefined *)0x0) { local_168 = puVar18; } if (local_140 != PTR_DAT_1401ac010) { piVar9 = (int *)FUN_14006cb70(ppuVar8,pwVar13,param_3,param_4); local_98 = piVar9; FUN_14006b350(piVar9); local_90 = 1; FUN_1400031e0((longlong *)&local_168,pwVar13,param_3,param_4); local_168 = puVar7; if (((puVar7 != PTR_DAT_1401ac010) && (puVar7 != (undefined *)0x0)) && (puVar7 != (undefined *)0x8)) { *(int *)(puVar7 + -4) = *(int *)(puVar7 + -4) + 1; } FUN_14006b3e0((longlong)piVar9); } ppuVar8 = &local_168; FUN_14006fa80((longlong *)ppuVar8,pwVar13,param_3,param_4); if (((puVar7 != (undefined *)0x0) && (puVar7 != PTR_DAT_1401ac010)) && (puVar7 + -8 != (undefined *)0x0)) { piVar11 = (int *)FUN_14006cb70(ppuVar8,pwVar13,param_3,param_4); local_78 = piVar11; FUN_14006b350(piVar11); local_70 = 1; piVar9 = (int *)(puVar7 + -4); *piVar9 = *piVar9 + -1; if (*piVar9 == 0) { FUN_14006cc60(puVar7 + -8); } FUN_14006b3e0((longlong)piVar11); } } FUN_1400b7b20((longlong)plVar12,'\x01',(SIZE_T)param_3,param_4); FUN_14006b3e0((longlong)piVar15); LAB_1400bb39d: FUN_14006b3e0((longlong)local_150); return; } if ((*(int *)(lVar17 + 0x100) == 5) && (param_1[0x2d5] == 0)) { FUN_1400b7b20((longlong)plVar12,'\x01',(SIZE_T)param_3,param_4); FUN_14006b3e0((longlong)local_160); goto LAB_1400bb39d; } if (DAT_1401b45d0 != '\0') { FUN_1400b7b20((longlong)plVar12,'\x01',(SIZE_T)param_3,param_4); FUN_14006b3e0((longlong)local_160); goto LAB_1400bb39d; } puVar6 = puVar18; if (param_1[0xad] != 0) { puVar6 = *(undefined **)(param_1[0xad] + 0x38); } if (*(longlong *)(puVar6 + 0x2b8) == 0) { puVar7 = puVar18; if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) { puVar7 = *(undefined **)param_1[0xac]; } uVar19 = 5; FUN_1400dfd60((longlong)puVar7,5); FUN_14006cb70(puVar7,uVar19,param_3,param_4); local_138 = PTR_DAT_1401ac010; plVar10 = FUN_14006c8a0((longlong *)&local_128,uVar19,param_3,param_4); puVar7 = (undefined *)*plVar10; if ((undefined *)*plVar10 == (undefined *)0x0) { puVar7 = PTR_DAT_1401ac010; } pwVar13 = L"Unstability in Disconnect #2! Process=%s"; ppuVar8 = &local_138; FUN_140053d20((longlong *)ppuVar8,L"Unstability in Disconnect #2! Process=%s",puVar7,param_4); if (((local_128 != (undefined *)0x0) && (local_128 != PTR_DAT_1401ac010)) && (local_128 + -8 != (undefined *)0x0)) { ppuVar8 = (undefined **)FUN_14006cb70(ppuVar8,pwVar13,puVar7,param_4); local_100 = ppuVar8; FUN_14006b350((int *)ppuVar8); local_f8 = 1; piVar15 = (int *)(local_128 + -4); *piVar15 = *piVar15 + -1; if (*piVar15 == 0) { FUN_14006cc60(local_128 + -8); } FUN_14006b3e0((longlong)ppuVar8); } FUN_14006cb70(ppuVar8,pwVar13,puVar7,param_4); puVar6 = local_138; local_res20 = PTR_DAT_1401ac010; if (PTR_DAT_1401ac010 == (undefined *)0x0) { local_res20 = puVar18; } if (local_138 != PTR_DAT_1401ac010) { piVar15 = (int *)FUN_14006cb70(ppuVar8,pwVar13,puVar7,param_4); local_f0 = piVar15; FUN_14006b350(piVar15); local_e8 = 1; FUN_1400031e0((longlong *)&local_res20,pwVar13,puVar7,param_4); local_res20 = puVar6; if (((puVar6 != PTR_DAT_1401ac010) && (puVar6 != (undefined *)0x0)) && (puVar6 != (undefined *)0x8)) { *(int *)(puVar6 + -4) = *(int *)(puVar6 + -4) + 1; } FUN_14006b3e0((longlong)piVar15); } ppuVar8 = &local_res20; FUN_14006fa80((longlong *)ppuVar8,pwVar13,puVar7,param_4); if (((puVar6 != (undefined *)0x0) && (puVar6 != PTR_DAT_1401ac010)) && (puVar6 + -8 != (undefined *)0x0)) { piVar9 = (int *)FUN_14006cb70(ppuVar8,pwVar13,puVar7,param_4); local_d8 = piVar9; FUN_14006b350(piVar9); local_d0 = 1; piVar15 = (int *)(puVar6 + -4); *piVar15 = *piVar15 + -1; if (*piVar15 == 0) { FUN_14006cc60(puVar6 + -8); } FUN_14006b3e0((longlong)piVar9); } FUN_1400b7b20((longlong)plVar12,'\x01',(SIZE_T)puVar7,param_4); FUN_14006b3e0((longlong)local_160); goto LAB_1400bb39d; } DVar5 = GetTickCount(); if (dVar2 < (double)(DVar5 - DVar4)) { FUN_14006cb70(puVar6,in_RDX,param_3,param_4); local_130 = PTR_DAT_1401ac010; FUN_14006c8a0((longlong *)&local_120,in_RDX,param_3,param_4); puVar7 = puVar18; if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) { puVar7 = *(undefined **)param_1[0xac]; } lVar17 = param_1[0x2d5]; SVar16 = (SIZE_T)*(uint *)(puVar7 + 0x100); pwVar13 = L"CNetClient.Disconnect seems to be freezed ## State=%d##GarbageCount=%d##Process=%s"; ppuVar8 = &local_130; FUN_140053d20((longlong *)ppuVar8, L"CNetClient.Disconnect seems to be freezed ## State=%d##GarbageCount=%d##Process=%s" ,SVar16,lVar17); if (((local_120 != (undefined *)0x0) && (local_120 != PTR_DAT_1401ac010)) && (local_120 + -8 != (undefined *)0x0)) { ppuVar8 = (undefined **)FUN_14006cb70(ppuVar8,pwVar13,SVar16,lVar17); local_110 = ppuVar8; FUN_14006b350((int *)ppuVar8); local_108 = 1; piVar15 = (int *)(local_120 + -4); *piVar15 = *piVar15 + -1; if (*piVar15 == 0) { FUN_14006cc60(local_120 + -8); } FUN_14006b3e0((longlong)ppuVar8); } FUN_14006cb70(ppuVar8,pwVar13,SVar16,lVar17); puVar7 = local_130; local_res10 = PTR_DAT_1401ac010; if (PTR_DAT_1401ac010 == (undefined *)0x0) { local_res10 = puVar18; } if (local_130 != PTR_DAT_1401ac010) { piVar15 = (int *)FUN_14006cb70(ppuVar8,pwVar13,SVar16,lVar17); local_a8 = piVar15; FUN_14006b350(piVar15); local_a0 = 1; FUN_1400031e0((longlong *)&local_res10,pwVar13,SVar16,lVar17); local_res10 = puVar7; if (((puVar7 != PTR_DAT_1401ac010) && (puVar7 != (undefined *)0x0)) && (puVar7 != (undefined *)0x8)) { *(int *)(puVar7 + -4) = *(int *)(puVar7 + -4) + 1; } FUN_14006b3e0((longlong)piVar15); } FUN_14006fa80((longlong *)&local_res10,pwVar13,SVar16,lVar17); if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) { puVar18 = *(undefined **)param_1[0xac]; } uVar19 = 0; FUN_1400dfd60((longlong)puVar18,5); uVar19 = CONCAT71((int7)((ulonglong)uVar19 >> 8),1); FUN_1400b7b20((longlong)plVar12,'\x01',SVar16,lVar17); if (((puVar7 != (undefined *)0x0) && (puVar7 != PTR_DAT_1401ac010)) && (puVar7 + -8 != (undefined *)0x0)) { piVar9 = (int *)FUN_14006cb70(plVar12,uVar19,SVar16,lVar17); local_c8 = piVar9; FUN_14006b350(piVar9); local_c0 = 1; piVar15 = (int *)(puVar7 + -4); *piVar15 = *piVar15 + -1; if (*piVar15 == 0) { FUN_14006cc60(puVar7 + -8); } FUN_14006b3e0((longlong)piVar9); } FUN_14006b3e0((longlong)local_160); goto LAB_1400bb39d; } if (!bVar3) { bVar3 = true; puVar6 = puVar18; if (param_1[0xad] != 0) { puVar6 = *(undefined **)(param_1[0xad] + 0x38); } FUN_14006b480((longlong)(puVar6 + 0x10)); puVar6 = puVar18; if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) { puVar6 = *(undefined **)param_1[0xac]; } puVar1 = (undefined8 *)param_1[0xac]; if (*(int *)(puVar6 + 0x100) == 3) { puVar6 = puVar18; if (puVar1 != (undefined8 *)0x0) { puVar6 = (undefined *)*puVar1; } uVar19 = (**(code **)(*param_1 + 0x1c0))(param_1); *(undefined8 *)(puVar6 + 0xd0) = uVar19; puVar6 = puVar18; if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) { puVar6 = *(undefined **)param_1[0xac]; } *(double *)(puVar6 + 0xd8) = param_2; param_3 = &DAT_1401b6110; in_RDX = 1; param_4 = local_res18; (**(code **)(param_1[0x2f5] + 0x80))(); } else { puVar6 = puVar18; if (puVar1 != (undefined8 *)0x0) { puVar6 = (undefined *)*puVar1; } if (*(int *)(puVar6 + 0x100) < 3) { puVar6 = puVar18; if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) { puVar6 = *(undefined **)param_1[0xac]; } in_RDX = 4; FUN_1400dfd60((longlong)puVar6,4); } } } piVar15 = local_160; cVar14 = local_158; if (0 < (int)puVar7) { FUN_14006b3e0((longlong)local_160); Sleep(10); cVar14 = '\0'; } puVar7 = (undefined *)(ulonglong)((int)puVar7 + 1); if (cVar14 != '\0') { FUN_14006b3e0((longlong)piVar15); } } while( true ); }