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

161 lines
4.5 KiB
C

/* 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;
}