server-re/decomp/MessageServer_Release_x64/full/functions/0x1400e33a0.c

419 lines
14 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400e33a0 FUN_1400e33a0
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
void FUN_1400e33a0(longlong *param_1,uint *param_2,undefined8 param_3,undefined8 param_4)
{
longlong *plVar1;
uint uVar2;
longlong *plVar3;
undefined8 uVar4;
int *piVar5;
ulonglong uVar6;
int *piVar7;
longlong lVar8;
uint *puVar9;
longlong *plVar10;
uint uVar11;
undefined8 *puVar12;
longlong **pplVar13;
undefined ***pppuVar14;
undefined8 uVar15;
int iVar16;
longlong **pplVar17;
SIZE_T SVar18;
uint *puVar19;
SIZE_T *pSVar20;
longlong lVar21;
undefined1 auStack_ec8 [32];
undefined1 local_ea8 [8];
longlong *local_ea0;
int local_e98 [2];
longlong local_e90;
longlong local_e88;
undefined4 local_e80;
int local_e7c;
longlong *local_e70;
longlong *local_e68;
longlong *local_e60;
undefined **local_e58;
undefined8 local_e50;
longlong **local_e48;
undefined8 local_e40;
undefined8 local_e38;
undefined **local_e30;
undefined8 local_e28;
longlong **local_e20;
undefined8 local_e18;
undefined8 local_e10;
undefined **local_e08;
undefined8 local_e00;
longlong **local_df8;
undefined8 local_df0;
undefined8 local_de8;
longlong *local_dd0;
undefined **local_dc8;
undefined8 local_dc0;
longlong **local_db8;
ulonglong local_db0;
undefined8 local_da8;
undefined **local_da0;
undefined8 local_d98;
longlong **local_d90;
ulonglong local_d88;
undefined8 local_d80;
int *local_d78;
undefined1 local_d70;
int *local_d68;
undefined1 local_d60;
SIZE_T local_d58;
undefined1 local_d50;
uint local_d48;
int iStack_d44;
undefined8 local_d40;
undefined8 local_d38;
undefined8 local_d30;
undefined8 local_d28;
undefined8 local_d20;
int *local_d18;
undefined1 local_d10;
int *local_d08;
undefined1 local_d00;
undefined8 local_ce0;
undefined1 local_cb8 [3216];
ulonglong local_28;
local_ce0 = 0xfffffffffffffffe;
local_28 = DAT_1401ac5a0 ^ (ulonglong)auStack_ec8;
local_ea0 = param_1;
(**(code **)(*(longlong *)(param_1[0x21] + 0x78) + 0x10))();
SVar18 = 1;
puVar12 = (undefined8 *)local_ea8;
puVar19 = param_2;
uVar4 = FUN_1400bc930(param_2,puVar12,1);
if ((char)uVar4 == '\0') {
FUN_14006cb70(puVar19,puVar12,SVar18,param_4);
local_e70 = (longlong *)PTR_DAT_1401ac010;
pplVar13 = &local_e70;
uVar4 = 8;
uVar15 = 3;
plVar10 = (longlong *)param_1[0x21];
FUN_1400b9fd0(plVar10,8,(undefined *)0x3,pplVar13);
plVar3 = local_e70;
if (((local_e70 != (longlong *)0x0) && (local_e70 != (longlong *)PTR_DAT_1401ac010)) &&
(plVar1 = local_e70 + -1, plVar1 != (longlong *)0x0)) {
piVar5 = (int *)FUN_14006cb70(plVar10,uVar4,uVar15,pplVar13);
local_d68 = piVar5;
FUN_14006b350(piVar5);
local_d60 = 1;
piVar7 = (int *)((longlong)plVar3 + -4);
*piVar7 = *piVar7 + -1;
if (*piVar7 == 0) {
FUN_14006cc60(plVar1);
}
FUN_14006b3e0((longlong)piVar5);
local_d60 = 0;
}
local_e70 = (longlong *)PTR_DAT_1401ac010;
LAB_1400e349e:
if ((int)param_1[0x20] < 4) {
*(undefined4 *)(param_1 + 8) = 0;
*(undefined4 *)(param_1 + 0x20) = 4;
lVar21 = (**(code **)(*(longlong *)(param_1[0x21] + 0x70) + 0x1c0))();
param_1[0x10] = lVar21;
*(undefined1 *)(param_1 + 0x18) = 0;
}
return;
}
FUN_1400defb0(&local_d48);
puVar19 = &local_d48;
puVar9 = param_2;
uVar4 = FUN_1400bd440(param_2,puVar19,SVar18,param_4);
if ((char)uVar4 == '\0') {
FUN_14006cb70(puVar9,puVar19,SVar18,param_4);
local_e60 = (longlong *)PTR_DAT_1401ac010;
pplVar13 = &local_e60;
uVar4 = 8;
uVar15 = 3;
plVar10 = (longlong *)param_1[0x21];
FUN_1400b9fd0(plVar10,8,(undefined *)0x3,pplVar13);
plVar3 = local_e60;
if (((local_e60 != (longlong *)0x0) && (local_e60 != (longlong *)PTR_DAT_1401ac010)) &&
(plVar1 = local_e60 + -1, plVar1 != (longlong *)0x0)) {
piVar5 = (int *)FUN_14006cb70(plVar10,uVar4,uVar15,pplVar13);
local_d78 = piVar5;
FUN_14006b350(piVar5);
local_d70 = 1;
piVar7 = (int *)((longlong)plVar3 + -4);
*piVar7 = *piVar7 + -1;
if (*piVar7 == 0) {
FUN_14006cc60(plVar1);
}
FUN_14006b3e0((longlong)piVar5);
local_d70 = 0;
}
local_e60 = (longlong *)PTR_DAT_1401ac010;
goto LAB_1400e349e;
}
lVar21 = param_1[0x21];
*(ulonglong *)(lVar21 + 0x6a0) = CONCAT44(iStack_d44,local_d48);
*(undefined8 *)(lVar21 + 0x6a8) = local_d40;
*(undefined8 *)(lVar21 + 0x6b0) = local_d38;
*(undefined8 *)(lVar21 + 0x6b8) = local_d30;
*(undefined8 *)(lVar21 + 0x6c0) = local_d28;
*(undefined8 *)(lVar21 + 0x6c8) = local_d20;
if (*(char *)(param_1[0x21] + 0x6cc) != '\0') {
uVar4 = (**(code **)(*(longlong *)(param_1[0x21] + 0x70) + 0x1c0))();
*(undefined8 *)(param_1[0x21] + 0x638) = uVar4;
}
pplVar17 = (longlong **)0x0;
local_e00 = 0;
local_df8 = (longlong **)0x0;
local_df0 = 0;
local_de8 = 0;
local_e08 = Proud::ByteArray::vftable;
pplVar13 = &local_dd0;
puVar19 = param_2;
uVar6 = FUN_1400bcfd0(param_2,pplVar13,SVar18,param_4);
plVar10 = local_dd0;
if ((((char)uVar6 != '\0') && (iVar16 = (int)local_dd0, -1 < iVar16)) && (iVar16 <= DAT_1401ac140)
) {
FUN_1400146f0((longlong)&local_e08,iVar16,SVar18);
pplVar13 = local_df8;
if ((int)local_df0 == 0) {
pplVar13 = pplVar17;
}
SVar18 = (ulonglong)plVar10 & 0xffffffff;
puVar19 = param_2;
uVar4 = FUN_1400bc930(param_2,pplVar13,SVar18);
if ((char)uVar4 != '\0') {
local_e50 = 0;
local_e48 = (longlong **)0x0;
local_e40 = 0;
local_e38 = 0;
local_e58 = Proud::ByteArray::vftable;
local_e28 = 0;
local_e20 = (longlong **)0x0;
local_e18 = 0;
local_e10 = 0;
local_e30 = Proud::ByteArray::vftable;
FUN_1400dd5d0((longlong)&local_e58,*(int *)(param_1[0x21] + 0x6bc),SVar18,param_4);
pplVar13 = local_e48;
if ((int)local_e40 == 0) {
pplVar13 = pplVar17;
}
SVar18 = (SIZE_T)(*(uint *)(param_1[0x21] + 0x6bc) >> 3);
uVar4 = 0x10;
FUN_1400cd030((void *)(param_1[0x21] + 0xd8),(byte *)pplVar13,SVar18,0x10);
FUN_1400dd5d0((longlong)&local_e30,*(int *)(param_1[0x21] + 0x6c0),SVar18,uVar4);
pplVar13 = local_e20;
if ((int)local_e18 == 0) {
pplVar13 = pplVar17;
}
SVar18 = (SIZE_T)(*(uint *)(param_1[0x21] + 0x6c0) >> 3);
FUN_1400dccc0(param_1[0x21] + 0x4a8,(longlong)pplVar13,SVar18,uVar4);
piVar7 = (int *)FUN_14006cd40();
FUN_14006b350(piVar7);
if (iStack_d44 < DAT_1401ac140) {
iStack_d44 = DAT_1401ac140;
}
DAT_1401ac140 = iStack_d44;
FUN_14006b3e0((longlong)piVar7);
uVar11 = (int)*param_2 >> 0x1f & 7;
if (*(longlong *)(param_2 + 2) == 0) {
if (*(longlong *)(param_2 + 4) == 0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(0,(ulonglong)uVar11,SVar18,uVar4);
}
uVar2 = param_2[6];
}
else {
uVar2 = *(uint *)(*(longlong *)(param_2 + 2) + 0x18);
}
if ((int)(*param_2 + uVar11) >> 3 != uVar2) {
FUN_14006cb70((ulonglong)uVar2,(ulonglong)uVar11,SVar18,uVar4);
local_ea0 = (longlong *)PTR_DAT_1401ac010;
pplVar13 = &local_ea0;
uVar4 = 8;
uVar15 = 3;
plVar10 = (longlong *)param_1[0x21];
FUN_1400b9fd0(plVar10,8,(undefined *)0x3,pplVar13);
plVar3 = local_ea0;
if (((local_ea0 != (longlong *)0x0) && (local_ea0 != (longlong *)PTR_DAT_1401ac010)) &&
(plVar1 = local_ea0 + -1, plVar1 != (longlong *)0x0)) {
piVar5 = (int *)FUN_14006cb70(plVar10,uVar4,uVar15,pplVar13);
local_d08 = piVar5;
FUN_14006b350(piVar5);
local_d00 = 1;
piVar7 = (int *)((longlong)plVar3 + -4);
*piVar7 = *piVar7 + -1;
if (*piVar7 == 0) {
FUN_14006cc60(plVar1);
}
FUN_14006b3e0((longlong)piVar5);
}
FUN_1400dfd60((longlong)param_1,4);
FUN_140078360(&local_e30);
FUN_140078360(&local_e58);
goto LAB_1400e3d37;
}
*(undefined1 *)(param_1[0x21] + 0x1790) = local_ea8[0];
lVar21 = param_1[0x21];
lVar8 = FUN_1400a0f10(lVar21);
FUN_1400ef560(lVar8,*(char *)(lVar21 + 0x6b8));
local_dc0 = 0;
local_db8 = (longlong **)0x0;
local_db0 = 0;
local_da8 = 0;
local_dc8 = Proud::ByteArray::vftable;
local_d98 = 0;
local_d90 = (longlong **)0x0;
local_d88 = 0;
local_d80 = 0;
local_da0 = Proud::ByteArray::vftable;
FUN_1400dd5d0((longlong)&local_e58,*(int *)(param_1[0x21] + 0x6bc),SVar18,uVar4);
pplVar13 = local_e48;
if ((int)local_e40 == 0) {
pplVar13 = pplVar17;
}
uVar4 = 0x10;
FUN_1400cd030((void *)(param_1[0x21] + 0x708),(byte *)pplVar13,
(ulonglong)(*(uint *)(param_1[0x21] + 0x6bc) >> 3),0x10);
pppuVar14 = &local_e08;
FUN_1400dd790((longlong)&local_dc8,(longlong)&local_e58,(longlong)pppuVar14);
FUN_1400dd5d0((longlong)&local_e30,*(int *)(param_1[0x21] + 0x6c0),(SIZE_T)pppuVar14,uVar4);
pplVar13 = local_e20;
if ((int)local_e18 == 0) {
pplVar13 = pplVar17;
}
FUN_1400dccc0(param_1[0x21] + 0xad8,(longlong)pplVar13,
(ulonglong)(*(uint *)(param_1[0x21] + 0x6c0) >> 3),uVar4);
puVar19 = (uint *)(param_1[0x21] + 0x708);
pppuVar14 = &local_da0;
FUN_1400cf0f0((longlong)&local_e30,(longlong)pppuVar14,puVar19,uVar4);
FUN_1400bca00(local_e98);
FUN_1400bc4d0((longlong)local_e98,pppuVar14,(SIZE_T)puVar19,uVar4);
FUN_1400bcb60(local_e98,0x800,(SIZE_T)puVar19,uVar4);
uVar15 = 0;
FUN_1400bcb60(local_e98,0,(SIZE_T)puVar19,uVar4);
FUN_140054a10((longlong)local_e98,CONCAT71((int7)((ulonglong)uVar15 >> 8),5),(SIZE_T)puVar19,
uVar4);
uVar6 = local_db0;
iVar16 = (int)local_db0;
FUN_1400bddd0((longlong)local_e98,(longlong)(int)local_db0,(SIZE_T)puVar19,uVar4);
pplVar13 = local_db8;
if ((int)local_db0 == 0) {
pplVar13 = pplVar17;
}
if (iVar16 != 0) {
local_e98[1] = 0;
if (local_e90 == 0) {
if (local_e88 == 0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(0,pplVar13,puVar19,uVar4);
}
LAB_1400e3aa2:
puVar19 = (uint *)(uVar6 & 0xffffffff);
FUN_1400145e0(&local_e88,pplVar13,puVar19,uVar4);
}
else {
if (local_e88 != 0) goto LAB_1400e3aa2;
if (local_e90 == 0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(0,pplVar13,puVar19,uVar4);
}
puVar19 = (uint *)(uVar6 & 0xffffffff);
FUN_1400147b0(local_e90,pplVar13,(SIZE_T)puVar19);
}
FUN_140014820((longlong)local_e98,pplVar13,(SIZE_T)puVar19,uVar4);
}
uVar6 = local_d88;
iVar16 = (int)local_d88;
FUN_1400bddd0((longlong)local_e98,(longlong)(int)local_d88,(SIZE_T)puVar19,uVar4);
pplVar13 = local_d90;
if ((int)local_d88 == 0) {
pplVar13 = pplVar17;
}
if (iVar16 != 0) {
local_e98[1] = 0;
if (local_e90 == 0) {
if (local_e88 == 0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(0,pplVar13,puVar19,uVar4);
}
LAB_1400e3b20:
puVar19 = (uint *)(uVar6 & 0xffffffff);
FUN_1400145e0(&local_e88,pplVar13,puVar19,uVar4);
}
else {
if (local_e88 != 0) goto LAB_1400e3b20;
if (local_e90 == 0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(0,pplVar13,puVar19,uVar4);
}
puVar19 = (uint *)(uVar6 & 0xffffffff);
FUN_1400147b0(local_e90,pplVar13,(SIZE_T)puVar19);
}
FUN_140014820((longlong)local_e98,pplVar13,(SIZE_T)puVar19,uVar4);
}
lVar21 = FUN_14007db50((longlong)local_cb8,(longlong)local_e98,puVar19);
local_d58 = 0;
local_d50 = 1;
lVar8 = FUN_1400a0f10(param_1[0x21]);
pSVar20 = &local_d58;
FUN_1400ef790(lVar8,lVar21,pSVar20,uVar4);
FUN_14007ca50((longlong)local_cb8,lVar21,pSVar20,uVar4);
local_dd0 = &local_e90;
FUN_1400d1800(&local_e90);
if (local_e88 != 0) {
if (local_e7c < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
local_e80 = 0;
}
FUN_140078360(&local_da0);
FUN_140078360(&local_dc8);
FUN_140078360(&local_e30);
FUN_140078360(&local_e58);
goto LAB_1400e3d37;
}
}
FUN_14006cb70(puVar19,pplVar13,SVar18,param_4);
local_e68 = (longlong *)PTR_DAT_1401ac010;
pplVar13 = &local_e68;
uVar4 = 8;
uVar15 = 3;
plVar10 = (longlong *)param_1[0x21];
FUN_1400b9fd0(plVar10,8,(undefined *)0x3,pplVar13);
plVar3 = local_e68;
if (((local_e68 != (longlong *)0x0) && (local_e68 != (longlong *)PTR_DAT_1401ac010)) &&
(plVar1 = local_e68 + -1, plVar1 != (longlong *)0x0)) {
piVar5 = (int *)FUN_14006cb70(plVar10,uVar4,uVar15,pplVar13);
local_d18 = piVar5;
FUN_14006b350(piVar5);
local_d10 = 1;
piVar7 = (int *)((longlong)plVar3 + -4);
*piVar7 = *piVar7 + -1;
if (*piVar7 == 0) {
FUN_14006cc60(plVar1);
}
FUN_14006b3e0((longlong)piVar5);
local_d10 = 0;
}
local_e68 = (longlong *)PTR_DAT_1401ac010;
if ((int)param_1[0x20] < 4) {
*(undefined4 *)(param_1 + 8) = 0;
*(undefined4 *)(param_1 + 0x20) = 4;
lVar21 = (**(code **)(*(longlong *)(param_1[0x21] + 0x70) + 0x1c0))();
param_1[0x10] = lVar21;
*(undefined1 *)(param_1 + 0x18) = 0;
}
LAB_1400e3d37:
FUN_140078360(&local_e08);
return;
}