269 lines
9.5 KiB
C
269 lines
9.5 KiB
C
/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469
|
|
* Ghidra 12.1.2 decompiler output for 0x14004c590 FUN_14004c590
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
|
|
void FUN_14004c590(longlong param_1,uint *param_2,longlong param_3,TypeDescriptor *param_4)
|
|
|
|
{
|
|
bool bVar1;
|
|
undefined4 *puVar2;
|
|
ulonglong uVar3;
|
|
longlong lVar4;
|
|
longlong lVar5;
|
|
ulonglong uVar6;
|
|
ulonglong uVar7;
|
|
undefined1 *puVar8;
|
|
undefined1 *puVar9;
|
|
int iVar10;
|
|
ulonglong uVar11;
|
|
longlong *plVar12;
|
|
longlong lVar13;
|
|
TypeDescriptor *pTVar14;
|
|
uint uVar15;
|
|
longlong *plVar16;
|
|
double dVar17;
|
|
undefined8 uVar18;
|
|
double dVar19;
|
|
undefined1 auStack_d8 [32];
|
|
undefined4 local_b8;
|
|
longlong local_a8;
|
|
longlong local_a0;
|
|
double local_98;
|
|
ulonglong local_90;
|
|
uint *local_88;
|
|
longlong *local_80;
|
|
undefined8 local_60;
|
|
ulonglong local_58;
|
|
|
|
puVar9 = auStack_d8;
|
|
puVar8 = auStack_d8;
|
|
local_60 = 0xfffffffffffffffe;
|
|
local_58 = DAT_1401555a0 ^ (ulonglong)&local_a8;
|
|
dVar17 = (double)(**(code **)(*(longlong *)(param_1 + 0x118) + 8))();
|
|
local_98 = dVar17;
|
|
if ((*(longlong *)(param_2 + 10) == 0) || ((char)param_2[0x22] == '\0')) {
|
|
FUN_14003e030((longlong)(param_2 + 0x18),0,param_3);
|
|
goto LAB_14004cb4e;
|
|
}
|
|
local_88 = param_2 + 2;
|
|
uVar11 = 0;
|
|
uVar3 = uVar11;
|
|
if (*(longlong *)(param_2 + 10) != 0) {
|
|
uVar3 = *(ulonglong *)(param_2 + 6);
|
|
}
|
|
while (uVar6 = uVar3, local_90 = uVar6, uVar6 != 0) {
|
|
if (uVar6 == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14000b450(0x80004005);
|
|
}
|
|
local_80 = *(longlong **)(uVar6 + 8);
|
|
local_a0 = 0;
|
|
local_b8 = 0;
|
|
param_4 = &Proud::CRemoteClient_S::RTTI_Type_Descriptor;
|
|
pTVar14 = &Proud::CP2PGroupMemberBase_S::RTTI_Type_Descriptor;
|
|
lVar4 = __RTDynamicCast(*(undefined8 *)(uVar6 + 0x10),0);
|
|
local_a0 = lVar4;
|
|
if ((lVar4 != 0) &&
|
|
((((*(double *)(lVar4 + 0x1b0) == 0.0 || ((int)param_2[0x1e] < 1)) ||
|
|
(**(int **)(param_2 + 0x1c) != *(int *)(lVar4 + 0x6f8))) ||
|
|
(*(char *)(lVar4 + 0x700) == '\0')))) {
|
|
*(undefined8 *)(lVar4 + 0x1b0) = 0;
|
|
if (*(char *)(lVar4 + 0x700) != '\0') {
|
|
*(double *)(lVar4 + 0x1b0) = *(double *)(param_2 + 0x24) + 0.0;
|
|
}
|
|
bVar1 = FUN_140095420(lVar4);
|
|
if (!bVar1) {
|
|
*(double *)(lVar4 + 0x1b0) = *(double *)(param_2 + 0x26) + *(double *)(lVar4 + 0x1b0);
|
|
}
|
|
dVar19 = *(double *)(lVar4 + 0x1b0) - *(double *)(lVar4 + 0x1c8) * *(double *)(param_2 + 0x28)
|
|
;
|
|
*(double *)(lVar4 + 0x1b0) = dVar19;
|
|
*(double *)(lVar4 + 0x1b0) = *(double *)(lVar4 + 0x1e0) * *(double *)(param_2 + 0x2e) + dVar19
|
|
;
|
|
dVar19 = (double)FUN_140096240(lVar4,*param_2,pTVar14,param_4);
|
|
if (0.0 <= dVar19) {
|
|
dVar19 = (double)FUN_140096240(lVar4,*param_2,pTVar14,param_4);
|
|
}
|
|
else {
|
|
dVar19 = 0.0;
|
|
}
|
|
dVar19 = *(double *)(lVar4 + 0x1b0) - dVar19 * *(double *)(param_2 + 0x2a);
|
|
*(double *)(lVar4 + 0x1b0) = dVar19;
|
|
*(double *)(lVar4 + 0x1b0) =
|
|
*(double *)(lVar4 + 400) * *(double *)(param_2 + 0x2c) * 10485760.0 + dVar19;
|
|
if ((0.0 < *(double *)(param_2 + 0x30)) &&
|
|
(dVar17 - (double)local_80 < *(double *)(param_2 + 0x30))) {
|
|
*(undefined8 *)(lVar4 + 0x1b0) = 0xc65c662460d49e87;
|
|
}
|
|
}
|
|
uVar3 = uVar11;
|
|
if (uVar6 != 0) {
|
|
uVar3 = *(ulonglong *)(uVar6 + 0x18);
|
|
}
|
|
}
|
|
lVar4 = *(longlong *)(param_2 + 10);
|
|
if (lVar4 * 0x18 + 0x10U < 0x401) {
|
|
uVar3 = lVar4 * 0x18 + 0x1f;
|
|
if (uVar3 <= lVar4 * 0x18 + 0x10U) {
|
|
uVar3 = 0xffffffffffffff0;
|
|
}
|
|
lVar4 = -(uVar3 & 0xfffffffffffffff0);
|
|
puVar8 = auStack_d8 + lVar4;
|
|
puVar2 = (undefined4 *)((longlong)&local_a8 + lVar4);
|
|
plVar12 = (longlong *)0x0;
|
|
puVar9 = auStack_d8 + lVar4;
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
*puVar2 = 0xcccc;
|
|
LAB_14004c6c7:
|
|
plVar12 = (longlong *)(puVar2 + 4);
|
|
puVar9 = puVar8;
|
|
}
|
|
}
|
|
else {
|
|
puVar2 = malloc(lVar4 * 0x18 + 0x10);
|
|
plVar12 = (longlong *)0x0;
|
|
puVar9 = auStack_d8;
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
*puVar2 = 0xdddd;
|
|
goto LAB_14004c6c7;
|
|
}
|
|
}
|
|
local_a8._0_4_ = 0;
|
|
local_88 = param_2 + 2;
|
|
uVar3 = uVar11;
|
|
uVar6 = uVar11;
|
|
local_80 = plVar12;
|
|
if (*(longlong *)(param_2 + 10) != 0) {
|
|
uVar3 = *(ulonglong *)(param_2 + 6);
|
|
}
|
|
while (uVar7 = uVar3, uVar15 = (uint)uVar6, local_90 = uVar7, uVar7 != 0) {
|
|
local_a0 = 0;
|
|
if (uVar7 == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined8 *)(puVar9 + -8) = 0x14004c8d1;
|
|
FUN_14000b450(0x80004005);
|
|
}
|
|
*(undefined4 *)(puVar9 + 0x20) = 0;
|
|
param_4 = &Proud::CRemoteClient_S::RTTI_Type_Descriptor;
|
|
uVar18 = *(undefined8 *)(uVar7 + 0x10);
|
|
*(undefined8 *)(puVar9 + -8) = 0x14004c8ee;
|
|
local_a0 = __RTDynamicCast(uVar18,0);
|
|
if (local_a0 != 0) {
|
|
lVar4 = (longlong)(int)uVar15;
|
|
plVar12[lVar4 * 3] = local_a0;
|
|
plVar12[lVar4 * 3 + 1] = (longlong)param_2;
|
|
if (uVar7 == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar9 + -8) = &UNK_14004c93d;
|
|
FUN_14000b450(0x80004005);
|
|
}
|
|
plVar12[lVar4 * 3 + 2] = (longlong)(dVar17 - *(double *)(uVar7 + 8));
|
|
local_a8._0_4_ = uVar15 + 1;
|
|
uVar6 = (ulonglong)(uint)local_a8;
|
|
}
|
|
uVar3 = uVar11;
|
|
if (uVar7 != 0) {
|
|
uVar3 = *(ulonglong *)(uVar7 + 0x18);
|
|
}
|
|
}
|
|
lVar13 = 0;
|
|
*(undefined8 *)(puVar9 + -8) = 0x14004c715;
|
|
FUN_140043ff0((longlong)plVar12,uVar15,0);
|
|
*(undefined8 *)(puVar9 + -8) = 0x14004c721;
|
|
FUN_14003e030((longlong)(param_2 + 0x18),uVar15,lVar13);
|
|
local_a8 = 0;
|
|
lVar4 = (longlong)(int)uVar15;
|
|
local_98 = (double)lVar4;
|
|
uVar3 = uVar11;
|
|
plVar16 = plVar12;
|
|
if (0 < (int)uVar15) {
|
|
do {
|
|
if ((local_a8 < 0) || (iVar10 = (int)uVar11, (int)param_2[0x1e] <= iVar10)) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar9 + -8) = &UNK_14004c892;
|
|
FUN_14002f5c0(lVar4,uVar6,lVar13,param_4);
|
|
}
|
|
lVar4 = *(longlong *)(param_2 + 0x1c);
|
|
*(undefined4 *)(uVar3 + lVar4) = *(undefined4 *)(*plVar16 + 0x6f8);
|
|
if ((int)param_2[0x1e] <= iVar10) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar9 + -8) = &UNK_14004c88c;
|
|
FUN_14002f5c0(lVar4,uVar6,lVar13,param_4);
|
|
}
|
|
lVar4 = *(longlong *)(param_2 + 0x1c);
|
|
*(undefined8 *)(lVar4 + 8 + uVar3) = *(undefined8 *)(*plVar16 + 0x1b0);
|
|
if ((int)param_2[0x1e] <= iVar10) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar9 + -8) = &UNK_14004c886;
|
|
FUN_14002f5c0(lVar4,uVar6,lVar13,param_4);
|
|
}
|
|
lVar4 = *(longlong *)(param_2 + 0x1c);
|
|
*(undefined1 *)(lVar4 + 0x10 + uVar3) = *(undefined1 *)(*plVar16 + 0x700);
|
|
if ((int)param_2[0x1e] <= iVar10) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar9 + -8) = &UNK_14004c880;
|
|
FUN_14002f5c0(lVar4,uVar6,lVar13,param_4);
|
|
}
|
|
lVar4 = *(longlong *)(param_2 + 0x1c);
|
|
lVar5 = *plVar16;
|
|
*(undefined8 *)(puVar9 + -8) = 0x14004c7b4;
|
|
bVar1 = FUN_140095420(lVar5);
|
|
*(bool *)(uVar3 + 0x11 + lVar4) = bVar1;
|
|
if ((int)param_2[0x1e] <= iVar10) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar9 + -8) = &UNK_14004c87a;
|
|
FUN_14002f5c0(lVar5,uVar6,lVar13,param_4);
|
|
}
|
|
lVar4 = *(longlong *)(param_2 + 0x1c);
|
|
*(undefined8 *)(lVar4 + 0x18 + uVar3) = *(undefined8 *)(*plVar16 + 0x1c8);
|
|
if ((int)param_2[0x1e] <= iVar10) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar9 + -8) = &UNK_14004c874;
|
|
FUN_14002f5c0(lVar4,uVar6,lVar13,param_4);
|
|
}
|
|
lVar4 = *(longlong *)(param_2 + 0x1c);
|
|
uVar15 = *param_2;
|
|
uVar6 = (ulonglong)uVar15;
|
|
lVar5 = *plVar16;
|
|
*(undefined8 *)(puVar9 + -8) = 0x14004c7f0;
|
|
uVar18 = FUN_140096240(lVar5,uVar15,lVar13,param_4);
|
|
*(undefined8 *)(uVar3 + 0x20 + lVar4) = uVar18;
|
|
if ((int)param_2[0x1e] <= iVar10) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar9 + -8) = &UNK_14004c86e;
|
|
FUN_14002f5c0(lVar5,uVar6,lVar13,param_4);
|
|
}
|
|
lVar4 = *(longlong *)(param_2 + 0x1c);
|
|
*(undefined8 *)(lVar4 + 0x28 + uVar3) = *(undefined8 *)(*plVar16 + 400);
|
|
if ((int)param_2[0x1e] <= iVar10) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar9 + -8) = &UNK_14004c868;
|
|
FUN_14002f5c0(lVar4,uVar6,lVar13,param_4);
|
|
}
|
|
lVar4 = *(longlong *)(param_2 + 0x1c);
|
|
*(longlong *)(lVar4 + 0x30 + uVar3) = plVar16[2];
|
|
if ((int)param_2[0x1e] <= iVar10) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar9 + -8) = &UNK_14004c862;
|
|
FUN_14002f5c0(lVar4,uVar6,lVar13,param_4);
|
|
}
|
|
lVar4 = *(longlong *)(param_2 + 0x1c);
|
|
*(undefined8 *)(lVar4 + 0x38 + uVar3) = *(undefined8 *)(*plVar16 + 0x1e0);
|
|
uVar11 = (ulonglong)(iVar10 + 1);
|
|
local_a8 = local_a8 + 1;
|
|
uVar3 = uVar3 + 0x40;
|
|
plVar16 = plVar16 + 3;
|
|
} while (local_a8 < (longlong)local_98);
|
|
}
|
|
if ((plVar12 != (longlong *)0x0) && ((int)plVar12[-2] == 0xdddd)) {
|
|
*(undefined8 *)(puVar9 + -8) = 0x14004c8b2;
|
|
free(plVar12 + -2);
|
|
}
|
|
LAB_14004cb4e:
|
|
*(undefined8 *)(puVar9 + -8) = 0x14004cb5a;
|
|
return;
|
|
}
|
|
|