/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x1400a8a40 FUN_1400a8a40 * Pseudocode, not original source. */ void FUN_1400a8a40(longlong param_1,undefined8 param_2,undefined *param_3,undefined ***param_4) { undefined **ppuVar1; int *piVar2; ushort uVar3; undefined4 uVar4; uint uVar5; uint uVar6; int iVar7; uint uVar8; longlong lVar9; uint *puVar10; longlong *plVar11; int *piVar12; int iVar13; ulonglong uVar14; undefined **ppuVar15; undefined ***pppuVar16; ulonglong uVar17; uint uVar18; int iVar19; double dVar20; undefined8 uVar21; undefined **local_res8; undefined *local_res10; longlong local_res18; undefined **local_50; undefined8 local_48; undefined8 local_40; undefined8 local_38; undefined8 local_30; lVar9 = *(longlong *)(param_1 + 0x108); if ((*(char *)(lVar9 + 0x1790) != '\0') || (*(int *)(lVar9 + 0x6c8) != 0)) { param_3 = &DAT_14010b9a8; param_2 = 0; FUN_140072eb0(lVar9,0,L"클라이언트 NetWorker thread 시작",param_4); } lVar9 = FUN_140064be0(*(longlong *)(param_1 + 0x108)); uVar17 = 0; iVar19 = 0; uVar14 = uVar17; if (*(ulonglong **)(lVar9 + 0x128) != (ulonglong *)0x0) { uVar14 = **(ulonglong **)(lVar9 + 0x128); } uVar4 = FUN_140037510(uVar14,param_2,param_3,param_4); uVar8 = 0; if ((char)uVar4 != '\0') { lVar9 = FUN_140064be0(*(longlong *)(param_1 + 0x108)); FUN_1400b2b10(lVar9,param_2,param_3,param_4); dVar20 = FUN_14003a420((char *)(*(longlong *)(param_1 + 0x108) + 0x1620)); *(double *)(param_1 + 200) = dVar20; lVar9 = FUN_140064be0(*(longlong *)(param_1 + 0x108)); uVar14 = uVar17; if (*(ulonglong **)(lVar9 + 0x128) != (ulonglong *)0x0) { uVar14 = **(ulonglong **)(lVar9 + 0x128); } FUN_140034b70(uVar14); lVar9 = FUN_140064be0(*(longlong *)(param_1 + 0x108)); uVar14 = uVar17; if (*(ulonglong **)(lVar9 + 0x128) != (ulonglong *)0x0) { uVar14 = **(ulonglong **)(lVar9 + 0x128); } FUN_140034b80(uVar14,0); lVar9 = FUN_140064be0(*(longlong *)(param_1 + 0x108)); uVar14 = uVar17; if (*(ulonglong **)(lVar9 + 0x128) != (ulonglong *)0x0) { uVar14 = **(ulonglong **)(lVar9 + 0x128); } uVar21 = 0; FUN_140034c70(uVar14,'\0'); local_res8 = &local_res10; lVar9 = *(longlong *)(param_1 + 0x108); FUN_140030200(uVar14,uVar21,param_3,param_4); local_res10 = PTR_DAT_140155010; FUN_140003170((longlong *)&local_res10,(longlong *)(lVar9 + 0x1588),param_3,param_4); lVar9 = FUN_140064be0(*(longlong *)(param_1 + 0x108)); if (*(ulonglong **)(lVar9 + 0x128) != (ulonglong *)0x0) { uVar17 = **(ulonglong **)(lVar9 + 0x128); } uVar3 = *(ushort *)(*(longlong *)(param_1 + 0x108) + 0x1590); uVar14 = (ulonglong)uVar3; uVar8 = FUN_140035e90(uVar17,(longlong *)&local_res10,uVar3,param_4); if ((uVar8 == 0) || (uVar8 == 0x2733)) { if (0 < *(int *)(param_1 + 0x100)) { return; } *(undefined4 *)(param_1 + 0x40) = 0; *(undefined4 *)(param_1 + 0x100) = 1; uVar21 = (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x70) + 0x1c0))(); *(undefined8 *)(param_1 + 0x80) = uVar21; *(undefined1 *)(param_1 + 0xc0) = 0; return; } goto LAB_1400a8d0d; } FUN_140030200(uVar14,param_2,param_3,param_4); local_res8 = (undefined **)PTR_DAT_140155010; uVar5 = FUN_140030080(L"Cannot bind TCP socket to a local address!"); if ((local_res8 != (undefined **)0x0) && (uVar17 = 0, local_res8 != (undefined **)PTR_DAT_140155010)) { uVar17 = (ulonglong)*(uint *)(local_res8 + -1); } uVar6 = uVar5; if ((((int)uVar5 <= (int)uVar17) && (uVar6 = uVar8, local_res8 != (undefined **)0x0)) && (local_res8 != (undefined **)PTR_DAT_140155010)) { uVar6 = *(uint *)(local_res8 + -1); } uVar18 = 1; if (1 < (int)uVar6) { uVar18 = uVar6; } uVar6 = uVar8; if ((local_res8 != (undefined **)0x0) && (local_res8 != (undefined **)PTR_DAT_140155010)) { uVar6 = *(uint *)(local_res8 + -1); } if ((int)uVar6 < (int)uVar18) { if (local_res8 == (undefined **)0x0) { local_res8 = (undefined **)PTR_DAT_140155010; } if ((int)uVar18 < 0) { /* WARNING: Subroutine does not return */ FUN_14002f590(); } if (uVar18 == 0) { FUN_140003240((longlong *)&local_res8,PTR_DAT_140155010,uVar17,param_4); } else { uVar6 = uVar8; if ((local_res8 != (undefined **)0x0) && (local_res8 != (undefined **)PTR_DAT_140155010)) { uVar6 = *(uint *)(local_res8 + -1); } if (uVar18 != uVar6) { puVar10 = (uint *)FUN_140030280((longlong)(int)uVar18 * 2 + 10); if (puVar10 != (uint *)0x0) { *puVar10 = 0; puVar10[1] = 1; } *puVar10 = uVar18; uVar6 = uVar8; if ((local_res8 != (undefined **)0x0) && (local_res8 != (undefined **)PTR_DAT_140155010)) { uVar6 = *(uint *)(local_res8 + -1); } ppuVar15 = (undefined **)PTR_DAT_140155010; if ((int)uVar18 < (int)uVar6) { LAB_1400a8bb3: if (local_res8 != (undefined **)0x0) { ppuVar15 = local_res8; } } else { uVar18 = uVar8; if (local_res8 != (undefined **)0x0) { if (local_res8 != (undefined **)PTR_DAT_140155010) { uVar18 = *(uint *)(local_res8 + -1); } goto LAB_1400a8bb3; } } uVar17 = (ulonglong)uVar18; FUN_1400300b0(puVar10 + 2,ppuVar15,uVar18); FUN_140003240((longlong *)&local_res8,ppuVar15,uVar17,param_4); local_res8 = (undefined **)(puVar10 + 2); } } } FUN_140002ea0((longlong *)&local_res8); ppuVar15 = local_res8; if (local_res8 == (undefined **)0x0) { ppuVar15 = (undefined **)PTR_DAT_140155010; } FUN_1400300b0(ppuVar15,L"Cannot bind TCP socket to a local address!",uVar5); ppuVar15 = local_res8; if (local_res8 == (undefined **)0x0) { ppuVar15 = (undefined **)PTR_DAT_140155010; } iVar7 = FUN_140030080((short *)ppuVar15); iVar13 = iVar19; if (0 < iVar7) { iVar13 = iVar7; } iVar7 = iVar19; if ((local_res8 != (undefined **)0x0) && (local_res8 != (undefined **)PTR_DAT_140155010)) { iVar7 = *(int *)(local_res8 + -1); } if ((iVar13 < iVar7) || (iVar13 = iVar19, local_res8 == (undefined **)0x0)) { LAB_1400a8c49: if (((local_res8 != (undefined **)PTR_DAT_140155010) && (local_res8 != (undefined **)0x0)) && (local_res8 + -1 != (undefined **)0x0)) { *(int *)(local_res8 + -1) = iVar13; *(undefined2 *)((longlong)local_res8 + (longlong)iVar13 * 2) = 0; } } else if (local_res8 != (undefined **)PTR_DAT_140155010) { iVar13 = *(int *)(local_res8 + -1); goto LAB_1400a8c49; } local_48 = 0; local_40 = 0; local_38 = 0; local_30 = 0; local_50 = Proud::ByteArray::vftable; param_4 = &local_res8; plVar11 = FUN_14003c120(&local_res18,3,0,(longlong *)param_4,(longlong)&local_50); uVar14 = **(ulonglong **)(param_1 + 0x108); (**(code **)(uVar14 + 0x80))(); pppuVar16 = &local_50; FUN_14003b870(pppuVar16); ppuVar15 = local_res8; if (((local_res8 != (undefined **)0x0) && (local_res8 != (undefined **)PTR_DAT_140155010)) && (ppuVar1 = local_res8 + -1, ppuVar1 != (undefined **)0x0)) { piVar12 = (int *)FUN_140030200(pppuVar16,plVar11,uVar14,param_4); FUN_14002e6e0(piVar12); piVar2 = (int *)((longlong)ppuVar15 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_1400302f0(ppuVar1); } FUN_14002e770((longlong)piVar12); } uVar8 = Ordinal_111(); LAB_1400a8d0d: FUN_1400a3a70(param_1,uVar8,uVar14,param_4); return; }