346 lines
11 KiB
C
346 lines
11 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x1400e4500 FUN_1400e4500
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
/* WARNING: Type propagation algorithm not settling */
|
|
|
|
void FUN_1400e4500(undefined ***param_1,uint *param_2,undefined8 param_3,undefined8 param_4)
|
|
|
|
{
|
|
undefined **ppuVar1;
|
|
undefined8 *puVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
undefined8 uVar5;
|
|
ulonglong uVar6;
|
|
uint *puVar7;
|
|
longlong *plVar8;
|
|
undefined ***pppuVar9;
|
|
undefined **ppuVar10;
|
|
uint uVar11;
|
|
int iVar12;
|
|
ulonglong uVar13;
|
|
undefined8 uVar14;
|
|
undefined1 *puVar15;
|
|
IMAGE_DOS_HEADER *pIVar16;
|
|
IMAGE_DOS_HEADER *pIVar17;
|
|
undefined ***pppuVar18;
|
|
uint uVar19;
|
|
uint uVar20;
|
|
undefined1 auStackY_df8 [32];
|
|
undefined **local_dc8;
|
|
ulonglong *local_dc0;
|
|
uint local_db8;
|
|
uint local_db4;
|
|
uint local_db0 [2];
|
|
undefined1 *local_da8;
|
|
longlong local_da0 [4];
|
|
longlong *local_d80;
|
|
undefined8 local_d78;
|
|
undefined4 local_d6c;
|
|
undefined1 local_d68 [88];
|
|
undefined **local_d10;
|
|
byte local_d08 [32];
|
|
undefined ***local_ce8;
|
|
undefined1 local_ce0;
|
|
longlong local_cd8 [2];
|
|
undefined1 local_cc8 [3216];
|
|
ulonglong local_38;
|
|
|
|
local_cd8[1] = 0xfffffffffffffffe;
|
|
local_38 = DAT_1401ac5a0 ^ (ulonglong)auStackY_df8;
|
|
(**(code **)(param_1[0x21][0xf] + 0x10))();
|
|
uVar5 = FUN_1400bd3c0(param_2,local_db0,param_3,param_4);
|
|
if ((char)uVar5 == '\0') {
|
|
return;
|
|
}
|
|
uVar14 = 4;
|
|
uVar5 = FUN_1400bc930(param_2,(undefined8 *)&local_db4,4);
|
|
if ((char)uVar5 == '\0') {
|
|
return;
|
|
}
|
|
uVar6 = FUN_1400bcfd0(param_2,&local_da8,uVar14,param_4);
|
|
if ((char)uVar6 == '\0') {
|
|
return;
|
|
}
|
|
if ((int)(uint)local_da8 < 0) {
|
|
return;
|
|
}
|
|
if (DAT_1401ac140 <= (int)(uint)local_da8) {
|
|
return;
|
|
}
|
|
FUN_1400bca00((undefined4 *)(local_d68 + 0x28));
|
|
uVar5 = FUN_1400bcc60(param_2,(int *)(local_d68 + 0x28),(uint)local_da8,param_4);
|
|
if ((char)uVar5 == '\0') {
|
|
local_da8 = local_d68 + 0x30;
|
|
FUN_1400d1800((longlong *)(local_d68 + 0x30));
|
|
if (local_d68._56_8_ == 0) {
|
|
return;
|
|
}
|
|
if (-1 < (int)local_d68._68_4_) {
|
|
return;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
uVar6 = (ulonglong)local_db0[0];
|
|
FUN_1400aca90((longlong *)param_1[0x21],(longlong *)&local_dc0,local_db0[0]);
|
|
if ((((local_dc0 == (ulonglong *)0x0) || (uVar13 = *local_dc0, uVar13 == 0)) ||
|
|
(*(char *)(uVar13 + 0x684) != '\0')) || (*(char *)(uVar13 + 0x650) != '\0'))
|
|
goto LAB_1400e4a40;
|
|
local_d78 = (**(code **)(param_1[0x21][0x11] + 0x18))();
|
|
uVar13 = 0;
|
|
uVar19 = 0;
|
|
local_da0[3] = 0;
|
|
local_da0[2] = 0;
|
|
local_da0[1] = 0;
|
|
local_d80 = (longlong *)0x0;
|
|
local_da0[0] = 0;
|
|
uVar20 = 0;
|
|
local_d6c = 0;
|
|
FUN_14007db50((longlong)local_cc8,(longlong)(local_d68 + 0x28),uVar6);
|
|
plVar8 = local_da0;
|
|
puVar15 = local_cc8;
|
|
uVar6 = (ulonglong)local_db4;
|
|
FUN_1400df040(param_1[0x21][0x9c],uVar6,(SIZE_T)puVar15,(undefined4 *)plVar8);
|
|
FUN_14007ca50((longlong)local_cc8,uVar6,puVar15,plVar8);
|
|
local_d68._8_2_ = 0;
|
|
local_d68._10_2_ = 0;
|
|
local_d68._12_2_ = 0;
|
|
local_d68._14_2_ = 0;
|
|
local_d68._16_8_ = 0;
|
|
local_d68._24_2_ = 0;
|
|
local_d68._26_2_ = 0;
|
|
local_d68._28_2_ = 0;
|
|
local_d68._30_2_ = 0;
|
|
local_d68._0_8_ = Proud::CReceivedMessageList::vftable;
|
|
local_d68._32_2_ = 1000;
|
|
local_d68._34_2_ = 0;
|
|
local_d68._36_2_ = 1;
|
|
local_d68._38_2_ = 0;
|
|
uVar6 = uVar13;
|
|
if (local_dc0 != (ulonglong *)0x0) {
|
|
uVar6 = *local_dc0;
|
|
}
|
|
pppuVar9 = (undefined ***)(uVar6 + 0x638);
|
|
pppuVar18 = (undefined ***)&local_db8;
|
|
pIVar16 = (IMAGE_DOS_HEADER *)local_d68;
|
|
plVar8 = local_da0;
|
|
FUN_1400f5010((longlong)pppuVar9,plVar8,(longlong)pIVar16,(undefined4 *)pppuVar18);
|
|
if (local_db8 != 0) {
|
|
FUN_14006cb70(pppuVar9,plVar8,pIVar16,pppuVar18);
|
|
local_dc8 = (undefined **)PTR_DAT_1401ac010;
|
|
uVar3 = FUN_14006c9f0(L"Stream Extract Error at Reliable UDP");
|
|
uVar6 = uVar13;
|
|
if ((local_dc8 != (undefined **)0x0) &&
|
|
(uVar6 = 0, local_dc8 != (undefined **)PTR_DAT_1401ac010)) {
|
|
uVar6 = (ulonglong)*(uint *)(local_dc8 + -1);
|
|
}
|
|
uVar4 = uVar3;
|
|
if ((((int)uVar3 <= (int)uVar6) && (uVar4 = uVar20, local_dc8 != (undefined **)0x0)) &&
|
|
(local_dc8 != (undefined **)PTR_DAT_1401ac010)) {
|
|
uVar4 = *(uint *)(local_dc8 + -1);
|
|
}
|
|
uVar11 = 1;
|
|
if (1 < (int)uVar4) {
|
|
uVar11 = uVar4;
|
|
}
|
|
uVar4 = uVar20;
|
|
if ((local_dc8 != (undefined **)0x0) && (local_dc8 != (undefined **)PTR_DAT_1401ac010)) {
|
|
uVar4 = *(uint *)(local_dc8 + -1);
|
|
}
|
|
if ((int)uVar4 < (int)uVar11) {
|
|
if (local_dc8 == (undefined **)0x0) {
|
|
local_dc8 = (undefined **)PTR_DAT_1401ac010;
|
|
}
|
|
if ((int)uVar11 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
if (uVar11 == 0) {
|
|
FUN_1400031e0((longlong *)&local_dc8,PTR_DAT_1401ac010,uVar6,pppuVar18);
|
|
}
|
|
else {
|
|
uVar4 = uVar20;
|
|
if ((local_dc8 != (undefined **)0x0) && (local_dc8 != (undefined **)PTR_DAT_1401ac010)) {
|
|
uVar4 = *(uint *)(local_dc8 + -1);
|
|
}
|
|
if (uVar11 != uVar4) {
|
|
puVar7 = (uint *)FUN_14006cbf0((longlong)(int)uVar11 * 2 + 10);
|
|
if (puVar7 != (uint *)0x0) {
|
|
*puVar7 = 0;
|
|
puVar7[1] = 1;
|
|
}
|
|
*puVar7 = uVar11;
|
|
uVar4 = uVar20;
|
|
if ((local_dc8 != (undefined **)0x0) && (local_dc8 != (undefined **)PTR_DAT_1401ac010)) {
|
|
uVar4 = *(uint *)(local_dc8 + -1);
|
|
}
|
|
ppuVar10 = (undefined **)PTR_DAT_1401ac010;
|
|
if ((int)uVar11 < (int)uVar4) {
|
|
LAB_1400e480e:
|
|
if (local_dc8 != (undefined **)0x0) {
|
|
ppuVar10 = local_dc8;
|
|
}
|
|
}
|
|
else {
|
|
uVar11 = uVar20;
|
|
if (local_dc8 != (undefined **)0x0) {
|
|
if (local_dc8 != (undefined **)PTR_DAT_1401ac010) {
|
|
uVar11 = *(uint *)(local_dc8 + -1);
|
|
}
|
|
goto LAB_1400e480e;
|
|
}
|
|
}
|
|
uVar6 = (ulonglong)uVar11;
|
|
FUN_14006ca20(puVar7 + 2,ppuVar10,uVar11);
|
|
FUN_1400031e0((longlong *)&local_dc8,ppuVar10,uVar6,pppuVar18);
|
|
local_dc8 = (undefined **)(puVar7 + 2);
|
|
}
|
|
}
|
|
}
|
|
FUN_140002e40((longlong *)&local_dc8);
|
|
ppuVar10 = local_dc8;
|
|
if (local_dc8 == (undefined **)0x0) {
|
|
ppuVar10 = (undefined **)PTR_DAT_1401ac010;
|
|
}
|
|
FUN_14006ca20(ppuVar10,L"Stream Extract Error at Reliable UDP",uVar3);
|
|
ppuVar10 = local_dc8;
|
|
if (local_dc8 == (undefined **)0x0) {
|
|
ppuVar10 = (undefined **)PTR_DAT_1401ac010;
|
|
}
|
|
uVar3 = FUN_14006c9f0((short *)ppuVar10);
|
|
uVar20 = uVar19;
|
|
if (0 < (int)uVar3) {
|
|
uVar20 = uVar3;
|
|
}
|
|
uVar3 = uVar19;
|
|
if ((local_dc8 != (undefined **)0x0) && (local_dc8 != (undefined **)PTR_DAT_1401ac010)) {
|
|
uVar3 = *(uint *)(local_dc8 + -1);
|
|
}
|
|
if (((int)uVar20 < (int)uVar3) || (uVar20 = uVar19, local_dc8 == (undefined **)0x0)) {
|
|
LAB_1400e48aa:
|
|
if (((local_dc8 != (undefined **)PTR_DAT_1401ac010) && (local_dc8 != (undefined **)0x0)) &&
|
|
(local_dc8 + -1 != (undefined **)0x0)) {
|
|
*(uint *)(local_dc8 + -1) = uVar20;
|
|
*(undefined2 *)((longlong)local_dc8 + (longlong)(int)uVar20 * 2) = 0;
|
|
}
|
|
}
|
|
else if (local_dc8 != (undefined **)PTR_DAT_1401ac010) {
|
|
uVar20 = *(uint *)(local_dc8 + -1);
|
|
goto LAB_1400e48aa;
|
|
}
|
|
local_d08[0] = 0;
|
|
local_d08[1] = 0;
|
|
local_d08[2] = 0;
|
|
local_d08[3] = 0;
|
|
local_d08[4] = 0;
|
|
local_d08[5] = 0;
|
|
local_d08[6] = 0;
|
|
local_d08[7] = 0;
|
|
local_d08[8] = 0;
|
|
local_d08[9] = 0;
|
|
local_d08[10] = 0;
|
|
local_d08[0xb] = 0;
|
|
local_d08[0xc] = 0;
|
|
local_d08[0xd] = 0;
|
|
local_d08[0xe] = 0;
|
|
local_d08[0xf] = 0;
|
|
local_d08[0x10] = 0;
|
|
local_d08[0x11] = 0;
|
|
local_d08[0x12] = 0;
|
|
local_d08[0x13] = 0;
|
|
local_d08[0x14] = 0;
|
|
local_d08[0x15] = 0;
|
|
local_d08[0x16] = 0;
|
|
local_d08[0x17] = 0;
|
|
local_d08[0x18] = 0;
|
|
local_d08[0x19] = 0;
|
|
local_d08[0x1a] = 0;
|
|
local_d08[0x1b] = 0;
|
|
local_d08[0x1c] = 0;
|
|
local_d08[0x1d] = 0;
|
|
local_d08[0x1e] = 0;
|
|
local_d08[0x1f] = 0;
|
|
local_d10 = Proud::ByteArray::vftable;
|
|
uVar6 = uVar13;
|
|
if (local_dc0 != (ulonglong *)0x0) {
|
|
uVar6 = *local_dc0;
|
|
}
|
|
pppuVar18 = &local_dc8;
|
|
plVar8 = FUN_140078c10(local_cd8,(ulonglong)local_db8,(ulonglong)*(uint *)(uVar6 + 0x56c),
|
|
(longlong *)pppuVar18,(longlong)&local_d10);
|
|
pIVar16 = (IMAGE_DOS_HEADER *)*param_1[0x21];
|
|
(**(code **)(pIVar16 + 1))();
|
|
pppuVar9 = &local_d10;
|
|
FUN_140078360(pppuVar9);
|
|
ppuVar10 = local_dc8;
|
|
if (((local_dc8 != (undefined **)0x0) && (local_dc8 != (undefined **)PTR_DAT_1401ac010)) &&
|
|
(ppuVar1 = local_dc8 + -1, ppuVar1 != (undefined **)0x0)) {
|
|
pppuVar9 = (undefined ***)FUN_14006cb70(pppuVar9,plVar8,pIVar16,pppuVar18);
|
|
local_ce8 = pppuVar9;
|
|
FUN_14006b350((int *)pppuVar9);
|
|
local_ce0 = 1;
|
|
puVar7 = (uint *)((longlong)ppuVar10 + -4);
|
|
*puVar7 = *puVar7 - 1;
|
|
if (*puVar7 == 0) {
|
|
FUN_14006cc60(ppuVar1);
|
|
}
|
|
FUN_14006b3e0((longlong)pppuVar9);
|
|
local_ce0 = 0;
|
|
}
|
|
local_dc8 = (undefined **)PTR_DAT_1401ac010;
|
|
}
|
|
while (iVar12 = (int)uVar13, iVar12 != local_d68._24_4_) {
|
|
if ((iVar12 < 0) || ((int)local_d68._24_4_ <= iVar12)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(pppuVar9,plVar8,pIVar16,pppuVar18);
|
|
}
|
|
pIVar17 = (IMAGE_DOS_HEADER *)(local_d68._16_8_ + (longlong)iVar12 * 0x48);
|
|
pIVar17->e_program[0] = 1;
|
|
FUN_1400bc600((int *)pIVar17,0,pIVar16,pppuVar18);
|
|
plVar8 = (longlong *)0x0;
|
|
pppuVar9 = param_1;
|
|
FUN_1400e6e40((IMAGE_DOS_HEADER *)param_1,(IMAGE_DOS_HEADER *)0x0,pIVar17,pppuVar18);
|
|
if ((int)local_d68._24_4_ <= iVar12) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(pppuVar9,plVar8,pIVar17,pppuVar18);
|
|
}
|
|
pIVar16 = pIVar17;
|
|
uVar13 = (ulonglong)(iVar12 + 1);
|
|
}
|
|
FUN_1400c5af0((undefined8 *)local_d68);
|
|
if (local_d80 != (longlong *)0x0) {
|
|
plVar8 = local_d80 + 1;
|
|
*plVar8 = *plVar8 + -1;
|
|
if (*plVar8 == 0) {
|
|
FUN_140080140((longlong)&local_d80,local_d80);
|
|
}
|
|
}
|
|
local_d68._80_8_ = local_da0 + 1;
|
|
FUN_1400d1800(local_da0 + 1);
|
|
if (local_da0[2] != 0) {
|
|
if (local_da0[3] < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
local_da0[3] = local_da0[3] & 0xffffffff00000000;
|
|
}
|
|
LAB_1400e4a40:
|
|
if ((local_dc0 != (ulonglong *)0x0) && (local_dc0[1] = local_dc0[1] - 1, local_dc0[1] == 0)) {
|
|
puVar2 = (undefined8 *)*local_dc0;
|
|
if (puVar2 != (undefined8 *)0x0) {
|
|
(**(code **)*puVar2)(puVar2,1);
|
|
}
|
|
FUN_14006cc60(local_dc0);
|
|
}
|
|
local_d68._80_8_ = local_d68 + 0x30;
|
|
FUN_1400d1800((longlong *)(local_d68 + 0x30));
|
|
if ((local_d68._56_8_ != 0) && ((int)local_d68._68_4_ < 0)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
return;
|
|
}
|
|
|