server-re/decomp/AgentManager_Release_x64/full/functions/0x1400e07e0.c
2026-10-15 09:58:24 -04:00

132 lines
3.6 KiB
C

/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
* Ghidra 12.1.2 decompiler output for 0x1400e07e0 FUN_1400e07e0
* Pseudocode, not original source. */
/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
undefined8 FUN_1400e07e0(uint *param_1,uint *param_2,int param_3)
{
uint uVar1;
int iVar2;
ulonglong uVar3;
undefined8 uVar4;
ulonglong *puVar5;
ulonglong *puVar6;
ulonglong *puVar7;
uint *puVar8;
int iVar9;
uint *_Dst;
ulonglong uVar10;
uint uVar11;
ulonglong uVar12;
int iVar13;
uint uVar14;
undefined1 auStack_1078 [32];
uint local_1058;
int local_1054;
uint *local_1050;
ulonglong local_1048 [512];
ulonglong local_48;
local_48 = DAT_14016f5a0 ^ (ulonglong)auStack_1078;
uVar14 = *param_1;
local_1058 = uVar14;
local_1054 = param_3;
local_1050 = param_1;
if (((int)(*param_2 + 1) <= (int)param_1[1]) ||
(uVar4 = FUN_1400ddb60((longlong)param_1,*param_2 + 1), (int)uVar4 == 0)) {
_Dst = *(uint **)(param_1 + 4);
iVar9 = 0;
puVar7 = local_1048;
uVar11 = 0;
if (0 < (int)*param_1) {
uVar11 = *param_1;
uVar10 = (ulonglong)uVar11;
puVar6 = puVar7;
puVar8 = _Dst;
do {
uVar1 = *puVar8;
puVar7 = puVar6 + 1;
puVar8 = puVar8 + 1;
uVar10 = uVar10 - 1;
*puVar6 = (ulonglong)uVar1;
puVar6 = puVar7;
} while (uVar10 != 0);
}
uVar1 = *param_2;
iVar2 = uVar1 * 2 + 1;
if ((int)uVar11 < iVar2) {
memset(puVar7,0,(ulonglong)(iVar2 - uVar11) << 3);
}
uVar11 = 0;
if (0 < (int)uVar1) {
puVar6 = local_1048;
puVar7 = local_1048;
uVar10 = (ulonglong)uVar1;
do {
puVar6 = puVar6 + 1;
uVar3 = puVar6[-1];
puVar8 = *(uint **)(param_2 + 4);
if (0 < (int)uVar1) {
uVar12 = (ulonglong)uVar1;
puVar5 = puVar7;
do {
uVar14 = *puVar8;
puVar8 = puVar8 + 1;
*puVar5 = *puVar5 + (ulonglong)uVar14 * (ulonglong)((int)uVar3 * local_1054 & 0xfffffff)
;
uVar12 = uVar12 - 1;
puVar5 = puVar5 + 1;
} while (uVar12 != 0);
}
puVar7 = puVar7 + 1;
*puVar6 = *puVar6 + (puVar6[-1] >> 0x1c);
uVar10 = uVar10 - 1;
param_1 = local_1050;
uVar14 = local_1058;
uVar11 = uVar1;
} while (uVar10 != 0);
}
iVar13 = uVar11 + 1;
puVar7 = local_1048 + (int)uVar11;
if (iVar13 <= iVar2) {
uVar10 = (ulonglong)((iVar2 - iVar13) + 1);
puVar6 = local_1048 + iVar13;
do {
uVar3 = *puVar7;
puVar7 = puVar7 + 1;
*puVar6 = *puVar6 + (uVar3 >> 0x1c);
uVar10 = uVar10 - 1;
puVar6 = puVar6 + 1;
} while (uVar10 != 0);
}
puVar7 = local_1048 + (int)uVar1;
puVar8 = _Dst;
if (0 < (int)(uVar1 + 1)) {
do {
uVar10 = *puVar7;
iVar9 = iVar9 + 1;
_Dst = puVar8 + 1;
puVar7 = puVar7 + 1;
*puVar8 = (uint)uVar10 & 0xfffffff;
puVar8 = _Dst;
} while (iVar9 < (int)(*param_2 + 1));
}
if (iVar9 < (int)uVar14) {
memset(_Dst,0,(ulonglong)(uVar14 - iVar9) << 2);
}
*param_1 = *param_2 + 1;
FUN_1400ddc00((int *)param_1);
uVar4 = FUN_1400ddd70((int *)param_1,(int *)param_2);
if ((int)uVar4 == -1) {
uVar4 = 0;
}
else {
uVar4 = FUN_1400de150(param_1,param_2,param_1);
}
}
return uVar4;
}