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

96 lines
2.7 KiB
C

/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
* Ghidra 12.1.2 decompiler output for 0x1400e58a0 FUN_1400e58a0
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
undefined8 FUN_1400e58a0(int *param_1,int *param_2,int *param_3,int param_4)
{
int iVar1;
int iVar2;
int iVar3;
longlong lVar4;
longlong lVar5;
uint uVar6;
uint uVar7;
undefined8 uVar8;
int iVar9;
ulonglong uVar10;
longlong lVar11;
void *_Dst;
int iVar12;
uint *puVar13;
uint *puVar14;
ulonglong uVar15;
longlong lVar16;
longlong lVar17;
undefined1 auStack_888 [40];
undefined8 local_860;
undefined1 auStack_858 [2048];
ulonglong local_58;
local_58 = DAT_14016f5a0 ^ (ulonglong)auStack_888;
lVar17 = (longlong)param_4;
local_860 = param_3;
if ((*param_2 + *param_1 <= param_3[1]) ||
(uVar8 = FUN_1400ddb60((longlong)param_3,*param_2 + *param_1), (int)uVar8 == 0)) {
iVar3 = *param_1;
iVar2 = iVar3 + *param_2;
uVar15 = 0;
lVar11 = (longlong)iVar2;
if (lVar17 < lVar11) {
lVar4 = *(longlong *)(param_1 + 4);
lVar5 = *(longlong *)(param_2 + 4);
iVar1 = *param_2 + -1;
lVar16 = lVar17;
iVar12 = param_4;
do {
iVar9 = iVar12;
if (iVar1 < iVar12) {
iVar9 = iVar1;
}
puVar13 = (uint *)(lVar4 + (longlong)(iVar12 - iVar9) * 4);
puVar14 = (uint *)(lVar5 + (longlong)iVar9 * 4);
uVar6 = iVar3 - (iVar12 - iVar9);
uVar7 = iVar9 + 1U;
if ((int)uVar6 < (int)(iVar9 + 1U)) {
uVar7 = uVar6;
}
uVar10 = (ulonglong)uVar7;
if (0 < (int)uVar7) {
do {
uVar7 = *puVar14;
uVar6 = *puVar13;
puVar14 = puVar14 + -1;
puVar13 = puVar13 + 1;
uVar15 = uVar15 + (ulonglong)uVar7 * (ulonglong)uVar6;
uVar10 = uVar10 - 1;
} while (uVar10 != 0);
}
lVar16 = lVar16 + 1;
iVar12 = iVar12 + 1;
uVar7 = (uint)uVar15;
uVar15 = uVar15 >> 0x1c;
*(uint *)(auStack_858 + lVar16 * 4 + -4) = uVar7 & 0xfffffff;
param_3 = local_860;
} while (lVar16 < lVar11);
}
iVar3 = *param_3;
*param_3 = iVar2;
_Dst = (void *)(*(longlong *)(param_3 + 4) + lVar17 * 4);
if (lVar17 < lVar11) {
lVar11 = lVar11 - lVar17;
memcpy(_Dst,auStack_858 + lVar17 * 4,lVar11 * 4);
param_4 = param_4 + (int)lVar11;
_Dst = (void *)((longlong)_Dst + lVar11 * 4);
}
if (param_4 < iVar3) {
memset(_Dst,0,(ulonglong)(uint)(iVar3 - param_4) << 2);
}
FUN_1400ddc00(param_3);
uVar8 = 0;
}
return uVar8;
}