/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401a16d0 FUN_1401a16d0 * Pseudocode, not original source. */ /* WARNING: Function: __chkstk replaced with injection: alloca_probe */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ ulonglong FUN_1401a16d0(longlong *param_1,undefined8 param_2,longlong param_3,undefined4 *param_4, undefined4 param_5) { int *piVar1; undefined *puVar2; byte bVar3; int iVar4; uint uVar5; uint uVar6; uint *puVar7; undefined8 uVar8; ulonglong uVar9; ulonglong uVar10; uint *puVar11; undefined4 uVar12; uint uVar13; ulonglong uVar14; undefined *puVar15; undefined1 auStack_1b18 [32]; undefined ***local_1af8; uint *local_1ae8; longlong *local_1ae0; int local_1ad8 [2]; undefined1 local_1ad0 [8]; longlong local_1ac8; ulonglong local_1ac0; int local_1ab8; int local_1ab4; undefined1 local_1aa8 [8]; longlong local_1aa0; ulonglong local_1a98; undefined4 local_1a90; int local_1a8c; undefined4 *local_1a80; longlong local_1a78; undefined *local_1a70; undefined8 local_1a68; undefined1 local_1a60; undefined **local_1a58; undefined8 local_1a50; undefined8 local_1a48; undefined8 local_1a40; undefined8 local_1a38; undefined8 local_1a30; undefined1 local_1a28 [8]; longlong local_1a20; longlong local_1a18; undefined4 local_1a10; int local_1a0c; undefined1 local_1a00 [136]; undefined1 local_1978 [3200]; undefined1 *local_cf8; undefined4 local_cf0; undefined4 local_cec; undefined1 local_ce8 [3216]; ulonglong local_58; undefined8 uStack_48; uStack_48 = 0x1401a16ef; local_1a30 = 0xfffffffffffffffe; local_58 = DAT_1403463c0 ^ (ulonglong)auStack_1b18; local_1a80 = param_4; local_1a78 = param_3; if ((*(int *)(param_3 + 0x28) == 0) || (iVar4 = FUN_14019b440(param_2), iVar4 < 0x33)) goto LAB_1401a1d86; FUN_14016b440(local_1aa8); FUN_14016abe0(local_1aa8); FUN_14016b820(local_1aa8,param_2); if (local_1aa0 == 0) { uVar12 = local_1a90; if (local_1a98 == 0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } } else { uVar12 = *(undefined4 *)(local_1aa0 + 0x18); } FUN_14016b440(local_1ad0); FUN_14016abe0(local_1ad0); FUN_14016b5a0(local_1ad0,uVar12); local_1ad8[0] = FUN_1401c3b40(uVar12); uVar9 = 0; uVar14 = local_1a98; if (local_1a98 == 0) { if (local_1aa0 == 0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } uVar14 = uVar9; if (*(int *)(local_1aa0 + 0x18) != 0) { uVar14 = *(ulonglong *)(local_1aa0 + 0x10); } } uVar10 = local_1ac0; if (local_1ac0 == 0) { if (local_1ac8 == 0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } uVar10 = uVar9; if (*(int *)(local_1ac8 + 0x18) != 0) { uVar10 = *(ulonglong *)(local_1ac8 + 0x10); } } iVar4 = FUN_1401c39b0(uVar10,local_1ad8,uVar14,uVar12); if (iVar4 == 0) { uVar5 = FUN_14019b440(param_2); if (local_1ad8[0] + 9U < uVar5) { FUN_14016b5a0(local_1ad0); FUN_14016b440(local_1a28); FUN_14016b0c0(local_1a28,local_1a00,0x80); FUN_14004eef0(local_1a28,0x26); if (local_1ac8 == 0) { iVar4 = local_1ab8; if (local_1ac0 == 0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } } else { iVar4 = *(int *)(local_1ac8 + 0x18); } FUN_14016cac0(local_1a28,(longlong)iVar4); iVar4 = FUN_14019b440(param_2); FUN_14016cac0(local_1a28,(longlong)iVar4); local_cec = 200; local_cf0 = 0; local_cf8 = local_1978; FUN_14016e080(local_ce8,local_1a28); FUN_14016ded0(local_1978,local_ce8); FUN_14016ddc0(local_ce8); FUN_14016e080(local_ce8,local_1ad0); FUN_14016ded0(local_1978,local_ce8); FUN_14016ddc0(local_ce8); local_1af8 = (undefined ***)CONCAT44(local_1af8._4_4_,param_5); bVar3 = FUN_14019ff40(param_1,local_1978,local_1a78,param_4); FUN_14016ddc0(local_1978); local_1ae0 = &local_1a20; FUN_14016d0e0(&local_1a20); if (local_1a18 != 0) { if (local_1a0c < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } local_1a10 = 0; } local_1ae0 = &local_1ac8; FUN_14016d0e0(&local_1ac8); if (local_1ac0 != 0) { if (local_1ab4 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } local_1ab8 = 0; } local_1ae0 = &local_1aa0; FUN_14016d0e0(&local_1aa0); if ((local_1a98 != 0) && (local_1a8c < 0)) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } return (ulonglong)bVar3; } local_1ae0 = &local_1ac8; FUN_14016d0e0(&local_1ac8); if (local_1ac0 != 0) { if (local_1ab4 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } local_1ab8 = 0; } local_1ae0 = &local_1aa0; FUN_14016d0e0(&local_1aa0); if ((local_1a98 != 0) && (local_1a8c < 0)) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } goto LAB_1401a1d86; } FUN_14016d8c0(); local_1a70 = PTR_DAT_1403440a0; FUN_14004c020(&local_1a70,L"Packet compression failed! Error code=%d",iVar4); puVar2 = local_1a70; puVar15 = local_1a70; if (local_1a70 == (undefined *)0x0) { puVar15 = PTR_DAT_1403440a0; } FUN_14016d8c0(); local_1ae8 = (uint *)PTR_DAT_1403440a0; uVar5 = FUN_14016d740(puVar15); if ((local_1ae8 != (uint *)0x0) && (uVar9 = 0, local_1ae8 != (uint *)PTR_DAT_1403440a0)) { uVar9 = (ulonglong)local_1ae8[-2]; } uVar6 = uVar5; if ((((int)uVar5 <= (int)uVar9) && (uVar6 = 0, local_1ae8 != (uint *)0x0)) && (uVar6 = 0, local_1ae8 != (uint *)PTR_DAT_1403440a0)) { uVar6 = local_1ae8[-2]; } uVar13 = 1; if (1 < (int)uVar6) { uVar13 = uVar6; } if (local_1ae8 == (uint *)0x0) { uVar6 = 0; } else if (local_1ae8 == (uint *)PTR_DAT_1403440a0) { uVar6 = 0; } else { uVar6 = local_1ae8[-2]; } if ((int)uVar6 < (int)uVar13) { if (local_1ae8 == (uint *)0x0) { local_1ae8 = (uint *)PTR_DAT_1403440a0; } if ((int)uVar13 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } if (uVar13 == 0) { FUN_14004eb70(&local_1ae8); } else { if (local_1ae8 == (uint *)0x0) { uVar6 = 0; } else if (local_1ae8 == (uint *)PTR_DAT_1403440a0) { uVar6 = 0; } else { uVar6 = local_1ae8[-2]; } if (uVar13 != uVar6) { puVar7 = (uint *)FUN_14016d940((longlong)(int)uVar13 * 2 + 10); if (puVar7 != (uint *)0x0) { *puVar7 = 0; puVar7[1] = 1; } *puVar7 = uVar13; if (local_1ae8 == (uint *)0x0) { uVar6 = 0; } else if (local_1ae8 == (uint *)PTR_DAT_1403440a0) { uVar6 = 0; } else { uVar6 = local_1ae8[-2]; } puVar11 = (uint *)PTR_DAT_1403440a0; if ((int)uVar13 < (int)uVar6) { LAB_1401a1955: if (local_1ae8 != (uint *)0x0) { puVar11 = local_1ae8; } } else { if (local_1ae8 != (uint *)0x0) { if (local_1ae8 == (uint *)PTR_DAT_1403440a0) { uVar13 = 0; } else { uVar13 = local_1ae8[-2]; } goto LAB_1401a1955; } uVar13 = 0; } FUN_14016d770(puVar7 + 2,puVar11,uVar13); FUN_14004eb70(&local_1ae8); param_4 = local_1a80; local_1ae8 = puVar7 + 2; } } } FUN_14004e850(&local_1ae8); puVar7 = local_1ae8; if (local_1ae8 == (uint *)0x0) { puVar7 = (uint *)PTR_DAT_1403440a0; } FUN_14016d770(puVar7,puVar15,uVar5); puVar7 = local_1ae8; if (local_1ae8 == (uint *)0x0) { puVar7 = (uint *)PTR_DAT_1403440a0; } uVar6 = FUN_14016d740(puVar7); uVar13 = 0; uVar5 = 0; if (0 < (int)uVar6) { uVar5 = uVar6; } uVar6 = uVar13; if ((local_1ae8 != (uint *)0x0) && (local_1ae8 != (uint *)PTR_DAT_1403440a0)) { uVar6 = local_1ae8[-2]; } if (((int)uVar5 < (int)uVar6) || (uVar5 = uVar13, local_1ae8 == (uint *)0x0)) { LAB_1401a19f0: if (((local_1ae8 != (uint *)PTR_DAT_1403440a0) && (local_1ae8 != (uint *)0x0)) && (local_1ae8 + -2 != (uint *)0x0)) { local_1ae8[-2] = uVar5; *(undefined2 *)((longlong)local_1ae8 + (longlong)(int)uVar5 * 2) = 0; } } else if (local_1ae8 != (uint *)PTR_DAT_1403440a0) { uVar5 = local_1ae8[-2]; goto LAB_1401a19f0; } local_1a50 = 0; local_1a48 = 0; local_1a40 = 0; local_1a38 = 0; local_1a58 = Proud::ByteArray::vftable; local_1af8 = &local_1a58; uVar8 = FUN_140198f80(&local_1ae0,0x27,*param_4,&local_1ae8); (**(code **)(*param_1 + 0x80))(param_1,uVar8); FUN_14019a9e0(&local_1a58); puVar7 = local_1ae8; if (((local_1ae8 != (uint *)0x0) && (local_1ae8 != (uint *)PTR_DAT_1403440a0)) && (puVar11 = local_1ae8 + -2, puVar11 != (uint *)0x0)) { uVar8 = FUN_14016d8c0(); local_1a68 = uVar8; FUN_14016db50(uVar8); local_1a60 = 1; puVar7 = puVar7 + -1; *puVar7 = *puVar7 - 1; if (*puVar7 == 0) { FUN_14016d970(puVar11); } FUN_14016dbe0(uVar8); } if (((puVar2 != (undefined *)0x0) && (puVar2 != PTR_DAT_1403440a0)) && (puVar2 + -8 != (undefined *)0x0)) { uVar8 = FUN_14016d8c0(); local_1a68 = uVar8; FUN_14016db50(uVar8); local_1a60 = 1; piVar1 = (int *)(puVar2 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(puVar2 + -8); } FUN_14016dbe0(uVar8); } local_1ae0 = &local_1ac8; FUN_14016d0e0(&local_1ac8); if (local_1ac0 != 0) { if (local_1ab4 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } local_1ab8 = 0; } local_1ae0 = &local_1aa0; FUN_14016d0e0(&local_1aa0); param_4 = local_1a80; if ((local_1a98 != 0) && (local_1a8c < 0)) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } LAB_1401a1d86: local_1af8 = (undefined ***)CONCAT44(local_1af8._4_4_,param_5); uVar9 = FUN_14019ff40(param_1,param_2,local_1a78,param_4); return uVar9; }