404 lines
12 KiB
C
404 lines
12 KiB
C
/* 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;
|
|
}
|
|
|