server-re/decomp/Agent_Release_x64/full/functions/0x1400d0390.c
2026-10-14 16:45:19 -04:00

230 lines
7.4 KiB
C

/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469
* Ghidra 12.1.2 decompiler output for 0x1400d0390 FUN_1400d0390
* 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_1400d0390(uint *param_1,int *param_2,uint *param_3,undefined8 *param_4,int param_5)
{
uint *puVar1;
int iVar2;
undefined8 uVar3;
ulonglong uVar4;
uint *puVar5;
uint uVar6;
int iVar7;
ulonglong unaff_RBX;
int iVar8;
int iVar9;
uint uVar10;
uint uVar11;
code *pcVar12;
undefined1 auStack_18d8 [32];
uint local_18b8;
int local_18b4;
uint *local_18b0;
int local_18a8;
uint local_18a0 [6];
int *local_1888;
uint local_1880;
uint local_1878 [6];
undefined8 *local_1860;
uint auStack_1858 [6];
uint local_1840 [1530];
ulonglong local_58;
local_58 = DAT_1401555a0 ^ (ulonglong)auStack_18d8;
local_18b0 = param_3;
local_1888 = param_2;
local_1860 = param_4;
iVar2 = FUN_1400c7020(param_2);
if (iVar2 < 8) {
iVar2 = 2;
}
else if (iVar2 < 0x25) {
iVar2 = 3;
}
else if (iVar2 < 0x8d) {
iVar2 = 4;
}
else if (iVar2 < 0x1c3) {
iVar2 = 5;
}
else if (iVar2 < 0x518) {
iVar2 = 6;
}
else {
iVar2 = (0xdc9 < iVar2) + 7;
}
uVar3 = FUN_1400c6d70(local_1840);
if ((int)uVar3 != 0) {
return unaff_RBX;
}
iVar8 = iVar2 + -1;
uVar11 = 1 << (sbyte)iVar2;
iVar7 = 1 << ((byte)iVar8 & 0x1f);
local_18b4 = iVar7;
local_18b8 = uVar11;
for (iVar9 = iVar7; iVar9 < (int)uVar11; iVar9 = iVar9 + 1) {
uVar3 = FUN_1400c6d70(auStack_1858 + (longlong)iVar9 * 6);
if ((int)uVar3 != 0) {
if (iVar7 < iVar9) {
uVar4 = (ulonglong)(uint)(iVar9 - local_18b4);
puVar5 = auStack_1858 + (longlong)iVar7 * 6;
do {
FUN_1400c6dd0((int *)puVar5);
puVar5 = puVar5 + 6;
uVar4 = uVar4 - 1;
} while (uVar4 != 0);
}
FUN_1400c6dd0((int *)local_1840);
return unaff_RBX;
}
param_3 = local_18b0;
}
uVar3 = FUN_1400c6d70(local_1878);
if ((int)uVar3 != 0) goto LAB_1400d0894;
if (param_5 == 0) {
iVar9 = FUN_1400d3450(local_1878,param_3);
if (iVar9 == 0) {
pcVar12 = FUN_1400d32d0;
LAB_1400d0542:
uVar4 = FUN_1400cf210(param_1,param_3,local_1840);
uVar11 = local_18b8;
if ((int)uVar4 == 0) {
puVar5 = auStack_1858 + (longlong)local_18b4 * 6;
uVar3 = FUN_1400c6e70(local_1840,puVar5);
puVar1 = local_18b0;
uVar11 = local_18b8;
if ((int)uVar3 == 0) {
iVar9 = 0;
if (0 < iVar8) {
do {
iVar7 = FUN_1400c79a0(puVar5,puVar5);
uVar11 = local_18b8;
if ((iVar7 != 0) ||
(iVar7 = (*pcVar12)(puVar5,puVar1,local_1878), uVar11 = local_18b8, iVar7 != 0))
goto LAB_1400d088a;
iVar9 = iVar9 + 1;
} while (iVar9 < iVar8);
}
iVar9 = local_18b4 + 1;
iVar8 = local_18b4;
if (iVar9 < (int)local_18b8) {
do {
iVar7 = FUN_1400c7830(auStack_1858 + (longlong)iVar8 * 6,local_1840,
auStack_1858 + (longlong)iVar9 * 6);
uVar11 = local_18b8;
if ((iVar7 != 0) ||
(iVar7 = (*pcVar12)(auStack_1858 + (longlong)iVar9 * 6,puVar1,local_1878),
uVar11 = local_18b8, iVar7 != 0)) goto LAB_1400d088a;
iVar9 = iVar9 + 1;
iVar8 = iVar8 + 1;
} while (iVar9 < (int)local_18b8);
}
uVar3 = FUN_1400c6d70(local_18a0);
uVar11 = local_18b8;
if ((int)uVar3 == 0) {
FUN_1400cfa90(local_18a0,1);
iVar9 = 0;
iVar8 = 0;
local_18a8 = 1;
uVar10 = 0;
local_18b0 = (uint *)(longlong)(*local_1888 + -1);
puVar5 = local_18b0;
uVar11 = 0;
do {
do {
do {
while( true ) {
local_18a8 = local_18a8 + -1;
if (local_18a8 == 0) {
if (puVar5 == (uint *)0xffffffffffffffff) {
if (((iVar9 != 2) || (iVar8 < 1)) || (iVar2 = 0, iVar8 < 1))
goto LAB_1400d086a;
goto LAB_1400d0800;
}
puVar5 = (uint *)((longlong)puVar5 + -1);
uVar11 = *(uint *)(*(longlong *)(local_1888 + 4) + 4 + (longlong)puVar5 * 4);
local_18a8 = 0x1c;
local_18b0 = puVar5;
}
local_1880 = uVar11 * 2;
uVar6 = uVar11 >> 0x1b & 1;
uVar11 = local_1880;
if (iVar9 == 0) break;
if ((iVar9 != 1) || (uVar6 != 0)) goto LAB_1400d06d2;
iVar7 = FUN_1400c79a0(local_18a0,local_18a0);
if ((iVar7 != 0) ||
(iVar7 = (*pcVar12)(local_18a0,puVar1,local_1878), puVar5 = local_18b0,
uVar11 = local_1880, iVar7 != 0)) goto LAB_1400d087b;
}
} while (uVar6 == 0);
LAB_1400d06d2:
iVar8 = iVar8 + 1;
iVar9 = 2;
uVar10 = uVar10 | uVar6 << ((sbyte)iVar2 - (char)iVar8 & 0x1fU);
puVar5 = local_18b0;
} while (iVar8 != iVar2);
iVar8 = 0;
if (iVar2 != 0) {
do {
iVar9 = FUN_1400c79a0(local_18a0,local_18a0);
if ((iVar9 != 0) || (iVar9 = (*pcVar12)(local_18a0,puVar1,local_1878), iVar9 != 0)
) goto LAB_1400d087b;
iVar8 = iVar8 + 1;
} while (iVar8 < iVar2);
}
iVar8 = FUN_1400c7830(local_18a0,auStack_1858 + (longlong)(int)uVar10 * 6,local_18a0);
if ((iVar8 != 0) || (iVar8 = (*pcVar12)(local_18a0,puVar1,local_1878), iVar8 != 0))
goto LAB_1400d087b;
iVar8 = 0;
iVar9 = 1;
uVar10 = 0;
puVar5 = local_18b0;
uVar11 = local_1880;
} while( true );
}
}
}
}
}
else {
uVar4 = FUN_1400d3260(param_3,local_1878);
if ((int)uVar4 == 0) {
pcVar12 = FUN_1400d3170;
goto LAB_1400d0542;
}
}
LAB_1400d088a:
FUN_1400c6dd0((int *)local_1878);
LAB_1400d0894:
FUN_1400c6dd0((int *)local_1840);
if (local_18b4 < (int)uVar11) {
puVar5 = auStack_1858 + (longlong)local_18b4 * 6;
uVar4 = (ulonglong)(uVar11 - local_18b4);
do {
FUN_1400c6dd0((int *)puVar5);
puVar5 = puVar5 + 6;
uVar4 = uVar4 - 1;
} while (uVar4 != 0);
}
return unaff_RBX;
while (iVar2 = iVar2 + 1, iVar2 < iVar8) {
LAB_1400d0800:
iVar9 = FUN_1400c79a0(local_18a0,local_18a0);
if (((iVar9 != 0) || (iVar9 = (*pcVar12)(local_18a0,puVar1,local_1878), iVar9 != 0)) ||
((uVar10 = uVar10 * 2, (local_18b8 & uVar10) != 0 &&
((iVar9 = FUN_1400c7830(local_18a0,local_1840,local_18a0), iVar9 != 0 ||
(iVar9 = (*pcVar12)(local_18a0,puVar1,local_1878), iVar9 != 0)))))) goto LAB_1400d087b;
}
LAB_1400d086a:
FUN_1400cef30((undefined8 *)local_18a0,local_1860);
LAB_1400d087b:
FUN_1400c6dd0((int *)local_18a0);
uVar11 = local_18b8;
goto LAB_1400d088a;
}