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

346 lines
11 KiB
C

/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
* Ghidra 12.1.2 decompiler output for 0x1400c3920 FUN_1400c3920
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Type propagation algorithm not settling */
void FUN_1400c3920(undefined ***param_1,uint *param_2,undefined8 param_3,undefined8 param_4)
{
undefined **ppuVar1;
undefined8 *puVar2;
uint uVar3;
uint uVar4;
undefined8 uVar5;
ulonglong uVar6;
uint *puVar7;
longlong *plVar8;
undefined ***pppuVar9;
undefined **ppuVar10;
uint uVar11;
int iVar12;
ulonglong uVar13;
undefined8 uVar14;
undefined1 *puVar15;
IMAGE_DOS_HEADER *pIVar16;
IMAGE_DOS_HEADER *pIVar17;
undefined ***pppuVar18;
uint uVar19;
uint uVar20;
undefined1 auStackY_df8 [32];
undefined **local_dc8;
ulonglong *local_dc0;
uint local_db8;
uint local_db4;
uint local_db0 [2];
undefined1 *local_da8;
longlong local_da0 [4];
longlong *local_d80;
undefined8 local_d78;
undefined4 local_d6c;
undefined1 local_d68 [88];
undefined **local_d10;
byte local_d08 [32];
undefined ***local_ce8;
undefined1 local_ce0;
longlong local_cd8 [2];
undefined1 local_cc8 [3216];
ulonglong local_38;
local_cd8[1] = 0xfffffffffffffffe;
local_38 = DAT_14016f5a0 ^ (ulonglong)auStackY_df8;
(**(code **)(param_1[0x21][0xf] + 0x10))();
uVar5 = FUN_140075970(param_2,local_db0,param_3,param_4);
if ((char)uVar5 == '\0') {
return;
}
uVar14 = 4;
uVar5 = FUN_140074ee0(param_2,(undefined8 *)&local_db4,4);
if ((char)uVar5 == '\0') {
return;
}
uVar6 = FUN_140075580(param_2,&local_da8,uVar14,param_4);
if ((char)uVar6 == '\0') {
return;
}
if ((int)(uint)local_da8 < 0) {
return;
}
if (DAT_14016f140 <= (int)(uint)local_da8) {
return;
}
FUN_140074fb0((undefined4 *)(local_d68 + 0x28));
uVar5 = FUN_140075210(param_2,(int *)(local_d68 + 0x28),(uint)local_da8,param_4);
if ((char)uVar5 == '\0') {
local_da8 = local_d68 + 0x30;
FUN_14008a320((longlong *)(local_d68 + 0x30));
if (local_d68._56_8_ == 0) {
return;
}
if (-1 < (int)local_d68._68_4_) {
return;
}
/* WARNING: Subroutine does not return */
FUN_14003dec0();
}
uVar6 = (ulonglong)local_db0[0];
FUN_1400a7920((longlong *)param_1[0x21],(longlong *)&local_dc0,local_db0[0]);
if ((((local_dc0 == (ulonglong *)0x0) || (uVar13 = *local_dc0, uVar13 == 0)) ||
(*(char *)(uVar13 + 0x684) != '\0')) || (*(char *)(uVar13 + 0x650) != '\0'))
goto LAB_1400c3e60;
local_d78 = (**(code **)(param_1[0x21][0x11] + 0x18))();
uVar13 = 0;
uVar19 = 0;
local_da0[3] = 0;
local_da0[2] = 0;
local_da0[1] = 0;
local_d80 = (longlong *)0x0;
local_da0[0] = 0;
uVar20 = 0;
local_d6c = 0;
FUN_14004ec50((longlong)local_cc8,(longlong)(local_d68 + 0x28),uVar6);
plVar8 = local_da0;
puVar15 = local_cc8;
uVar6 = (ulonglong)local_db4;
FUN_140097a30(param_1[0x21][0x9c],uVar6,(SIZE_T)puVar15,(undefined4 *)plVar8);
FUN_14004db20((longlong)local_cc8,uVar6,puVar15,plVar8);
local_d68._8_2_ = 0;
local_d68._10_2_ = 0;
local_d68._12_2_ = 0;
local_d68._14_2_ = 0;
local_d68._16_8_ = 0;
local_d68._24_2_ = 0;
local_d68._26_2_ = 0;
local_d68._28_2_ = 0;
local_d68._30_2_ = 0;
local_d68._0_8_ = Proud::CReceivedMessageList::vftable;
local_d68._32_2_ = 1000;
local_d68._34_2_ = 0;
local_d68._36_2_ = 1;
local_d68._38_2_ = 0;
uVar6 = uVar13;
if (local_dc0 != (ulonglong *)0x0) {
uVar6 = *local_dc0;
}
pppuVar9 = (undefined ***)(uVar6 + 0x638);
pppuVar18 = (undefined ***)&local_db8;
pIVar16 = (IMAGE_DOS_HEADER *)local_d68;
plVar8 = local_da0;
FUN_1400d42c0((longlong)pppuVar9,plVar8,(longlong)pIVar16,(undefined4 *)pppuVar18);
if (local_db8 != 0) {
FUN_14003e7c0(pppuVar9,plVar8,pIVar16,pppuVar18);
local_dc8 = (undefined **)PTR_DAT_14016f010;
uVar3 = FUN_14003e620(L"Stream Extract Error at Reliable UDP");
uVar6 = uVar13;
if ((local_dc8 != (undefined **)0x0) &&
(uVar6 = 0, local_dc8 != (undefined **)PTR_DAT_14016f010)) {
uVar6 = (ulonglong)*(uint *)(local_dc8 + -1);
}
uVar4 = uVar3;
if ((((int)uVar3 <= (int)uVar6) && (uVar4 = uVar20, local_dc8 != (undefined **)0x0)) &&
(local_dc8 != (undefined **)PTR_DAT_14016f010)) {
uVar4 = *(uint *)(local_dc8 + -1);
}
uVar11 = 1;
if (1 < (int)uVar4) {
uVar11 = uVar4;
}
uVar4 = uVar20;
if ((local_dc8 != (undefined **)0x0) && (local_dc8 != (undefined **)PTR_DAT_14016f010)) {
uVar4 = *(uint *)(local_dc8 + -1);
}
if ((int)uVar4 < (int)uVar11) {
if (local_dc8 == (undefined **)0x0) {
local_dc8 = (undefined **)PTR_DAT_14016f010;
}
if ((int)uVar11 < 0) {
/* WARNING: Subroutine does not return */
FUN_14003dec0();
}
if (uVar11 == 0) {
FUN_140002190((longlong *)&local_dc8,PTR_DAT_14016f010,uVar6,pppuVar18);
}
else {
uVar4 = uVar20;
if ((local_dc8 != (undefined **)0x0) && (local_dc8 != (undefined **)PTR_DAT_14016f010)) {
uVar4 = *(uint *)(local_dc8 + -1);
}
if (uVar11 != uVar4) {
puVar7 = (uint *)FUN_14003e840((longlong)(int)uVar11 * 2 + 10);
if (puVar7 != (uint *)0x0) {
*puVar7 = 0;
puVar7[1] = 1;
}
*puVar7 = uVar11;
uVar4 = uVar20;
if ((local_dc8 != (undefined **)0x0) && (local_dc8 != (undefined **)PTR_DAT_14016f010)) {
uVar4 = *(uint *)(local_dc8 + -1);
}
ppuVar10 = (undefined **)PTR_DAT_14016f010;
if ((int)uVar11 < (int)uVar4) {
LAB_1400c3c2e:
if (local_dc8 != (undefined **)0x0) {
ppuVar10 = local_dc8;
}
}
else {
uVar11 = uVar20;
if (local_dc8 != (undefined **)0x0) {
if (local_dc8 != (undefined **)PTR_DAT_14016f010) {
uVar11 = *(uint *)(local_dc8 + -1);
}
goto LAB_1400c3c2e;
}
}
uVar6 = (ulonglong)uVar11;
FUN_14003e650(puVar7 + 2,ppuVar10,uVar11);
FUN_140002190((longlong *)&local_dc8,ppuVar10,uVar6,pppuVar18);
local_dc8 = (undefined **)(puVar7 + 2);
}
}
}
FUN_140001df0((longlong *)&local_dc8);
ppuVar10 = local_dc8;
if (local_dc8 == (undefined **)0x0) {
ppuVar10 = (undefined **)PTR_DAT_14016f010;
}
FUN_14003e650(ppuVar10,L"Stream Extract Error at Reliable UDP",uVar3);
ppuVar10 = local_dc8;
if (local_dc8 == (undefined **)0x0) {
ppuVar10 = (undefined **)PTR_DAT_14016f010;
}
uVar3 = FUN_14003e620((short *)ppuVar10);
uVar20 = uVar19;
if (0 < (int)uVar3) {
uVar20 = uVar3;
}
uVar3 = uVar19;
if ((local_dc8 != (undefined **)0x0) && (local_dc8 != (undefined **)PTR_DAT_14016f010)) {
uVar3 = *(uint *)(local_dc8 + -1);
}
if (((int)uVar20 < (int)uVar3) || (uVar20 = uVar19, local_dc8 == (undefined **)0x0)) {
LAB_1400c3cca:
if (((local_dc8 != (undefined **)PTR_DAT_14016f010) && (local_dc8 != (undefined **)0x0)) &&
(local_dc8 + -1 != (undefined **)0x0)) {
*(uint *)(local_dc8 + -1) = uVar20;
*(undefined2 *)((longlong)local_dc8 + (longlong)(int)uVar20 * 2) = 0;
}
}
else if (local_dc8 != (undefined **)PTR_DAT_14016f010) {
uVar20 = *(uint *)(local_dc8 + -1);
goto LAB_1400c3cca;
}
local_d08[0] = 0;
local_d08[1] = 0;
local_d08[2] = 0;
local_d08[3] = 0;
local_d08[4] = 0;
local_d08[5] = 0;
local_d08[6] = 0;
local_d08[7] = 0;
local_d08[8] = 0;
local_d08[9] = 0;
local_d08[10] = 0;
local_d08[0xb] = 0;
local_d08[0xc] = 0;
local_d08[0xd] = 0;
local_d08[0xe] = 0;
local_d08[0xf] = 0;
local_d08[0x10] = 0;
local_d08[0x11] = 0;
local_d08[0x12] = 0;
local_d08[0x13] = 0;
local_d08[0x14] = 0;
local_d08[0x15] = 0;
local_d08[0x16] = 0;
local_d08[0x17] = 0;
local_d08[0x18] = 0;
local_d08[0x19] = 0;
local_d08[0x1a] = 0;
local_d08[0x1b] = 0;
local_d08[0x1c] = 0;
local_d08[0x1d] = 0;
local_d08[0x1e] = 0;
local_d08[0x1f] = 0;
local_d10 = Proud::ByteArray::vftable;
uVar6 = uVar13;
if (local_dc0 != (ulonglong *)0x0) {
uVar6 = *local_dc0;
}
pppuVar18 = &local_dc8;
plVar8 = FUN_140071c20(local_cd8,(ulonglong)local_db8,(ulonglong)*(uint *)(uVar6 + 0x56c),
(longlong *)pppuVar18,(longlong)&local_d10);
pIVar16 = (IMAGE_DOS_HEADER *)*param_1[0x21];
(**(code **)(pIVar16 + 1))();
pppuVar9 = &local_d10;
FUN_140049e40(pppuVar9);
ppuVar10 = local_dc8;
if (((local_dc8 != (undefined **)0x0) && (local_dc8 != (undefined **)PTR_DAT_14016f010)) &&
(ppuVar1 = local_dc8 + -1, ppuVar1 != (undefined **)0x0)) {
pppuVar9 = (undefined ***)FUN_14003e7c0(pppuVar9,plVar8,pIVar16,pppuVar18);
local_ce8 = pppuVar9;
FUN_14003d040((int *)pppuVar9);
local_ce0 = 1;
puVar7 = (uint *)((longlong)ppuVar10 + -4);
*puVar7 = *puVar7 - 1;
if (*puVar7 == 0) {
FUN_14003e8b0(ppuVar1);
}
FUN_14003d0d0((longlong)pppuVar9);
local_ce0 = 0;
}
local_dc8 = (undefined **)PTR_DAT_14016f010;
}
while (iVar12 = (int)uVar13, iVar12 != local_d68._24_4_) {
if ((iVar12 < 0) || ((int)local_d68._24_4_ <= iVar12)) {
/* WARNING: Subroutine does not return */
FUN_14003def0(pppuVar9,plVar8,pIVar16,pppuVar18);
}
pIVar17 = (IMAGE_DOS_HEADER *)(local_d68._16_8_ + (longlong)iVar12 * 0x48);
pIVar17->e_program[0] = 1;
FUN_140074bb0((int *)pIVar17,0,pIVar16,pppuVar18);
plVar8 = (longlong *)0x0;
pppuVar9 = param_1;
FUN_1400c6270((IMAGE_DOS_HEADER *)param_1,(IMAGE_DOS_HEADER *)0x0,pIVar17,pppuVar18);
if ((int)local_d68._24_4_ <= iVar12) {
/* WARNING: Subroutine does not return */
FUN_14003def0(pppuVar9,plVar8,pIVar17,pppuVar18);
}
pIVar16 = pIVar17;
uVar13 = (ulonglong)(iVar12 + 1);
}
FUN_14007e8f0((undefined8 *)local_d68);
if (local_d80 != (longlong *)0x0) {
plVar8 = local_d80 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
FUN_1400512a0((longlong)&local_d80,local_d80);
}
}
local_d68._80_8_ = local_da0 + 1;
FUN_14008a320(local_da0 + 1);
if (local_da0[2] != 0) {
if (local_da0[3] < 0) {
/* WARNING: Subroutine does not return */
FUN_14003dec0();
}
local_da0[3] = local_da0[3] & 0xffffffff00000000;
}
LAB_1400c3e60:
if ((local_dc0 != (ulonglong *)0x0) && (local_dc0[1] = local_dc0[1] - 1, local_dc0[1] == 0)) {
puVar2 = (undefined8 *)*local_dc0;
if (puVar2 != (undefined8 *)0x0) {
(**(code **)*puVar2)(puVar2,1);
}
FUN_14003e8b0(local_dc0);
}
local_d68._80_8_ = local_d68 + 0x30;
FUN_14008a320((longlong *)(local_d68 + 0x30));
if ((local_d68._56_8_ != 0) && ((int)local_d68._68_4_ < 0)) {
/* WARNING: Subroutine does not return */
FUN_14003dec0();
}
return;
}