/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186 * Ghidra 12.1.2 decompiler output for 0x1400de4e0 FUN_1400de4e0 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ /* WARNING: Type propagation algorithm not settling */ undefined8 FUN_1400de4e0(int *param_1,int *param_2,uint *param_3,uint param_4) { int iVar1; int iVar2; longlong lVar3; longlong lVar4; uint uVar5; uint uVar6; undefined8 uVar7; int iVar8; ulonglong uVar9; int iVar10; void *_Dst; uint *puVar11; uint *puVar12; ulonglong uVar13; ulonglong uVar14; uint uVar15; undefined1 auStack_878 [32]; uint *local_858; uint auStack_84c [513]; ulonglong local_48; local_48 = DAT_14016f5a0 ^ (ulonglong)auStack_878; local_858 = param_3; if (((int)param_4 <= (int)param_3[1]) || (uVar7 = FUN_1400ddb60((longlong)param_3,param_4), (int)uVar7 == 0)) { iVar2 = *param_1; uVar15 = *param_2 + iVar2; if ((int)param_4 < (int)uVar15) { uVar15 = param_4; } uVar9 = 0; if (0 < (int)uVar15) { lVar3 = *(longlong *)(param_1 + 4); lVar4 = *(longlong *)(param_2 + 4); iVar1 = *param_2 + -1; uVar13 = uVar9; uVar14 = uVar9; do { iVar10 = (int)uVar9; iVar8 = iVar10; if (iVar1 < iVar10) { iVar8 = iVar1; } puVar11 = (uint *)(lVar3 + (longlong)(iVar10 - iVar8) * 4); puVar12 = (uint *)(lVar4 + (longlong)iVar8 * 4); uVar5 = iVar2 - (iVar10 - iVar8); uVar6 = iVar8 + 1U; if ((int)uVar5 < (int)(iVar8 + 1U)) { uVar6 = uVar5; } uVar9 = (ulonglong)uVar6; if (0 < (int)uVar6) { do { uVar6 = *puVar12; uVar5 = *puVar11; puVar12 = puVar12 + -1; puVar11 = puVar11 + 1; uVar13 = uVar13 + (ulonglong)uVar6 * (ulonglong)uVar5; uVar9 = uVar9 - 1; } while (uVar9 != 0); } uVar14 = uVar14 + 1; uVar9 = (ulonglong)(iVar10 + 1); uVar6 = (uint)uVar13; uVar13 = uVar13 >> 0x1c; auStack_84c[uVar14] = uVar6 & 0xfffffff; param_3 = local_858; } while ((longlong)uVar14 < (longlong)(int)uVar15); } uVar6 = *param_3; _Dst = *(void **)(param_3 + 4); uVar5 = uVar15 + 1; *param_3 = uVar15; uVar15 = 0; if (0 < (int)uVar5) { memcpy(_Dst,auStack_84c + 1,(ulonglong)uVar5 << 2); _Dst = (void *)((longlong)_Dst + (ulonglong)uVar5 * 4); uVar15 = uVar5; } if ((int)uVar15 < (int)uVar6) { memset(_Dst,0,(ulonglong)(uVar6 - uVar15) << 2); } FUN_1400ddc00((int *)param_3); uVar7 = 0; } return uVar7; }