/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x14008be60 FUN_14008be60 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_14008be60(undefined ***param_1,undefined ***param_2,undefined ***param_3, undefined ***param_4) { undefined **ppuVar1; int *piVar2; uint uVar3; uint uVar4; undefined8 uVar5; ulonglong uVar6; uint *puVar7; undefined ***pppuVar8; int *piVar9; uint uVar10; uint uVar11; char *pcVar12; undefined ***pppuVar13; undefined **ppuVar14; undefined *puVar15; undefined ***pppuVar16; uint uVar17; undefined ***pppuVar18; undefined1 auStackY_2a8 [32]; undefined **local_278; undefined **local_270; undefined ***local_268; undefined ***local_260; undefined **local_258; undefined4 local_250; undefined2 local_24c; undefined ***local_238 [2]; undefined **local_228; undefined4 local_220; undefined2 local_21c; undefined ***local_218; undefined1 local_210; undefined **local_208; undefined4 local_200; undefined2 local_1fc; undefined **local_1f8; undefined8 local_1f0; undefined8 local_1e8; undefined8 local_1e0; undefined8 local_1d8; int *local_1d0; undefined1 local_1c8; undefined **local_1c0; undefined8 local_1b8; undefined4 local_1b0; undefined8 local_1a8; undefined4 local_1a0; undefined **local_198; undefined4 local_190; undefined2 local_18c; longlong local_158 [36]; ulonglong local_38; local_158[1] = 0xfffffffffffffffe; local_38 = DAT_1401555a0 ^ (ulonglong)auStackY_2a8; pppuVar8 = &local_278; local_260 = param_1; FUN_1400bbb40(pppuVar8); pppuVar18 = (undefined ***)0x0; local_268 = (undefined ***)0x0; pppuVar16 = (undefined ***)0x1; do { while( true ) { while( true ) { if (*(char *)(param_1 + 0x28) != '\0') { if (param_1[0x29][0x2fe] != (undefined *)0x0) { FUN_140030200(pppuVar8,param_2,param_3,param_4); local_238[0] = (undefined ***)PTR_DAT_140155010; FUN_14001b7a0((longlong *)local_238,L"%s thread 종료.", L"Proud::CNetThreads_S::TcpListenerProc",param_4); pppuVar8 = local_238[0]; param_3 = local_238[0]; if (local_238[0] == (undefined ***)0x0) { param_3 = (undefined ***)PTR_DAT_140155010; } param_2 = (undefined ***)0x0; puVar15 = param_1[0x29][0x2fe]; FUN_14008f2e0((longlong)puVar15,0,(short *)param_3,param_4); if (((pppuVar8 != (undefined ***)0x0) && (pppuVar8 != (undefined ***)PTR_DAT_140155010)) && (pppuVar8 + -1 != (undefined ***)0x0)) { piVar9 = (int *)FUN_140030200(puVar15,param_2,param_3,param_4); local_1c8 = 0; local_1d0 = piVar9; FUN_14002e6e0(piVar9); local_1c8 = 1; piVar2 = (int *)((longlong)pppuVar8 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_1400302f0(pppuVar8 + -1); } FUN_14002e770((longlong)piVar9); } } pppuVar8 = local_268; if (local_268 != (undefined ***)0x0) { FUN_1400358a0((longlong *)local_268,param_2,(longlong *)param_3,param_4); FUN_1400302f0(pppuVar8); } FUN_1400bbb70((char *)&local_278); return; } uVar17 = 0; if (((local_268 == (undefined ***)0x0) && ((char)pppuVar16 != '\0')) && (local_268 = (undefined ***) FUN_14008ad70((longlong)param_1,param_2,(undefined **)param_3, (undefined **)param_4), local_268 == (undefined ***)0x0)) { pppuVar16 = pppuVar18; } pppuVar13 = local_268; local_198 = Proud::AddrPort::vftable; local_1c0 = (undefined **)0x0; local_1a8 = 0; local_1b8 = 0; local_1b0 = 5; local_1a0 = 0; local_190 = DAT_1401553d0; local_18c = DAT_1401553d4; param_3 = (undefined ***)(ulonglong)DAT_140155068; param_2 = &local_1c0; pcVar12 = param_1[0x29][0xf2]; uVar5 = FUN_1400388c0(pcVar12,(longlong *)param_2,(ulonglong)param_3,param_4); if ((char)uVar5 == '\x01') break; pppuVar8 = pppuVar18; if ((undefined8 *)param_1[0x29][0xe9] != (undefined8 *)0x0) { pppuVar8 = *(undefined ****)param_1[0x29][0xe9]; } FUN_140035730((longlong)pppuVar8); } if (pppuVar13 == (undefined ***)0x0) break; local_208 = Proud::AddrPort::vftable; local_200 = 0; local_1fc = 0; local_258 = Proud::AddrPort::vftable; local_250 = 0; local_24c = 0; param_2 = pppuVar18; if ((undefined8 *)param_1[0x29][0xe9] != (undefined8 *)0x0) { param_2 = *(undefined ****)param_1[0x29][0xe9]; } param_4 = &local_258; param_3 = &local_208; FUN_140035580((longlong)pppuVar13,(longlong)param_2,(longlong)param_3,(longlong)param_4); uVar6 = FUN_140033290((longlong)&local_258); if ((char)uVar6 == '\0') { LAB_14008c022: FUN_1400358a0((longlong *)pppuVar13,param_2,(longlong *)param_3,param_4); FUN_1400302f0(pppuVar13); pppuVar8 = pppuVar13; } else { local_228 = Proud::AddrPort::vftable; local_220 = local_250; local_21c = local_24c; param_3 = &local_228; pppuVar8 = param_1; param_2 = pppuVar13; uVar5 = FUN_14008a9c0((longlong)param_1,(longlong)pppuVar13,(ulonglong)param_3); if ((char)uVar5 == '\0') goto LAB_14008c022; } local_268 = (undefined ***)0x0; } FUN_140030200(pcVar12,param_2,param_3,param_4); local_270 = (undefined **)PTR_DAT_140155010; uVar3 = FUN_140030080(L"acceptex getqueued but socket null"); uVar4 = uVar17; if ((local_270 != (undefined **)0x0) && (local_270 != (undefined **)PTR_DAT_140155010)) { uVar4 = *(uint *)(local_270 + -1); } uVar10 = uVar3; if ((((int)uVar3 <= (int)uVar4) && (uVar10 = uVar17, local_270 != (undefined **)0x0)) && (local_270 != (undefined **)PTR_DAT_140155010)) { uVar10 = *(uint *)(local_270 + -1); } uVar4 = 1; if (1 < (int)uVar10) { uVar4 = uVar10; } uVar11 = 0; uVar10 = uVar11; if ((local_270 != (undefined **)0x0) && (local_270 != (undefined **)PTR_DAT_140155010)) { uVar10 = *(uint *)(local_270 + -1); } if ((int)uVar10 < (int)uVar4) { if (local_270 == (undefined **)0x0) { local_270 = (undefined **)PTR_DAT_140155010; } if ((int)uVar4 < 0) { /* WARNING: Subroutine does not return */ FUN_14002f590(); } if (uVar4 == 0) { FUN_140003240((longlong *)&local_270,PTR_DAT_140155010,param_3,param_4); } else { uVar10 = uVar11; if ((local_270 != (undefined **)0x0) && (local_270 != (undefined **)PTR_DAT_140155010)) { uVar10 = *(uint *)(local_270 + -1); } if (uVar4 != uVar10) { puVar7 = (uint *)FUN_140030280((longlong)(int)uVar4 * 2 + 10); if (puVar7 != (uint *)0x0) { *puVar7 = 0; puVar7[1] = 1; } *puVar7 = uVar4; uVar10 = uVar11; if ((local_270 != (undefined **)0x0) && (local_270 != (undefined **)PTR_DAT_140155010)) { uVar10 = *(uint *)(local_270 + -1); } ppuVar14 = (undefined **)PTR_DAT_140155010; if ((int)uVar4 < (int)uVar10) { LAB_14008c147: if (local_270 != (undefined **)0x0) { ppuVar14 = local_270; } } else { uVar4 = uVar17; if (local_270 != (undefined **)0x0) { if (local_270 != (undefined **)PTR_DAT_140155010) { uVar4 = *(uint *)(local_270 + -1); } goto LAB_14008c147; } } uVar6 = (ulonglong)uVar4; FUN_1400300b0(puVar7 + 2,ppuVar14,uVar4); FUN_140003240((longlong *)&local_270,ppuVar14,uVar6,param_4); local_270 = (undefined **)(puVar7 + 2); } } } FUN_140002ea0((longlong *)&local_270); ppuVar14 = local_270; if (local_270 == (undefined **)0x0) { ppuVar14 = (undefined **)PTR_DAT_140155010; } FUN_1400300b0(ppuVar14,L"acceptex getqueued but socket null",uVar3); ppuVar14 = local_270; if (local_270 == (undefined **)0x0) { ppuVar14 = (undefined **)PTR_DAT_140155010; } uVar4 = FUN_140030080((short *)ppuVar14); uVar17 = 0; if (0 < (int)uVar4) { uVar17 = uVar4; } uVar4 = uVar11; if ((local_270 != (undefined **)0x0) && (local_270 != (undefined **)PTR_DAT_140155010)) { uVar4 = *(uint *)(local_270 + -1); } if (((int)uVar17 < (int)uVar4) || (uVar17 = uVar11, local_270 == (undefined **)0x0)) { LAB_14008c1ea: if (((local_270 != (undefined **)PTR_DAT_140155010) && (local_270 != (undefined **)0x0)) && (local_270 + -1 != (undefined **)0x0)) { *(uint *)(local_270 + -1) = uVar17; *(undefined2 *)((longlong)local_270 + (longlong)(int)uVar17 * 2) = 0; } } else if (local_270 != (undefined **)PTR_DAT_140155010) { uVar17 = *(uint *)(local_270 + -1); goto LAB_14008c1ea; } local_1f0 = 0; local_1e8 = 0; local_1e0 = 0; local_1d8 = 0; local_1f8 = Proud::ByteArray::vftable; param_4 = &local_270; param_2 = (undefined ***)FUN_14003c120(local_158,1,0,(longlong *)param_4,(longlong)&local_1f8); param_3 = (undefined ***)*param_1[0x29]; (*(code *)param_3[0x10])(); pppuVar8 = &local_1f8; FUN_14003b870(pppuVar8); ppuVar14 = local_270; if (((local_270 != (undefined **)0x0) && (local_270 != (undefined **)PTR_DAT_140155010)) && (ppuVar1 = local_270 + -1, ppuVar1 != (undefined **)0x0)) { pppuVar8 = (undefined ***)FUN_140030200(pppuVar8,param_2,param_3,param_4); local_210 = 0; local_218 = pppuVar8; FUN_14002e6e0((int *)pppuVar8); local_210 = 1; puVar7 = (uint *)((longlong)ppuVar14 + -4); *puVar7 = *puVar7 - 1; if (*puVar7 == 0) { FUN_1400302f0(ppuVar1); } FUN_14002e770((longlong)pppuVar8); local_210 = 0; } local_270 = (undefined **)PTR_DAT_140155010; } while( true ); }