/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186 * Ghidra 12.1.2 decompiler output for 0x14000f2a0 FUN_14000f2a0 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ /* WARNING: Type propagation algorithm not settling */ void ** FUN_14000f2a0(void **param_1,longlong *param_2,char *param_3) { int *piVar1; int iVar2; char cVar3; short sVar4; char *pcVar5; longlong *plVar6; longlong lVar7; HMODULE pHVar8; uint uVar9; ulonglong uVar10; char *pcVar11; ulonglong uVar12; short *psVar13; longlong *plVar14; short *psVar15; undefined1 auStack_d8 [32]; short *local_b8; undefined8 local_b0; longlong *local_a0; longlong *local_98; void *local_90 [2]; void *local_80; void *local_78; ulonglong local_68 [2]; longlong local_58; ulonglong local_50; ulonglong local_40; local_b0 = 0xfffffffffffffffe; local_40 = DAT_14016f5a0 ^ (ulonglong)auStack_d8; uVar12 = 0; local_b8 = (short *)((ulonglong)local_b8 & 0xffffffff00000000); local_50 = 0xf; local_58 = 0; local_68[0]._0_1_ = '\0'; uVar10 = 0xffffffffffffffff; pcVar11 = param_3; do { if (uVar10 == 0) break; uVar10 = uVar10 - 1; cVar3 = *pcVar11; pcVar11 = pcVar11 + 1; } while (cVar3 != '\0'); local_98 = param_2; FUN_14000c9e0(local_68,param_3,~uVar10 - 1); if (param_2[4] == 0) { local_a0 = (longlong *)0x0; } else { pcVar11 = (char *)local_68; if (0xf < local_50) { pcVar11 = (char *)CONCAT71(local_68[0]._1_7_,(char)local_68[0]); } pcVar5 = (char *)local_68; if (0xf < local_50) { pcVar5 = (char *)CONCAT71(local_68[0]._1_7_,(char)local_68[0]); } for (; pcVar5 != pcVar11 + local_58; pcVar5 = pcVar5 + 1) { uVar12 = uVar12 ^ (uVar12 >> 2) + uVar12 * 0x40 + 0x9e3779b9 + (longlong)*pcVar5; } local_a0 = FUN_140010640((longlong *)(*param_2 + (uVar12 % (ulonglong)param_2[1]) * 8),local_68) ; } plVar6 = local_a0; if (0xf < local_50) { operator_delete((void *)CONCAT71(local_68[0]._1_7_,(char)local_68[0])); } local_50 = 0xf; local_58 = 0; local_68[0]._0_1_ = '\0'; if (plVar6 == (longlong *)0x0) { param_1[3] = (void *)0x7; param_1[2] = (void *)0x0; *(undefined2 *)param_1 = 0; } else { plVar14 = plVar6 + 6; if (0xf < (ulonglong)plVar6[9]) { plVar14 = (longlong *)*plVar14; } lVar7 = (**(code **)(PTR_PTR_14016f508 + 0x18))(&PTR_PTR_14016f508); psVar13 = (short *)(lVar7 + 0x18); local_b8 = psVar13; if ((plVar14 == (longlong *)0x0) || (((ulonglong)plVar14 & 0xffffffffffff0000) != 0)) { FUN_14000fdd0((longlong *)&local_b8,(LPCSTR)plVar14); psVar13 = local_b8; } else { uVar9 = (uint)plVar14 & 0xffff; pHVar8 = FUN_1400112b0(uVar9,0); if (pHVar8 != (HMODULE)0x0) { FUN_140011650((longlong *)&local_b8,pHVar8,uVar9); psVar13 = local_b8; } } local_78 = (void *)0x7; local_80 = (void *)0x0; local_90[0] = (void *)((ulonglong)local_90[0] & 0xffffffffffff0000); uVar12 = 0xffffffffffffffff; psVar15 = psVar13; do { if (uVar12 == 0) break; uVar12 = uVar12 - 1; sVar4 = *psVar15; psVar15 = psVar15 + 1; } while (sVar4 != 0); FUN_140001710((ulonglong *)local_90,psVar13,~uVar12 - 1); param_1[3] = (void *)0x7; param_1[2] = (void *)0x0; *(undefined2 *)param_1 = 0; if (param_1 != local_90) { if ((void *)0x7 < param_1[3]) { operator_delete(*param_1); } param_1[3] = (void *)0x7; param_1[2] = (void *)0x0; *(undefined2 *)param_1 = 0; if (local_78 < (void *)0x8) { memmove(param_1,local_90,(longlong)local_80 * 2 + 2); } else { *param_1 = local_90[0]; local_90[0] = (void *)0x0; } param_1[2] = local_80; param_1[3] = local_78; local_78 = (void *)0x7; local_80 = (void *)0x0; local_90[0] = (void *)((ulonglong)local_90[0] & 0xffffffffffff0000); } if ((void *)0x7 < local_78) { operator_delete(local_90[0]); } local_78 = (void *)0x7; local_80 = (void *)0x0; local_90[0] = (void *)((ulonglong)local_90[0] & 0xffffffffffff0000); LOCK(); piVar1 = (int *)(psVar13 + -4); iVar2 = *piVar1; *piVar1 = *piVar1 + -1; UNLOCK(); if (iVar2 + -1 < 1) { (**(code **)(**(longlong **)(psVar13 + -0xc) + 8))(); } } if (*param_2 != 0) { FUN_140010570(param_2); } return param_1; }