/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400c0ec0 FUN_1400c0ec0 * 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_1400c0ec0(longlong *param_1,longlong *param_2,int *param_3,uint *param_4,uint param_5) { short *psVar1; int iVar2; uint uVar3; uint uVar4; ulonglong uVar5; uint *puVar6; longlong *plVar7; undefined ***pppuVar8; ulonglong uVar9; undefined8 *puVar10; ulonglong uVar11; short **ppsVar12; undefined4 *puVar13; wchar_t *pwVar14; uint *puVar15; undefined1 *puVar16; undefined8 uVar17; longlong lVar18; uint uVar19; ulonglong uVar20; SIZE_T SVar21; int *piVar22; ulonglong uVar23; uint **ppuVar24; short *psVar25; undefined1 auStackY_1b18 [32]; uint *local_1ae8; longlong *local_1ae0; uint local_1ad8 [2]; int local_1ad0 [2]; longlong local_1ac8; ulonglong local_1ac0; int local_1ab8; int local_1ab4; undefined8 local_1aa8; longlong local_1aa0; ulonglong local_1a98; uint local_1a90; int local_1a8c; uint *local_1a80; int *local_1a78; short *local_1a70; undefined ***local_1a68; undefined1 local_1a60; undefined **local_1a58; undefined8 local_1a50; undefined8 local_1a48; undefined8 local_1a40; undefined8 local_1a38; undefined8 local_1a30; undefined4 local_1a28 [2]; longlong local_1a20; longlong local_1a18; undefined4 local_1a10; int local_1a0c; undefined1 local_1a00 [136]; longlong local_1978 [400]; longlong *local_cf8; undefined4 local_cf0; undefined4 local_cec; undefined1 local_ce8 [3216]; ulonglong local_58; undefined8 uStack_48; uStack_48 = 0x1400c0edf; local_1a30 = 0xfffffffffffffffe; local_58 = DAT_1401ac5a0 ^ (ulonglong)auStackY_1b18; local_1a80 = param_4; local_1a78 = param_3; if ((param_3[10] == 0) || (plVar7 = param_2, puVar6 = param_4, iVar2 = FUN_1400de5d0((longlong)param_2,param_2,param_3,param_4), iVar2 < 0x33)) goto LAB_1400c1576; FUN_1400bca00((undefined4 *)&local_1aa8); FUN_1400bc4d0((longlong)&local_1aa8,plVar7,(SIZE_T)param_3,puVar6); puVar10 = &local_1aa8; plVar7 = param_2; FUN_1400bcde0(puVar10,(longlong)param_2,(SIZE_T)param_3,(longlong)puVar6); if (local_1aa0 == 0) { uVar3 = local_1a90; if (local_1a98 == 0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(puVar10,plVar7,param_3,puVar6); } } else { uVar3 = *(uint *)(local_1aa0 + 0x18); } FUN_1400bca00(local_1ad0); FUN_1400bc4d0((longlong)local_1ad0,plVar7,(SIZE_T)param_3,puVar6); uVar5 = (ulonglong)uVar3; FUN_1400bcb60(local_1ad0,uVar5,(SIZE_T)param_3,puVar6); uVar11 = (ulonglong)uVar3; local_1ad8[0] = FUN_1400f6750(uVar3); uVar9 = 0; uVar20 = local_1a98; if (local_1a98 == 0) { if (local_1aa0 == 0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(uVar11,uVar5,0,puVar6); } uVar20 = uVar9; if (*(int *)(local_1aa0 + 0x18) != 0) { uVar20 = *(ulonglong *)(local_1aa0 + 0x10); } } uVar11 = local_1ac0; if (local_1ac0 == 0) { if (local_1ac8 == 0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(0,uVar5,uVar20,puVar6); } uVar11 = uVar9; if (*(int *)(local_1ac8 + 0x18) != 0) { uVar11 = *(ulonglong *)(local_1ac8 + 0x10); } } uVar23 = (ulonglong)uVar3; puVar6 = local_1ad8; uVar5 = FUN_1400f65c0(uVar11,puVar6,uVar20,uVar3); if ((int)uVar5 == 0) { uVar3 = FUN_1400de5d0((longlong)param_2,puVar6,uVar20,uVar23); if (local_1ad8[0] + 9 < uVar3) { FUN_1400bcb60(local_1ad0,(ulonglong)local_1ad8[0],uVar20,uVar23); FUN_1400bca00(local_1a28); SVar21 = 0x80; puVar16 = local_1a00; FUN_1400bc680((longlong)local_1a28,(longlong)puVar16,0x80,uVar23); uVar17 = CONCAT71((int7)((ulonglong)puVar16 >> 8),0x26); puVar13 = local_1a28; FUN_140054a10((longlong)puVar13,uVar17,SVar21,uVar23); if (local_1ac8 == 0) { iVar2 = local_1ab8; if (local_1ac0 == 0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(puVar13,uVar17,SVar21,uVar23); } } else { iVar2 = *(int *)(local_1ac8 + 0x18); } lVar18 = (longlong)iVar2; FUN_1400bddd0((longlong)local_1a28,lVar18,SVar21,uVar23); iVar2 = FUN_1400de5d0((longlong)param_2,lVar18,SVar21,uVar23); FUN_1400bddd0((longlong)local_1a28,(longlong)iVar2,SVar21,uVar23); local_cec = 200; local_cf0 = 0; local_cf8 = local_1978; FUN_14007db50((longlong)local_ce8,(longlong)local_1a28,SVar21); puVar16 = local_ce8; FUN_14007cb60((longlong)local_1978,(longlong)puVar16,SVar21,uVar23); FUN_14007ca50((longlong)local_ce8,puVar16,SVar21,uVar23); FUN_14007db50((longlong)local_ce8,(longlong)local_1ad0,SVar21); puVar16 = local_ce8; FUN_14007cb60((longlong)local_1978,(longlong)puVar16,SVar21,uVar23); FUN_14007ca50((longlong)local_ce8,puVar16,SVar21,uVar23); plVar7 = local_1978; piVar22 = local_1a78; uVar9 = FUN_1400bf730(param_1,plVar7,local_1a78,(int *)param_4,param_5); FUN_14007ca50((longlong)local_1978,plVar7,piVar22,param_4); local_1ae0 = &local_1a20; FUN_1400d1800(&local_1a20); if (local_1a18 != 0) { if (local_1a0c < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_1a10 = 0; } local_1ae0 = &local_1ac8; FUN_1400d1800(&local_1ac8); if (local_1ac0 != 0) { if (local_1ab4 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_1ab8 = 0; } local_1ae0 = &local_1aa0; FUN_1400d1800(&local_1aa0); if ((local_1a98 != 0) && (local_1a8c < 0)) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } return uVar9 & 0xff; } local_1ae0 = &local_1ac8; FUN_1400d1800(&local_1ac8); if (local_1ac0 != 0) { if (local_1ab4 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_1ab8 = 0; } local_1ae0 = &local_1aa0; FUN_1400d1800(&local_1aa0); if ((local_1a98 != 0) && (local_1a8c < 0)) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } goto LAB_1400c1576; } FUN_14006cb70(uVar11,puVar6,uVar20,uVar23); local_1a70 = (short *)PTR_DAT_1401ac010; uVar5 = uVar5 & 0xffffffff; pwVar14 = L"Packet compression failed! Error code=%d"; ppsVar12 = &local_1a70; FUN_140053d20((longlong *)ppsVar12,L"Packet compression failed! Error code=%d",uVar5,uVar23); psVar1 = local_1a70; psVar25 = local_1a70; if (local_1a70 == (short *)0x0) { psVar25 = (short *)PTR_DAT_1401ac010; } FUN_14006cb70(ppsVar12,pwVar14,uVar5,uVar23); local_1ae8 = (uint *)PTR_DAT_1401ac010; uVar3 = FUN_14006c9f0(psVar25); if ((local_1ae8 != (uint *)0x0) && (uVar9 = 0, local_1ae8 != (uint *)PTR_DAT_1401ac010)) { uVar9 = (ulonglong)local_1ae8[-2]; } uVar4 = uVar3; if ((((int)uVar3 <= (int)uVar9) && (uVar4 = 0, local_1ae8 != (uint *)0x0)) && (local_1ae8 != (uint *)PTR_DAT_1401ac010)) { uVar4 = local_1ae8[-2]; } uVar19 = 1; if (1 < (int)uVar4) { uVar19 = uVar4; } if (local_1ae8 == (uint *)0x0) { uVar4 = 0; } else if (local_1ae8 == (uint *)PTR_DAT_1401ac010) { uVar4 = 0; } else { uVar4 = local_1ae8[-2]; } if ((int)uVar4 < (int)uVar19) { if (local_1ae8 == (uint *)0x0) { local_1ae8 = (uint *)PTR_DAT_1401ac010; } if ((int)uVar19 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } if (uVar19 == 0) { FUN_1400031e0((longlong *)&local_1ae8,PTR_DAT_1401ac010,uVar9,uVar23); } else { if (local_1ae8 == (uint *)0x0) { uVar4 = 0; } else if (local_1ae8 == (uint *)PTR_DAT_1401ac010) { uVar4 = 0; } else { uVar4 = local_1ae8[-2]; } if (uVar19 != uVar4) { puVar6 = (uint *)FUN_14006cbf0((longlong)(int)uVar19 * 2 + 10); if (puVar6 != (uint *)0x0) { *puVar6 = 0; puVar6[1] = 1; } *puVar6 = uVar19; if (local_1ae8 == (uint *)0x0) { uVar4 = 0; } else if (local_1ae8 == (uint *)PTR_DAT_1401ac010) { uVar4 = 0; } else { uVar4 = local_1ae8[-2]; } puVar15 = (uint *)PTR_DAT_1401ac010; if ((int)uVar19 < (int)uVar4) { LAB_1400c1145: if (local_1ae8 != (uint *)0x0) { puVar15 = local_1ae8; } } else { if (local_1ae8 != (uint *)0x0) { if (local_1ae8 == (uint *)PTR_DAT_1401ac010) { uVar19 = 0; } else { uVar19 = local_1ae8[-2]; } goto LAB_1400c1145; } uVar19 = 0; } uVar9 = (ulonglong)uVar19; FUN_14006ca20(puVar6 + 2,puVar15,uVar19); FUN_1400031e0((longlong *)&local_1ae8,puVar15,uVar9,uVar23); param_4 = local_1a80; local_1ae8 = puVar6 + 2; } } } FUN_140002e40((longlong *)&local_1ae8); puVar6 = local_1ae8; if (local_1ae8 == (uint *)0x0) { puVar6 = (uint *)PTR_DAT_1401ac010; } FUN_14006ca20(puVar6,psVar25,uVar3); puVar6 = local_1ae8; if (local_1ae8 == (uint *)0x0) { puVar6 = (uint *)PTR_DAT_1401ac010; } uVar4 = FUN_14006c9f0((short *)puVar6); uVar19 = 0; uVar3 = 0; if (0 < (int)uVar4) { uVar3 = uVar4; } uVar4 = uVar19; if ((local_1ae8 != (uint *)0x0) && (local_1ae8 != (uint *)PTR_DAT_1401ac010)) { uVar4 = local_1ae8[-2]; } if (((int)uVar3 < (int)uVar4) || (uVar3 = uVar19, local_1ae8 == (uint *)0x0)) { LAB_1400c11e0: if (((local_1ae8 != (uint *)PTR_DAT_1401ac010) && (local_1ae8 != (uint *)0x0)) && (local_1ae8 + -2 != (uint *)0x0)) { local_1ae8[-2] = uVar3; *(undefined2 *)((longlong)local_1ae8 + (longlong)(int)uVar3 * 2) = 0; } } else if (local_1ae8 != (uint *)PTR_DAT_1401ac010) { uVar3 = local_1ae8[-2]; goto LAB_1400c11e0; } local_1a50 = 0; local_1a48 = 0; local_1a40 = 0; local_1a38 = 0; local_1a58 = Proud::ByteArray::vftable; ppuVar24 = &local_1ae8; plVar7 = FUN_140078c10((longlong *)&local_1ae0,0x27,(ulonglong)*param_4,(longlong *)ppuVar24, (longlong)&local_1a58); lVar18 = *param_1; (**(code **)(lVar18 + 0x80))(param_1); pppuVar8 = &local_1a58; FUN_140078360(pppuVar8); puVar6 = local_1ae8; if (((local_1ae8 != (uint *)0x0) && (local_1ae8 != (uint *)PTR_DAT_1401ac010)) && (puVar15 = local_1ae8 + -2, puVar15 != (uint *)0x0)) { pppuVar8 = (undefined ***)FUN_14006cb70(pppuVar8,plVar7,lVar18,ppuVar24); local_1a68 = pppuVar8; FUN_14006b350((int *)pppuVar8); local_1a60 = 1; puVar6 = puVar6 + -1; *puVar6 = *puVar6 - 1; if (*puVar6 == 0) { FUN_14006cc60(puVar15); } FUN_14006b3e0((longlong)pppuVar8); } if (((psVar1 != (short *)0x0) && (psVar1 != (short *)PTR_DAT_1401ac010)) && (psVar1 + -4 != (short *)0x0)) { pppuVar8 = (undefined ***)FUN_14006cb70(pppuVar8,plVar7,lVar18,ppuVar24); local_1a68 = pppuVar8; FUN_14006b350((int *)pppuVar8); local_1a60 = 1; piVar22 = (int *)(psVar1 + -2); *piVar22 = *piVar22 + -1; if (*piVar22 == 0) { FUN_14006cc60(psVar1 + -4); } FUN_14006b3e0((longlong)pppuVar8); } local_1ae0 = &local_1ac8; FUN_1400d1800(&local_1ac8); if (local_1ac0 != 0) { if (local_1ab4 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_1ab8 = 0; } local_1ae0 = &local_1aa0; FUN_1400d1800(&local_1aa0); param_4 = local_1a80; if ((local_1a98 != 0) && (local_1a8c < 0)) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } LAB_1400c1576: uVar9 = FUN_1400bf730(param_1,param_2,local_1a78,(int *)param_4,param_5); return uVar9; }