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

407 lines
14 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x14009d490 FUN_14009d490
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
uint FUN_14009d490(longlong param_1,undefined4 *param_2,int param_3,uint **param_4,
undefined1 *param_5)
{
longlong *plVar1;
LPVOID pvVar2;
undefined8 *puVar3;
bool bVar4;
uint uVar5;
uint uVar6;
uint uVar7;
undefined ***pppuVar8;
longlong lVar9;
longlong *plVar10;
int *piVar11;
uint *puVar12;
uint *puVar13;
longlong lVar14;
ulonglong uVar15;
uint *puVar16;
void *pvVar17;
undefined8 *puVar18;
uint uVar19;
uint *puVar20;
uint uVar21;
int iVar22;
uint *puVar23;
ulonglong uVar24;
uint **ppuVar25;
undefined ***pppuVar26;
longlong lVar27;
undefined8 uVar28;
undefined1 auStackY_2e8 [32];
uint *local_2b8;
undefined8 *local_2b0;
undefined ***local_2a8;
longlong local_2a0;
uint **local_298;
undefined ***local_290;
undefined1 local_288;
undefined **local_280;
undefined8 local_278;
undefined8 local_270;
undefined8 local_268;
undefined8 local_260;
int *local_258;
undefined1 local_250;
uint **local_248;
undefined8 local_240;
longlong local_238;
undefined **local_230 [5];
void *local_208;
longlong local_200;
ulonglong local_1f8;
undefined8 local_1f0;
uint local_1e8 [100];
ulonglong local_58;
local_240 = 0xfffffffffffffffe;
local_58 = DAT_1401ac5a0 ^ (ulonglong)auStackY_2e8;
lVar27 = (longlong)param_3;
plVar1 = (longlong *)(param_1 + -0xa8);
ppuVar25 = param_4;
local_2a0 = param_1;
local_298 = param_4;
local_248 = param_4;
pppuVar8 = (undefined ***)(**(code **)(*plVar1 + 0x58))(plVar1);
local_2a8 = pppuVar8;
local_290 = pppuVar8;
FUN_14006b350((int *)pppuVar8);
local_288 = 1;
if (DAT_1401b42cf != '\0') {
(**(code **)(*plVar1 + 200))(plVar1);
}
if ((param_3 < 0) || (*(longlong *)(param_1 + 0x3d0) == 0)) {
FUN_14006b3e0((longlong)pppuVar8);
}
else {
if ((*(char *)(param_1 + 0x1758) != '\0') || (param_3 != 0)) {
puVar20 = (uint *)0x0;
uVar7 = 0;
local_208 = (void *)0x0;
local_1f0 = 0;
local_200 = 0;
local_1f8 = 100;
uVar19 = 0;
if (0 < param_3) {
FUN_14007d190((longlong *)&local_208,param_2,lVar27);
FUN_14007c6c0((longlong *)&local_208);
local_2b0 = (undefined8 *)local_200;
pvVar17 = local_208;
uVar24 = local_1f8;
puVar12 = puVar20;
if (0 < (int)local_200) {
do {
iVar22 = (int)puVar12;
lVar9 = (longlong)iVar22;
if ((iVar22 < 0) || (local_200 <= lVar9)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
puVar12 = local_1e8 + lVar9;
if (100 < uVar24) {
puVar12 = (uint *)((longlong)pvVar17 + lVar9 * 4);
}
if (*puVar12 != 1) {
puVar12 = local_1e8 + lVar9;
if (100 < uVar24) {
puVar12 = (uint *)((longlong)pvVar17 + lVar9 * 4);
}
uVar15 = (ulonglong)*puVar12;
lVar9 = FUN_14007dea0((longlong)plVar1,*puVar12);
if (lVar9 == 0) {
if (100 < uVar24) {
operator_delete__(pvVar17);
}
FUN_14006b3e0((longlong)local_2a8);
param_4 = local_298;
goto LAB_14009db8d;
}
lVar14 = lVar9 + 0x288;
bVar4 = FUN_1400cd500(lVar14);
if ((bVar4) &&
((pvVar17 = local_208, uVar24 = local_1f8, *(char *)(lVar9 + 0x680) != '\0' ||
(*(int *)(lVar9 + 0x670) != 0)))) goto LAB_14009d89d;
FUN_14006cb70(lVar14,uVar15,lVar27,ppuVar25);
local_2b8 = (uint *)PTR_DAT_1401ac010;
uVar5 = FUN_14006c9f0((short *)&DAT_14013b290);
puVar12 = puVar20;
if ((local_2b8 != (uint *)0x0) &&
(puVar12 = (uint *)0x0, local_2b8 != (uint *)PTR_DAT_1401ac010)) {
puVar12 = (uint *)(ulonglong)local_2b8[-2];
}
uVar6 = uVar5;
if ((((int)uVar5 <= (int)puVar12) && (uVar6 = uVar19, local_2b8 != (uint *)0x0)) &&
(local_2b8 != (uint *)PTR_DAT_1401ac010)) {
uVar6 = local_2b8[-2];
}
uVar21 = 1;
if (1 < (int)uVar6) {
uVar21 = uVar6;
}
uVar6 = uVar19;
if ((local_2b8 != (uint *)0x0) && (local_2b8 != (uint *)PTR_DAT_1401ac010)) {
uVar6 = local_2b8[-2];
}
if ((int)uVar6 < (int)uVar21) {
if (local_2b8 == (uint *)0x0) {
local_2b8 = (uint *)PTR_DAT_1401ac010;
}
if ((int)uVar21 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
if (uVar21 == 0) {
FUN_1400031e0((longlong *)&local_2b8,PTR_DAT_1401ac010,puVar12,ppuVar25);
}
else {
uVar6 = uVar19;
if ((local_2b8 != (uint *)0x0) && (local_2b8 != (uint *)PTR_DAT_1401ac010)) {
uVar6 = local_2b8[-2];
}
if (uVar21 != uVar6) {
puVar12 = (uint *)FUN_14006cbf0((longlong)(int)uVar21 * 2 + 10);
if (puVar12 != (uint *)0x0) {
*puVar12 = 0;
puVar12[1] = 1;
}
*puVar12 = uVar21;
uVar6 = uVar19;
if ((local_2b8 != (uint *)0x0) && (local_2b8 != (uint *)PTR_DAT_1401ac010)) {
uVar6 = local_2b8[-2];
}
puVar16 = (uint *)PTR_DAT_1401ac010;
if ((int)uVar21 < (int)uVar6) {
LAB_14009d724:
if (local_2b8 != (uint *)0x0) {
puVar16 = local_2b8;
}
}
else {
uVar21 = uVar19;
if (local_2b8 != (uint *)0x0) {
if (local_2b8 != (uint *)PTR_DAT_1401ac010) {
uVar21 = local_2b8[-2];
}
goto LAB_14009d724;
}
}
uVar24 = (ulonglong)uVar21;
puVar13 = puVar16;
FUN_14006ca20(puVar12 + 2,puVar16,uVar21);
FUN_1400031e0((longlong *)&local_2b8,puVar16,uVar24,puVar13);
local_2b8 = puVar12 + 2;
}
}
}
FUN_140002e40((longlong *)&local_2b8);
puVar12 = local_2b8;
if (local_2b8 == (uint *)0x0) {
puVar12 = (uint *)PTR_DAT_1401ac010;
}
FUN_14006ca20(puVar12,&DAT_14013b290,uVar5);
puVar12 = local_2b8;
if (local_2b8 == (uint *)0x0) {
puVar12 = (uint *)PTR_DAT_1401ac010;
}
uVar6 = FUN_14006c9f0((short *)puVar12);
uVar5 = uVar7;
if (0 < (int)uVar6) {
uVar5 = uVar6;
}
uVar6 = uVar7;
if ((local_2b8 != (uint *)0x0) && (local_2b8 != (uint *)PTR_DAT_1401ac010)) {
uVar6 = local_2b8[-2];
}
if (((int)uVar5 < (int)uVar6) || (uVar5 = uVar7, local_2b8 == (uint *)0x0)) {
LAB_14009d7c0:
if (((local_2b8 != (uint *)PTR_DAT_1401ac010) && (local_2b8 != (uint *)0x0)) &&
(local_2b8 + -2 != (uint *)0x0)) {
local_2b8[-2] = uVar5;
*(undefined2 *)((longlong)local_2b8 + (longlong)(int)uVar5 * 2) = 0;
}
}
else if (local_2b8 != (uint *)PTR_DAT_1401ac010) {
uVar5 = local_2b8[-2];
goto LAB_14009d7c0;
}
local_278 = 0;
local_270 = 0;
local_268 = 0;
local_260 = 0;
local_280 = Proud::ByteArray::vftable;
ppuVar25 = &local_2b8;
plVar10 = FUN_140078c10(&local_238,1,(ulonglong)*(uint *)(lVar9 + 0x6f8),
(longlong *)ppuVar25,(longlong)&local_280);
lVar27 = *plVar1;
(**(code **)(lVar27 + 0x80))(plVar1);
pppuVar8 = &local_280;
FUN_140078360(pppuVar8);
puVar12 = local_2b8;
if (((local_2b8 != (uint *)0x0) && (local_2b8 != (uint *)PTR_DAT_1401ac010)) &&
(puVar16 = local_2b8 + -2, puVar16 != (uint *)0x0)) {
piVar11 = (int *)FUN_14006cb70(pppuVar8,plVar10,lVar27,ppuVar25);
local_258 = piVar11;
FUN_14006b350(piVar11);
local_250 = 1;
puVar12 = puVar12 + -1;
*puVar12 = *puVar12 - 1;
if (*puVar12 == 0) {
FUN_14006cc60(puVar16);
}
FUN_14006b3e0((longlong)piVar11);
local_250 = 0;
}
local_2b8 = (uint *)PTR_DAT_1401ac010;
pvVar17 = local_208;
uVar24 = local_1f8;
}
LAB_14009d89d:
puVar12 = (uint *)(ulonglong)(iVar22 + 1U);
param_1 = local_2a0;
} while ((int)(iVar22 + 1U) < (int)local_2b0);
}
param_3 = (int)local_2b0;
}
local_2b0 = (undefined8 *)FUN_14006cbf0(0xf8);
puVar12 = puVar20;
if (local_2b0 != (undefined8 *)0x0) {
puVar12 = FUN_1400ddf60((undefined4 *)local_2b0);
}
if (puVar12 == (uint *)0x0) {
local_2b0 = (undefined8 *)0x0;
}
else {
local_2b0 = (undefined8 *)FUN_14006cbf0(0x10);
local_2b0[1] = 1;
*local_2b0 = puVar12;
}
puVar18 = local_2b0;
plVar10 = *(longlong **)(param_1 + 0x3d0);
puVar12 = puVar20;
if (local_2b0 != (undefined8 *)0x0) {
puVar12 = (uint *)*local_2b0;
}
lVar27 = *plVar10;
uVar28 = (**(code **)(*(longlong *)(local_2a0 + 0x70) + 8))();
uVar7 = (**(code **)(lVar27 + 8))(plVar10,uVar28);
lVar27 = local_2a0;
*puVar12 = uVar7;
puVar12 = puVar20;
if (puVar18 != (undefined8 *)0x0) {
puVar12 = (uint *)*puVar18;
}
pppuVar8 = (undefined ***)(ulonglong)*puVar12;
uVar24 = (ulonglong)pppuVar8 % (ulonglong)*(uint *)(local_2a0 + 0x380);
puVar16 = (uint *)0x0;
if (*(longlong *)(local_2a0 + 0x360) != 0) {
for (puVar16 = *(uint **)(*(longlong *)(local_2a0 + 0x360) + uVar24 * 8);
(puVar16 != (uint *)0x0 && ((uint)uVar24 == puVar16[8] % *(uint *)(local_2a0 + 0x380)));
puVar16 = *(uint **)(puVar16 + 4)) {
pppuVar26 = local_2a8;
if (*puVar16 == *puVar12) goto LAB_14009da68;
}
}
puVar13 = FUN_1400b1ac0((char *)(local_2a0 + 0x358),puVar12);
pppuVar26 = local_2a8;
if (puVar18 != *(undefined8 **)puVar13) {
if (puVar18 != (undefined8 *)0x0) {
puVar18[1] = puVar18[1] + 1;
puVar18 = local_2b0;
pppuVar26 = local_290;
}
puVar23 = puVar20;
if ((*(longlong *)puVar13 != 0) &&
(*(longlong *)(*(longlong *)puVar13 + 8) = *(longlong *)(*(longlong *)puVar13 + 8) + -1,
puVar18 = local_2b0, pppuVar26 = local_290, *(longlong *)(*(longlong *)puVar13 + 8) == 0)
) {
puVar23 = *(uint **)puVar13;
}
*(undefined8 **)puVar13 = puVar18;
if (puVar23 != (uint *)0x0) {
pvVar2 = *(LPVOID *)puVar23;
if (pvVar2 != (LPVOID)0x0) {
FUN_1400807c0((longlong)pvVar2,puVar12,puVar16,pppuVar8);
FUN_14006cc60(pvVar2);
}
FUN_14006cc60(puVar23);
lVar27 = local_2a0;
}
}
LAB_14009da68:
puVar12 = puVar20;
if (puVar18 != (undefined8 *)0x0) {
puVar12 = (uint *)*puVar18;
}
*(undefined1 *)(puVar12 + 0x3c) = *param_5;
*(int *)(lVar27 + 0x16f0) = *(int *)(lVar27 + 0x16f0) + 1;
if (0 < param_3) {
local_2a8 = local_230;
puVar13 = puVar20;
do {
FUN_14007cf00(local_230,(longlong)local_298,(SIZE_T)puVar16);
local_230[0] = Proud::ByteArray::vftable;
puVar12 = puVar20;
if (puVar18 != (undefined8 *)0x0) {
puVar12 = (uint *)*puVar18;
}
iVar22 = (int)puVar13;
lVar9 = (longlong)iVar22;
if ((iVar22 < 0) || (local_200 <= lVar9)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
if (local_1f8 < 0x65) {
puVar13 = local_1e8 + lVar9;
}
else {
puVar13 = (uint *)((longlong)local_208 + lVar9 * 4);
}
pppuVar8 = local_230;
puVar16 = (uint *)(ulonglong)*puVar12;
puVar12 = (uint *)(ulonglong)*puVar13;
FUN_1400992f0((longlong)plVar1,*puVar13,puVar16,pppuVar8,*(undefined4 *)(lVar27 + 0x16f0))
;
puVar13 = (uint *)(ulonglong)(iVar22 + 1U);
} while ((int)(iVar22 + 1U) < param_3);
}
puVar3 = local_2b0;
if (puVar18 != (undefined8 *)0x0) {
puVar20 = (uint *)*puVar18;
}
uVar7 = *puVar20;
if (puVar18 != (undefined8 *)0x0) {
plVar1 = puVar18 + 1;
*plVar1 = *plVar1 + -1;
pppuVar26 = local_290;
if (*plVar1 == 0) {
pvVar2 = (LPVOID)*local_2b0;
if (pvVar2 != (LPVOID)0x0) {
FUN_1400807c0((longlong)pvVar2,puVar12,puVar16,pppuVar8);
FUN_14006cc60(pvVar2);
}
FUN_14006cc60(puVar3);
pppuVar26 = local_290;
}
}
if (100 < local_1f8) {
operator_delete__(local_208);
}
FUN_14006b3e0((longlong)pppuVar26);
FUN_140078360(local_298);
return uVar7;
}
FUN_14006b3e0((longlong)pppuVar8);
}
LAB_14009db8d:
FUN_140078360(param_4);
return 0;
}