/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186 * Ghidra 12.1.2 decompiler output for 0x14007fce0 FUN_14007fce0 * Pseudocode, not original source. */ longlong * FUN_14007fce0(longlong param_1,undefined8 param_2,undefined **param_3,undefined **param_4) { undefined *puVar1; undefined8 *puVar2; undefined *puVar3; uint uVar4; uint uVar5; uint uVar6; longlong *plVar7; longlong *plVar8; int *piVar9; uint *puVar10; int *piVar11; char *pcVar12; char *pcVar13; undefined ***pppuVar14; uint *puVar15; uint uVar16; char *pcVar17; ulonglong uVar18; longlong lVar19; uint **ppuVar20; uint uVar21; uint *local_res8; undefined *local_res10; longlong local_res18; longlong local_res20; undefined **local_b8; undefined8 local_b0; undefined8 local_a8; undefined8 local_a0; undefined8 local_98; undefined **local_90; undefined8 local_88; undefined8 local_80; undefined8 local_78; undefined8 local_70; int *local_68; undefined1 local_60; int *local_58; undefined1 local_50; undefined8 local_48; local_48 = 0xfffffffffffffffe; pcVar17 = (char *)0x0; uVar21 = 0; do { lVar19 = *(longlong *)(param_1 + 0x148); pcVar13 = (char *)(lVar19 + 0x60); if (lVar19 == 0) { pcVar13 = pcVar17; } pcVar12 = pcVar17; if (*(longlong *)(lVar19 + 0x750) != 0) { pcVar12 = *(char **)(*(longlong *)(lVar19 + 0x750) + 0x38); } plVar7 = FUN_140085700(pcVar12,pcVar13,param_3,(longlong)param_4); if (plVar7 == (longlong *)0x0) { FUN_14003e7c0(pcVar12,pcVar13,param_3,param_4); local_res8 = (uint *)PTR_DAT_14016f010; uVar4 = FUN_14003e620(L"FATAL: Cannot create TCP socket for AcceptEx!"); uVar6 = 0; if ((local_res8 != (uint *)0x0) && (pcVar17 = (char *)0x0, local_res8 != (uint *)PTR_DAT_14016f010)) { pcVar17 = (char *)(ulonglong)local_res8[-2]; } uVar5 = uVar4; if ((((int)uVar4 <= (int)pcVar17) && (uVar5 = uVar6, local_res8 != (uint *)0x0)) && (local_res8 != (uint *)PTR_DAT_14016f010)) { uVar5 = local_res8[-2]; } uVar16 = 1; if (1 < (int)uVar5) { uVar16 = uVar5; } uVar5 = uVar6; if ((local_res8 != (uint *)0x0) && (local_res8 != (uint *)PTR_DAT_14016f010)) { uVar5 = local_res8[-2]; } if ((int)uVar5 < (int)uVar16) { if (local_res8 == (uint *)0x0) { local_res8 = (uint *)PTR_DAT_14016f010; } if ((int)uVar16 < 0) { /* WARNING: Subroutine does not return */ FUN_14003dec0(); } if (uVar16 == 0) { FUN_140002190((longlong *)&local_res8,PTR_DAT_14016f010,pcVar17,param_4); } else { uVar5 = uVar6; if ((local_res8 != (uint *)0x0) && (local_res8 != (uint *)PTR_DAT_14016f010)) { uVar5 = local_res8[-2]; } if (uVar16 != uVar5) { puVar10 = (uint *)FUN_14003e840((longlong)(int)uVar16 * 2 + 10); if (puVar10 != (uint *)0x0) { *puVar10 = 0; puVar10[1] = 1; } *puVar10 = uVar16; uVar5 = uVar6; if ((local_res8 != (uint *)0x0) && (local_res8 != (uint *)PTR_DAT_14016f010)) { uVar5 = local_res8[-2]; } puVar15 = (uint *)PTR_DAT_14016f010; if ((int)uVar16 < (int)uVar5) { LAB_14007ff87: if (local_res8 != (uint *)0x0) { puVar15 = local_res8; } } else { uVar16 = uVar6; if (local_res8 != (uint *)0x0) { if (local_res8 != (uint *)PTR_DAT_14016f010) { uVar16 = local_res8[-2]; } goto LAB_14007ff87; } } uVar18 = (ulonglong)uVar16; FUN_14003e650(puVar10 + 2,puVar15,uVar16); FUN_140002190((longlong *)&local_res8,puVar15,uVar18,param_4); local_res8 = puVar10 + 2; } } } FUN_140001df0((longlong *)&local_res8); puVar10 = local_res8; if (local_res8 == (uint *)0x0) { puVar10 = (uint *)PTR_DAT_14016f010; } FUN_14003e650(puVar10,L"FATAL: Cannot create TCP socket for AcceptEx!",uVar4); puVar10 = local_res8; if (local_res8 == (uint *)0x0) { puVar10 = (uint *)PTR_DAT_14016f010; } uVar6 = FUN_14003e620((short *)puVar10); uVar4 = uVar21; if (0 < (int)uVar6) { uVar4 = uVar6; } uVar6 = uVar21; if ((local_res8 != (uint *)0x0) && (local_res8 != (uint *)PTR_DAT_14016f010)) { uVar6 = local_res8[-2]; } if (((int)uVar6 <= (int)uVar4) && (uVar4 = uVar21, local_res8 != (uint *)0x0)) { if (local_res8 == (uint *)PTR_DAT_14016f010) goto LAB_14008003b; uVar4 = local_res8[-2]; } if (((local_res8 != (uint *)PTR_DAT_14016f010) && (local_res8 != (uint *)0x0)) && (local_res8 + -2 != (uint *)0x0)) { local_res8[-2] = uVar4; *(undefined2 *)((longlong)local_res8 + (longlong)(int)uVar4 * 2) = 0; } LAB_14008003b: local_b0 = 0; local_a8 = 0; local_a0 = 0; local_98 = 0; local_b8 = Proud::ByteArray::vftable; ppuVar20 = &local_res8; plVar7 = FUN_140071c20(&local_res20,1,1,(longlong *)ppuVar20,(longlong)&local_b8); lVar19 = **(longlong **)(param_1 + 0x148); (**(code **)(lVar19 + 0x80))(); pppuVar14 = &local_b8; FUN_140049e40(pppuVar14); puVar10 = local_res8; if (local_res8 == (uint *)0x0) { return (longlong *)0x0; } if (local_res8 == (uint *)PTR_DAT_14016f010) { return (longlong *)0x0; } puVar15 = local_res8 + -2; if (puVar15 == (uint *)0x0) { return (longlong *)0x0; } piVar11 = (int *)FUN_14003e7c0(pppuVar14,plVar7,lVar19,ppuVar20); local_68 = piVar11; FUN_14003d040(piVar11); local_60 = 1; puVar10 = puVar10 + -1; *puVar10 = *puVar10 - 1; if (*puVar10 == 0) { FUN_14003e8b0(puVar15); } FUN_14003d0d0((longlong)piVar11); return (longlong *)0x0; } puVar2 = *(undefined8 **)(*(longlong *)(param_1 + 0x148) + 0x748); pcVar13 = pcVar17; if (puVar2 != (undefined8 *)0x0) { pcVar13 = (char *)*puVar2; } plVar8 = plVar7; uVar4 = FUN_140045060((longlong)pcVar13,(longlong)plVar7,param_3,param_4); if (uVar4 == 0) { return plVar7; } if (uVar4 != 0x2746) { if (uVar4 != 0x2736) { FUN_14003e7c0(pcVar13,plVar8,param_3,param_4); local_res10 = PTR_DAT_14016f010; FUN_140029b80((longlong *)&local_res10, L"FATAL: AcceptEx failed with error code %d! No more accept will be possible." ,(ulonglong)uVar4,param_4); local_88 = 0; local_80 = 0; local_78 = 0; local_70 = 0; local_90 = Proud::ByteArray::vftable; param_4 = &local_res10; plVar8 = FUN_140071c20(&local_res18,1,1,(longlong *)param_4,(longlong)&local_90); param_3 = (undefined **)**(longlong **)(param_1 + 0x148); (*(code *)param_3[0x10])(); pppuVar14 = &local_90; FUN_140049e40(pppuVar14); puVar3 = local_res10; if (((local_res10 != (undefined *)0x0) && (local_res10 != PTR_DAT_14016f010)) && (puVar1 = local_res10 + -8, puVar1 != (undefined *)0x0)) { piVar9 = (int *)FUN_14003e7c0(pppuVar14,plVar8,param_3,param_4); local_58 = piVar9; FUN_14003d040(piVar9); local_50 = 1; piVar11 = (int *)(puVar3 + -4); *piVar11 = *piVar11 + -1; if (*piVar11 == 0) { FUN_14003e8b0(puVar1); } FUN_14003d0d0((longlong)piVar9); } } LAB_14007fe73: FUN_140043e60(plVar7,plVar8,(longlong *)param_3,param_4); FUN_14003e8b0(plVar7); return (longlong *)0x0; } if (*(char *)(param_1 + 0x140) != '\0') goto LAB_14007fe73; FUN_140043e60(plVar7,plVar8,(longlong *)param_3,param_4); FUN_14003e8b0(plVar7); } while( true ); }