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

414 lines
12 KiB
C

/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
* Ghidra 12.1.2 decompiler output for 0x140018ae0 FUN_140018ae0
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
undefined8 FUN_140018ae0(longlong param_1,longlong param_2)
{
uint uVar1;
ulonglong *puVar2;
ulonglong *puVar3;
code *pcVar4;
undefined8 *puVar5;
undefined8 *puVar6;
longlong lVar7;
ulonglong uVar8;
ulonglong *puVar9;
undefined8 *puVar10;
undefined8 uVar11;
ulonglong **ppuVar12;
ulonglong **extraout_RAX;
ulonglong **extraout_RAX_00;
ulonglong **extraout_RAX_01;
ulonglong **extraout_RAX_02;
ulonglong **ppuVar13;
ulonglong uVar14;
ulonglong uVar15;
ulonglong **ppuVar16;
ulonglong **ppuVar17;
ulonglong *puVar18;
ulonglong **ppuVar19;
ulonglong *puVar20;
longlong lVar21;
undefined **ppuVar22;
ulonglong *puVar23;
ulonglong **ppuVar24;
ulonglong **ppuVar25;
undefined1 auStackY_298 [32];
ulonglong *local_268;
ulonglong *local_260;
ulonglong *local_258;
ulonglong *local_250;
ulonglong *local_248;
ulonglong *local_240;
undefined8 local_230;
undefined4 local_228;
undefined4 uStack_224;
undefined4 local_220;
undefined4 uStack_21c;
undefined1 local_218;
undefined1 uStack_217;
undefined6 uStack_216;
ulonglong *local_210;
ulonglong **local_208;
ulonglong **local_200;
ulonglong **local_1f8;
ulonglong **local_1e8;
ulonglong **local_1e0;
ulonglong **local_1d8;
longlong local_1c8;
longlong local_1c0;
undefined8 *local_1b8;
undefined8 *local_1b0;
undefined8 local_1a8;
undefined8 local_198;
longlong local_188;
undefined *local_180;
undefined1 local_170;
undefined8 local_168;
undefined4 local_160;
undefined8 local_158;
undefined8 local_150;
undefined4 local_148;
uint local_144;
void *local_120;
ulonglong local_108;
undefined2 local_f8;
undefined6 uStack_f6;
undefined8 local_e8;
ulonglong local_e0;
undefined2 local_d0;
undefined6 uStack_ce;
undefined8 local_c0;
ulonglong local_b8;
ulonglong local_a8;
ulonglong uStack_a0;
ulonglong local_98;
undefined8 local_90;
undefined8 local_88;
ulonglong *local_80;
undefined8 local_78;
void *local_70;
undefined8 local_68;
undefined8 local_60;
ulonglong local_48;
local_198 = 0xfffffffffffffffe;
local_48 = DAT_14016f5a0 ^ (ulonglong)auStackY_298;
ppuVar22 = (undefined **)&DAT_1401303d0;
lVar21 = 0x28;
do {
lVar7 = lVar21 / 2;
if (ppuVar22[lVar7] < (undefined *)0xb) {
ppuVar22 = ppuVar22 + lVar7 + 1;
lVar7 = lVar21 + (-1 - lVar7);
}
lVar21 = lVar7;
} while (0 < lVar7);
if (ppuVar22 == &MBISingleton<MagiStatistics>::vftable_meta_ptr) {
ppuVar22 = (undefined **)&UNK_140130508;
}
local_180 = *ppuVar22;
local_188 = 0;
local_170 = 0;
local_168 = 0;
local_160 = 0x3f800000;
local_158 = 0;
local_150 = 0;
local_1c8 = param_2;
local_1c0 = param_1;
uVar8 = FUN_14000e610((char *)(param_2 + 8),&local_188);
if ((char)uVar8 == '\0') {
if (local_188 != 0) {
uVar8 = FUN_140010570(&local_188);
}
return uVar8 & 0xffffffffffffff00;
}
puVar9 = (ulonglong *)0x0;
local_250 = (ulonglong *)0x0;
local_248 = (ulonglong *)0x0;
local_240 = (ulonglong *)0x0;
puVar20 = puVar9;
puVar23 = puVar9;
if (*(longlong *)(DAT_14017cf20 + 0x58) == 0) {
local_260 = (ulonglong *)0x0;
}
else {
local_260 = *(ulonglong **)(DAT_14017cf20 + 0x68);
if (local_260 != (ulonglong *)0x0) {
local_258 = (ulonglong *)*local_260;
puVar18 = local_260;
puVar3 = local_258;
goto joined_r0x000140018c29;
}
}
local_258 = (ulonglong *)0x0;
puVar18 = local_260;
puVar3 = local_258;
joined_r0x000140018c29:
while (puVar3 != (ulonglong *)0x0) {
puVar2 = (ulonglong *)puVar3[2];
if (puVar2 != (ulonglong *)0x0) {
if ((puVar2 < puVar20) && (puVar9 <= puVar2)) {
lVar21 = ((longlong)puVar2 - (longlong)puVar9) +
SUB168(SEXT816(-0x7bdef7bdef7bdef7) * SEXT816((longlong)puVar2 - (longlong)puVar9),
8);
if (puVar20 == puVar23) {
FUN_14003a7e0((longlong *)&local_250);
puVar20 = local_248;
puVar23 = local_240;
}
local_268 = puVar20;
local_260 = puVar20;
if (puVar20 != (ulonglong *)0x0) {
FUN_140003c50((undefined4 *)puVar20,
(undefined4 *)(local_250 + ((lVar21 >> 7) - (lVar21 >> 0x3f)) * 0x1f));
}
}
else {
if (puVar20 == puVar23) {
FUN_14003a7e0((longlong *)&local_250);
puVar20 = local_248;
puVar23 = local_240;
}
local_268 = puVar20;
local_260 = puVar20;
if (puVar20 != (ulonglong *)0x0) {
FUN_140003c50((undefined4 *)puVar20,(undefined4 *)puVar2);
}
}
puVar20 = puVar20 + 0x1f;
puVar9 = local_250;
local_248 = puVar20;
}
puVar3 = (ulonglong *)*puVar3;
while (puVar3 == (ulonglong *)0x0) {
puVar18 = puVar18 + 1;
puVar3 = (ulonglong *)*puVar18;
}
if (puVar18 == puVar3) {
puVar3 = (ulonglong *)0x0;
}
}
ppuVar16 = (ulonglong **)0x0;
local_208 = (ulonglong **)0x0;
local_200 = (ulonglong **)0x0;
local_1f8 = (ulonglong **)0x0;
local_1e8 = (ulonglong **)0x0;
local_1e0 = (ulonglong **)0x0;
local_1d8 = (ulonglong **)0x0;
local_1b8 = (undefined8 *)0x0;
local_1b0 = (undefined8 *)0x0;
local_1a8 = 0;
ppuVar13 = ppuVar16;
ppuVar12 = ppuVar16;
ppuVar17 = ppuVar16;
ppuVar24 = ppuVar16;
if (puVar9 != puVar20) {
puVar9 = puVar9 + 0x17;
ppuVar25 = ppuVar16;
do {
ppuVar12 = (ulonglong **)0x0;
local_260 = puVar9;
FUN_140004f20(&local_148,(undefined4 *)(puVar9 + -0x17));
local_a8 = puVar9[-3];
uStack_a0 = puVar9[-2];
local_98 = puVar9[-1];
local_90 = *puVar9;
local_88 = puVar9[1];
local_80 = (ulonglong *)puVar9[2];
local_78 = puVar9[3];
FUN_140004de0(&local_70,(longlong *)(puVar9 + 4));
uVar1 = local_144;
local_230._0_4_ = (undefined4)local_90;
local_230._4_4_ = local_90._4_4_;
local_228 = (undefined4)local_88;
uStack_224 = (undefined4)local_78;
local_220 = local_88._4_4_;
local_218 = local_78._4_1_;
uStack_217 = local_78._5_1_;
local_210 = local_80;
uVar8 = 0;
uStack_21c = 0;
local_268 = (ulonglong *)CONCAT44(local_268._4_4_,local_144);
if ((&local_268 < ppuVar13) && (ppuVar17 <= &local_268)) {
lVar21 = (longlong)&local_268 - (longlong)ppuVar17;
if (ppuVar13 == ppuVar25) {
uVar14 = (longlong)ppuVar13 - (longlong)ppuVar17 >> 2;
if (0x3ffffffffffffffe < uVar14) {
std::_Xlength_error("vector<T> too long");
pcVar4 = (code *)swi(3);
uVar11 = (*pcVar4)();
return uVar11;
}
uVar14 = uVar14 + 1;
uVar15 = (longlong)ppuVar25 - (longlong)ppuVar17 >> 2;
if (uVar15 < uVar14) {
if (uVar15 <= 0x3fffffffffffffff - (uVar15 >> 1)) {
uVar8 = uVar15 + (uVar15 >> 1);
}
if (uVar8 < uVar14) {
uVar8 = uVar14;
}
FUN_14001a190((longlong *)&local_208,uVar8);
ppuVar13 = local_200;
ppuVar17 = local_208;
ppuVar25 = local_1f8;
}
}
if (ppuVar13 != (ulonglong **)0x0) {
*(uint *)ppuVar13 = *(uint *)((longlong)ppuVar17 + (lVar21 >> 2) * 4);
}
}
else {
if (ppuVar13 == ppuVar25) {
uVar14 = (longlong)ppuVar13 - (longlong)ppuVar17 >> 2;
if (0x3ffffffffffffffe < uVar14) {
std::_Xlength_error("vector<T> too long");
break;
}
uVar14 = uVar14 + 1;
uVar15 = (longlong)ppuVar25 - (longlong)ppuVar17 >> 2;
if (uVar15 < uVar14) {
if (uVar15 <= 0x3fffffffffffffff - (uVar15 >> 1)) {
uVar8 = uVar15 + (uVar15 >> 1);
}
if (uVar8 < uVar14) {
uVar8 = uVar14;
}
FUN_14001a190((longlong *)&local_208,uVar8);
ppuVar13 = local_200;
ppuVar17 = local_208;
ppuVar25 = local_1f8;
}
}
if (ppuVar13 != (ulonglong **)0x0) {
*(uint *)ppuVar13 = uVar1;
}
}
ppuVar13 = (ulonglong **)((longlong)ppuVar13 + 4);
local_200 = ppuVar13;
if ((&local_230 < ppuVar16) && (ppuVar24 <= &local_230)) {
lVar21 = ((longlong)&local_230 - (longlong)ppuVar24) / 0x28;
if (ppuVar16 == local_1d8) {
FUN_140019fc0((longlong *)&local_1e8);
ppuVar16 = local_1e0;
ppuVar24 = local_1e8;
}
if (ppuVar16 != (ulonglong **)0x0) {
*ppuVar16 = ppuVar24[lVar21 * 5];
ppuVar16[1] = ppuVar24[lVar21 * 5 + 1];
ppuVar16[2] = ppuVar24[lVar21 * 5 + 2];
ppuVar16[3] = ppuVar24[lVar21 * 5 + 3];
puVar9 = ppuVar24[lVar21 * 5 + 4];
LAB_140019042:
ppuVar16[4] = puVar9;
}
}
else {
if (ppuVar16 == local_1d8) {
FUN_140019fc0((longlong *)&local_1e8);
ppuVar16 = local_1e0;
ppuVar24 = local_1e8;
}
if (ppuVar16 != (ulonglong **)0x0) {
*ppuVar16 = (ulonglong *)CONCAT44(local_230._4_4_,(undefined4)local_230);
ppuVar16[1] = (ulonglong *)CONCAT44(uStack_224,local_228);
ppuVar16[2] = (ulonglong *)CONCAT44(uStack_21c,local_220);
ppuVar16[3] = (ulonglong *)CONCAT62(uStack_216,CONCAT11(uStack_217,local_218));
puVar9 = local_210;
goto LAB_140019042;
}
}
ppuVar16 = ppuVar16 + 5;
local_1e0 = ppuVar16;
puVar10 = FUN_140005da0((longlong)&local_148,&local_230);
FUN_140019d70((longlong *)&local_1b8,puVar10);
if ((void *)CONCAT44(local_230._4_4_,(undefined4)local_230) != (void *)0x0) {
operator_delete((void *)CONCAT44(local_230._4_4_,(undefined4)local_230));
}
if (local_70 != (void *)0x0) {
operator_delete(local_70);
}
local_70 = (void *)0x0;
local_68 = 0;
local_60 = 0;
if (7 < local_b8) {
operator_delete((void *)CONCAT62(uStack_ce,local_d0));
}
local_b8 = 7;
local_c0 = 0;
local_d0 = 0;
if (7 < local_e0) {
operator_delete((void *)CONCAT62(uStack_f6,local_f8));
}
local_e0 = 7;
local_e8 = 0;
local_f8 = 0;
if (7 < local_108) {
operator_delete(local_120);
}
ppuVar12 = (ulonglong **)0x0;
puVar9 = local_260 + 0x1f;
puVar23 = local_260 + 8;
local_260 = puVar9;
} while (puVar23 != puVar20);
}
puVar10 = local_1b8;
lVar21 = local_1c0;
uVar1 = *(uint *)(local_1c8 + 0x208);
local_268 = (ulonglong *)CONCAT44(local_268._4_4_,uVar1);
ppuVar25 = (ulonglong **)((ulonglong)ppuVar12 & 0xffffffff);
ppuVar19 = (ulonglong **)((longlong)ppuVar13 - (longlong)ppuVar17 >> 2);
ppuVar13 = (ulonglong **)(ulonglong)uVar1;
ppuVar16 = ppuVar12;
if (ppuVar19 != (ulonglong **)0x0) {
do {
FUN_14001b0d0(lVar21,uVar1,*(uint *)ppuVar17,(uint *)(ppuVar24 + (longlong)ppuVar12 * 5),
puVar10 + (longlong)ppuVar12 * 4);
ppuVar12 = (ulonglong **)(ulonglong)((int)ppuVar25 + 1);
ppuVar17 = (ulonglong **)((longlong)ppuVar17 + 4);
ppuVar25 = ppuVar12;
} while (ppuVar12 < ppuVar19);
ppuVar16 = (ulonglong **)0x0;
ppuVar13 = ppuVar12;
puVar20 = local_248;
ppuVar17 = local_208;
}
puVar6 = local_1b0;
puVar5 = puVar10;
if (puVar10 != (undefined8 *)0x0) {
for (; puVar5 != puVar6; puVar5 = puVar5 + 4) {
if ((void *)*puVar5 != (void *)0x0) {
operator_delete((void *)*puVar5);
ppuVar16 = (ulonglong **)0x0;
}
*puVar5 = ppuVar16;
puVar5[1] = ppuVar16;
puVar5[2] = ppuVar16;
}
operator_delete(puVar10);
ppuVar13 = extraout_RAX;
}
if (ppuVar24 != (ulonglong **)0x0) {
operator_delete(ppuVar24);
ppuVar13 = extraout_RAX_00;
}
if (ppuVar17 != (ulonglong **)0x0) {
operator_delete(ppuVar17);
ppuVar13 = extraout_RAX_01;
}
puVar9 = local_250;
if (local_250 != (ulonglong *)0x0) {
FUN_140004ba0(local_250,puVar20);
operator_delete(puVar9);
ppuVar13 = extraout_RAX_02;
}
if (local_188 != 0) {
ppuVar13 = (ulonglong **)FUN_140010570(&local_188);
}
return CONCAT71((int7)((ulonglong)ppuVar13 >> 8),1);
}