/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x14018ef40 FUN_14018ef40 * Pseudocode, not original source. */ /* WARNING: Function: __chkstk replaced with injection: alloca_probe */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ undefined8 FUN_14018ef40(longlong *param_1,undefined8 param_2,ulonglong *param_3,undefined8 param_4, undefined4 param_5) { longlong lVar1; ulonglong uVar2; double dVar3; longlong *plVar4; code *pcVar5; undefined1 *puVar6; void *pvVar7; undefined4 uVar8; int iVar9; ulonglong uVar10; longlong *plVar11; undefined8 uVar12; longlong lVar13; ulonglong *puVar14; int *piVar15; int *piVar16; undefined8 uVar17; longlong lVar18; uint uVar19; undefined1 *puVar20; undefined1 *puVar21; undefined8 *puVar22; int iVar23; int iVar24; int iVar25; int iVar26; undefined4 uVar27; undefined1 auStack_2aa8 [32]; int local_2a88 [2]; undefined8 *local_2a80; undefined1 local_2a78 [8]; ulonglong local_2a70; longlong *local_2a68; int local_2a60; int local_2a5c; undefined8 local_2a50; undefined8 local_2a48; int iStack_2a40; undefined4 uStack_2a3c; longlong *local_2a38; ulonglong *local_2a30; longlong local_2a28; undefined1 local_2a20; int local_2a1c; undefined1 local_2a18; undefined1 local_2a17; int local_2a10; undefined8 local_2a08; undefined1 local_2a00; undefined8 local_29f8; undefined1 local_29f0; undefined8 local_29e8; undefined1 local_29e0; undefined8 local_29d8; undefined1 local_29d0 [72]; void *local_2988; longlong local_2980; ulonglong local_2978; longlong local_2970; int local_2968 [4]; undefined1 local_2958 [384]; void *local_27d8; undefined8 local_27d0; ulonglong local_27c8; undefined8 local_27c0; undefined1 *local_2628; longlong local_2620; ulonglong local_2618; undefined8 local_2610; undefined1 local_2608 [3200]; undefined1 local_1988 [3200]; undefined1 *local_d08; undefined4 local_d00; int local_cfc; undefined4 local_cf8; undefined4 uStack_cf4; int iStack_cf0; undefined4 uStack_cec; undefined4 *local_78; undefined4 local_70; int local_6c; ulonglong local_68; undefined8 uStack_48; uStack_48 = 0x14018ef57; puVar21 = auStack_2aa8; local_29d8 = 0xfffffffffffffffe; local_68 = DAT_1403463c0 ^ (ulonglong)local_2a88; local_2a50 = param_2; local_2a48 = param_3; local_2a08 = (**(code **)(*param_1 + 0x58))(); FUN_14016db50(local_2a08); local_2a00 = 1; if (DAT_14034c86f != '\0') { (**(code **)(*param_1 + 200))(param_1,L"Proud::CNetServerImpl::Send_BroadcastLayer"); } iVar9 = 0; iVar24 = 0; if (0 < *(int *)((longlong)param_3 + 4)) { iVar24 = *(int *)((longlong)param_3 + 4); } dVar3 = (double)param_3[1]; uVar8 = SUB84(dVar3,0); uVar27 = (int)((ulonglong)dVar3 >> 0x20); if (dVar3 <= 0.0) { uVar8 = 0; uVar27 = 0; } local_27d8 = (void *)0x0; local_27c0 = 0; local_27d0 = 0; local_27c8 = 100; (**(code **)(*param_1 + 0x50))(param_1,param_5,param_4,&local_27d8); local_2628 = (undefined1 *)0x0; local_2610 = 0; local_2620 = 0; local_2618 = 100; FUN_140177770(param_1,&local_2628,&local_27d8); iVar25 = (int)local_2620; lVar13 = (longlong)iVar25 * 8; uVar2 = lVar13 + 0x10; if (uVar2 < 0x401) { uVar10 = lVar13 + 0x1f; if (uVar10 <= uVar2) { uVar10 = 0xffffffffffffff0; } lVar13 = -(uVar10 & 0xfffffffffffffff0); puVar21 = auStack_2aa8 + lVar13; local_2a80 = (undefined8 *)((longlong)local_2a88 + lVar13); if (local_2a80 != (undefined8 *)0x0) { *(undefined4 *)local_2a80 = 0xcccc; puVar21 = auStack_2aa8 + lVar13; LAB_14018f0c8: local_2a80 = local_2a80 + 2; } } else { local_2a80 = malloc(uVar2); if (local_2a80 != (undefined8 *)0x0) { *(undefined4 *)local_2a80 = 0xdddd; puVar21 = auStack_2aa8; goto LAB_14018f0c8; } } lVar13 = (longlong)iVar25 * 8; uVar2 = lVar13 + 0x10; if (uVar2 < 0x401) { uVar10 = lVar13 + 0x1f; if (uVar10 <= uVar2) { uVar10 = 0xffffffffffffff0; } *(undefined8 *)(puVar21 + -8) = 0x14018f0f6; lVar13 = -(uVar10 & 0xfffffffffffffff0); puVar20 = puVar21 + lVar13; plVar11 = (longlong *)(puVar21 + lVar13 + 0x20); puVar21 = puVar21 + lVar13; local_2a38 = plVar11; if (plVar11 == (longlong *)0x0) goto LAB_14018f12f; *(undefined4 *)plVar11 = 0xcccc; puVar21 = puVar20; } else { *(undefined8 *)(puVar21 + -8) = 0x14018f115; plVar11 = malloc(uVar2); local_2a38 = plVar11; if (plVar11 == (longlong *)0x0) goto LAB_14018f12f; *(undefined4 *)plVar11 = 0xdddd; } local_2a38 = plVar11 + 2; LAB_14018f12f: plVar11 = local_2a38; local_2a10 = 0; iVar23 = 0; local_2a88[0] = 0; if ((int)*param_3 == 1) { puVar22 = local_2a80; if (iVar25 < 1) { iVar24 = 0; iVar9 = 0; } else { do { if ((iVar23 < 0) || (local_2620 <= iVar23)) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar21 + -8) = &UNK_14018f2d9; FUN_14016d6b0(); } puVar6 = local_2628; if (local_2618 < 0x65) { puVar6 = local_2608; } plVar11 = *(longlong **)(puVar6 + (longlong)iVar23 * 0x20 + 8); if ((plVar11 == param_1 + 0xe) && (*(char *)((longlong)param_3 + 0x2d) != '\0')) { *(undefined8 *)(puVar21 + -8) = 0x14018f1ae; FUN_14016b440(local_2a78); uVar12 = local_2a50; *(undefined8 *)(puVar21 + -8) = 0x14018f1bc; FUN_14019b750(uVar12,local_2a78); *(undefined8 *)(puVar21 + -8) = 0x14018f1c5; uVar8 = FUN_1401c2140(local_2a78); *(undefined8 *)(puVar21 + -8) = 0x14018f1db; uVar12 = FUN_14018baa0(&local_2988,local_2a78,uVar8,1); lVar13 = param_1[0x8d]; *(undefined8 *)(puVar21 + -8) = 0x14018f1f7; lVar13 = FUN_14018ec30(param_1 + 0x8b,uVar12,lVar13,0); if ((longlong *)param_1[0x8d] == (longlong *)0x0) { param_1[0x8c] = lVar13; } else { *(longlong *)param_1[0x8d] = lVar13; } param_1[0x8d] = lVar13; *(undefined8 *)(puVar21 + -8) = 0x14018f225; FUN_14018ba10(local_2958); local_2a48 = &local_2978; *(undefined8 *)(puVar21 + -8) = 0x14018f23d; FUN_14016d0e0(&local_2978); if ((local_2970 != 0) && (local_2968[1] < 0)) { /* WARNING: Subroutine does not return */ *(undefined8 *)(puVar21 + -8) = 0x14018f2c5; FUN_14016d6b0(); } lVar13 = param_1[0x7c]; *(undefined8 *)(puVar21 + -8) = 0x14018f26a; FUN_1401c2710(lVar13 + 0x160,param_1 + 0xf); local_2a48 = &local_2a70; *(undefined8 *)(puVar21 + -8) = 0x14018f27c; FUN_14016d0e0(&local_2a70); if (((ulonglong *)local_2a68 != (ulonglong *)0x0) && (local_2a5c < 0)) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar21 + -8) = &UNK_14018f2cb; FUN_14016d6b0(); } } else if (plVar11 != (longlong *)0x0) { *(undefined8 *)(puVar21 + -8) = 0x14018f299; lVar13 = FUN_1401c26a0(plVar11); if (lVar13 != 0) { *(undefined8 *)(puVar21 + -8) = 0x14018f2aa; FUN_1401baa10(plVar11 + 0x18); *puVar22 = plVar11; iVar9 = iVar9 + 1; puVar22 = puVar22 + 1; } } iVar23 = iVar23 + 1; iVar24 = local_2a88[0]; } while (iVar23 < iVar25); } } else { *(undefined8 *)(puVar21 + -8) = 0x14018f2f0; FUN_1401863f0(param_1,&local_2628,iVar24,CONCAT44(uVar27,uVar8)); iVar25 = 0; iVar26 = (int)local_2620; param_3 = local_2a48; iVar24 = iVar23; if (0 < iVar26) { do { lVar13 = (longlong)iVar25; if ((iVar25 < 0) || (local_2620 <= lVar13)) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar21 + -8) = &UNK_14018f4ec; FUN_14016d6b0(); } puVar6 = local_2628; if (local_2618 < 0x65) { puVar6 = local_2608; } plVar4 = *(longlong **)(puVar6 + lVar13 * 0x20 + 8); if ((plVar4 == param_1 + 0xe) && (*(char *)((longlong)local_2a48 + 0x2d) != '\0')) { *(undefined8 *)(puVar21 + -8) = 0x14018f378; FUN_14016b440(local_2a78); uVar12 = local_2a50; *(undefined8 *)(puVar21 + -8) = 0x14018f386; FUN_14019b750(uVar12,local_2a78); *(undefined8 *)(puVar21 + -8) = 0x14018f38f; uVar8 = FUN_1401c2140(local_2a78); *(undefined8 *)(puVar21 + -8) = 0x14018f3a5; uVar12 = FUN_14018baa0(&local_2988,local_2a78,uVar8,1); lVar13 = param_1[0x8d]; *(undefined8 *)(puVar21 + -8) = 0x14018f3c1; lVar13 = FUN_14018ec30(param_1 + 0x8b,uVar12,lVar13,0); if ((longlong *)param_1[0x8d] == (longlong *)0x0) { param_1[0x8c] = lVar13; } else { *(longlong *)param_1[0x8d] = lVar13; } param_1[0x8d] = lVar13; *(undefined8 *)(puVar21 + -8) = 0x14018f3ef; FUN_14018ba10(local_2958); local_2a30 = &local_2978; *(undefined8 *)(puVar21 + -8) = 0x14018f407; FUN_14016d0e0(&local_2978); if ((local_2970 != 0) && (local_2968[1] < 0)) { /* WARNING: Subroutine does not return */ *(undefined8 *)(puVar21 + -8) = 0x14018f4d4; FUN_14016d6b0(); } lVar13 = param_1[0x7c]; *(undefined8 *)(puVar21 + -8) = 0x14018f438; FUN_1401c2710(lVar13 + 0x160,param_1 + 0xf); local_2a30 = &local_2a70; *(undefined8 *)(puVar21 + -8) = 0x14018f44a; FUN_14016d0e0(&local_2a70); if (((ulonglong *)local_2a68 != (ulonglong *)0x0) && (local_2a5c < 0)) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar21 + -8) = &UNK_14018f4da; FUN_14016d6b0(); } } else if (plVar4 != (longlong *)0x0) { *(undefined8 *)(puVar21 + -8) = 0x14018f46b; lVar18 = FUN_1401c26a0(plVar4); if (lVar18 != 0) { *(undefined8 *)(puVar21 + -8) = 0x14018f47b; FUN_140189800(param_1,plVar4); *(undefined8 *)(puVar21 + -8) = 0x14018f487; FUN_1401baa10(plVar4 + 0x18); if (local_2620 <= lVar13) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar21 + -8) = &UNK_14018f4e0; FUN_14016d6b0(); } puVar6 = local_2628; if (local_2618 < 0x65) { puVar6 = local_2608; } *plVar11 = (longlong)(puVar6 + lVar13 * 0x20); local_2a88[0] = local_2a88[0] + 1; plVar11 = plVar11 + 1; } } iVar25 = iVar25 + 1; param_3 = local_2a48; iVar24 = local_2a88[0]; iVar9 = local_2a10; } while (iVar25 < iVar26); } } uVar12 = local_2a08; lVar13 = 0; *(undefined8 *)(puVar21 + -8) = 0x14018f503; FUN_14016dbe0(uVar12); local_2a00 = 0; if ((int)*param_3 == 1) { if (0 < iVar9) { do { lVar18 = local_2a80[lVar13]; pcVar5 = *(code **)(*(longlong *)(lVar18 + 0x108) + 0x10); *(undefined8 *)(puVar21 + -8) = 0x14018f535; puVar14 = (ulonglong *)(*pcVar5)(); local_2a48 = puVar14; *(undefined8 *)(puVar21 + -8) = 0x14018f544; FUN_14016db50(puVar14); uVar17 = local_2a50; iStack_2a40._0_1_ = 1; local_2a30 = (ulonglong *)0x0; local_2a28 = CONCAT71(local_2a28._1_7_,1); uVar12 = *(undefined8 *)(lVar18 + 0x748); *(undefined8 *)(puVar21 + -8) = 0x14018f568; FUN_1401ba860(uVar12,uVar17,&local_2a30); *(undefined8 *)(puVar21 + -8) = 0x14018f570; FUN_14016dbe0(puVar14); iStack_2a40 = (uint)iStack_2a40._1_3_ << 8; *(undefined8 *)(puVar21 + -8) = 0x14018f580; FUN_1401baa20(lVar18 + 0xc0); lVar13 = lVar13 + 1; } while (lVar13 < iVar9); } } else if (0 < iVar24) { do { piVar16 = (int *)local_2a38[lVar13]; plVar11 = *(longlong **)(piVar16 + 2); if (*(longlong *)(piVar16 + 4) == 0) { if (*(longlong *)(piVar16 + 6) == 0) { pcVar5 = *(code **)(plVar11[0x21] + 0x10); *(undefined8 *)(puVar21 + -8) = 0x14018f8c1; uVar17 = (*pcVar5)(); local_29f8 = uVar17; *(undefined8 *)(puVar21 + -8) = 0x14018f8d3; FUN_14016db50(uVar17); local_29f0 = 1; local_2a30 = (ulonglong *)CONCAT44(local_2a30._4_4_,(int)param_3[4]); local_2a28 = param_3[3]; local_2a20 = *(undefined1 *)((longlong)param_3 + 0x2d); local_2a1c = (int)param_3[6]; local_2a18 = *(undefined1 *)((longlong)param_3 + 0x41); local_2a17 = (undefined1)param_3[8]; pcVar5 = *(code **)(*plVar11 + 0x10); *(undefined8 *)(puVar21 + -8) = 0x14018f912; uVar8 = (*pcVar5)(plVar11); uVar12 = local_2a50; *(undefined8 *)(puVar21 + -8) = 0x14018f928; FUN_1401bbe20(plVar11 + 0xe0,uVar8,uVar12,&local_2a30); *(undefined8 *)(puVar21 + -8) = 0x14018f930; FUN_14016dbe0(uVar17); local_29f0 = 0; } else { *(undefined8 *)(puVar21 + -8) = 0x14018f5cb; FUN_14016b440(local_2a78); *(undefined8 *)(puVar21 + -8) = 0x14018f5d5; FUN_14016abe0(local_2a78); *(undefined8 *)(puVar21 + -8) = 0x14018f5e0; FUN_14004eef0(local_2a78,0x22); uVar2 = param_3[4]; *(undefined8 *)(puVar21 + -8) = 0x14018f5ee; FUN_14004eef0(local_2a78,(char)uVar2); uVar2 = param_3[3]; *(undefined8 *)(puVar21 + -8) = 0x14018f5fb; FUN_14016cac0(local_2a78,uVar2); local_2988 = (void *)0x0; local_2970 = 0; local_2980 = 0; local_2978 = 100; do { lVar18 = local_2980; iVar9 = *piVar16; if (local_2980 < 0) { /* WARNING: Subroutine does not return */ *(undefined8 *)(puVar21 + -8) = 0x14018f9d1; FUN_14016d6b0(); } lVar1 = local_2980 + 1; *(undefined8 *)(puVar21 + -8) = 0x14018f63f; FUN_140173be0(&local_2988,lVar1,0xffffffffffffffff); if (local_2980 <= lVar18) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar21 + -8) = &UNK_14018f9cb; FUN_14016d6b0(); } if (local_2978 < 0x65) { piVar15 = local_2968 + lVar18; } else { piVar15 = (int *)((longlong)local_2988 + lVar18 * 4); } *piVar15 = iVar9; piVar16 = *(int **)(piVar16 + 6); } while (piVar16 != (int *)0x0); lVar18 = (longlong)(int)local_2980; *(undefined8 *)(puVar21 + -8) = 0x14018f68f; FUN_14016cac0(local_2a78,lVar18); if (0 < local_2980) { lVar18 = 0; puVar14 = (ulonglong *)0x0; do { if ((lVar18 < 0) || (local_2980 <= lVar18)) { /* WARNING: Subroutine does not return */ *(undefined8 *)(puVar21 + -8) = 0x14018f959; FUN_14016d6b0(); } if (local_2978 < 0x65) { piVar16 = local_2968 + lVar18; } else { piVar16 = (int *)((longlong)local_2988 + lVar18 * 4); } iVar9 = *piVar16; *(undefined8 *)(puVar21 + -8) = 0x14018f6dd; FUN_140153c40(local_2a78,iVar9); uVar19 = (int)puVar14 + 1; puVar14 = (ulonglong *)(ulonglong)uVar19; lVar18 = (longlong)(int)uVar19; } while (lVar18 < local_2980); } uVar12 = local_2a50; *(undefined8 *)(puVar21 + -8) = 0x14018f6fa; iVar9 = FUN_14019b440(uVar12); *(undefined8 *)(puVar21 + -8) = 0x14018f706; FUN_14016cac0(local_2a78,(longlong)iVar9); local_cfc = 200; local_d00 = 0; local_d08 = local_1988; local_6c = 200; local_70 = 0; local_78 = &local_cf8; if (local_2a70 == 0) { iVar9 = local_2a60; if ((ulonglong *)local_2a68 == (ulonglong *)0x0) { /* WARNING: Subroutine does not return */ *(undefined8 *)(puVar21 + -8) = 0x14018f9c5; FUN_14016d1e0(); } } else { iVar9 = *(int *)(local_2a70 + 0x18); } puVar14 = (ulonglong *)local_2a68; if ((ulonglong *)local_2a68 == (ulonglong *)0x0) { if (local_2a70 == 0) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar21 + -8) = &UNK_14018f9bf; FUN_14016d1e0(); } puVar14 = (ulonglong *)0x0; if (*(int *)(local_2a70 + 0x18) != 0) { puVar14 = *(ulonglong **)(local_2a70 + 0x10); } } local_70 = 1; local_2a48._0_4_ = SUB84(puVar14,0); local_2a48._4_4_ = (undefined4)((ulonglong)puVar14 >> 0x20); local_cf8 = (undefined4)local_2a48; uStack_cf4 = local_2a48._4_4_; uStack_cec = uStack_2a3c; local_2a48 = puVar14; iStack_2a40 = iVar9; *(undefined8 *)(puVar21 + -8) = 0x14018f7a9; iStack_cf0 = iVar9; FUN_14016ded0(local_1988,&local_cf8); if (local_78 == (undefined4 *)0x0) { *(undefined8 *)(puVar21 + -8) = 0x14018f9a6; FUN_14016d300(local_29d0,PTR_u_ArrayWithExternalBuffer_is_unini_1403440d0); /* WARNING: Subroutine does not return */ *(undefined **)(puVar21 + -8) = &UNK_14018f9b9; _CxxThrowException(local_29d0,(ThrowInfo *)&DAT_1403417f8); } if (local_6c < 0) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar21 + -8) = &UNK_14018f992; FUN_14016d6b0(); } *(undefined8 *)(puVar21 + -8) = 0x14018f7d4; FUN_14016ded0(local_1988,uVar12); pcVar5 = *(code **)(plVar11[0x21] + 0x10); *(undefined8 *)(puVar21 + -8) = 0x14018f7e1; uVar12 = (*pcVar5)(); local_29e8 = uVar12; *(undefined8 *)(puVar21 + -8) = 0x14018f7f3; FUN_14016db50(uVar12); local_29e0 = 1; local_2a30 = (ulonglong *)CONCAT44(local_2a30._4_4_,(int)param_3[4]); local_2a28 = param_3[3]; local_2a20 = *(undefined1 *)((longlong)param_3 + 0x2d); local_2a1c = (int)param_3[6]; local_2a18 = *(undefined1 *)((longlong)param_3 + 0x41); local_2a17 = (undefined1)param_3[8]; *(undefined8 *)(puVar21 + -8) = 0x14018f841; FUN_1401bbe20(plVar11 + 0xe0,0,local_1988,&local_2a30); *(undefined8 *)(puVar21 + -8) = 0x14018f849; FUN_14016dbe0(uVar12); pvVar7 = local_2988; local_29e0 = 0; if (local_d08 == (undefined1 *)0x0) { *(undefined8 *)(puVar21 + -8) = 0x14018f979; FUN_14016d300(local_29d0,PTR_u_ArrayWithExternalBuffer_is_unini_1403440d0); /* WARNING: Subroutine does not return */ *(undefined **)(puVar21 + -8) = &UNK_14018f98c; _CxxThrowException(local_29d0,(ThrowInfo *)&DAT_1403417f8); } if (local_cfc < 0) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar21 + -8) = &UNK_14018f965; FUN_14016d6b0(); } local_d00 = 0; if (100 < local_2978) { *(undefined8 *)(puVar21 + -8) = 0x14018f887; operator_delete__(pvVar7); } local_2a30 = &local_2a70; *(undefined8 *)(puVar21 + -8) = 0x14018f899; FUN_14016d0e0(&local_2a70); if (((ulonglong *)local_2a68 != (ulonglong *)0x0) && (local_2a5c < 0)) { /* WARNING: Subroutine does not return */ *(undefined8 *)(puVar21 + -8) = 0x14018f95f; FUN_14016d6b0(); } } } *(undefined8 *)(puVar21 + -8) = 0x14018f943; FUN_1401baa20(plVar11 + 0x18); lVar13 = lVar13 + 1; } while (lVar13 < iVar24); } if ((local_2a80 != (undefined8 *)0x0) && (piVar16 = (int *)(local_2a80 + -2), *piVar16 == 0xdddd)) { *(undefined8 *)(puVar21 + -8) = 0x14018f9ed; free(piVar16); } if ((local_2a38 != (longlong *)0x0) && (plVar11 = local_2a38 + -2, (int)*plVar11 == 0xdddd)) { *(undefined8 *)(puVar21 + -8) = 0x14018fa08; free(plVar11); } puVar6 = local_2628; if (100 < local_2618) { *(undefined8 *)(puVar21 + -8) = 0x14018fa1f; operator_delete__(puVar6); } pvVar7 = local_27d8; if (100 < local_27c8) { *(undefined8 *)(puVar21 + -8) = 0x14018fa36; operator_delete__(pvVar7); } *(undefined8 *)(puVar21 + -8) = 0x14018fa48; return 1; }