383 lines
13 KiB
C
383 lines
13 KiB
C
/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
|
|
* Ghidra 12.1.2 decompiler output for 0x14008d300 FUN_14008d300
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00014008d869) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014008d870) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014008d87f) */
|
|
|
|
void FUN_14008d300(short *param_1,undefined8 param_2,longlong *param_3,undefined8 param_4)
|
|
|
|
{
|
|
longlong lVar1;
|
|
longlong lVar2;
|
|
undefined8 uVar3;
|
|
undefined8 *puVar4;
|
|
undefined8 *puVar5;
|
|
int iVar6;
|
|
uint uVar7;
|
|
short *psVar8;
|
|
undefined8 *puVar9;
|
|
longlong *in_RDX;
|
|
longlong lVar10;
|
|
longlong *plVar11;
|
|
uint uVar12;
|
|
int iVar13;
|
|
longlong *plVar14;
|
|
size_t sVar15;
|
|
ulonglong uVar16;
|
|
int iVar17;
|
|
int iVar18;
|
|
longlong local_res20;
|
|
undefined8 local_a8;
|
|
exception local_98 [96];
|
|
|
|
puVar5 = (undefined8 *)0x0;
|
|
uVar12 = 0;
|
|
psVar8 = param_1 + 0x18;
|
|
puVar4 = puVar5;
|
|
do {
|
|
if (((longlong)puVar4 < 0) || (5 < (longlong)puVar4)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14003def0(psVar8,in_RDX,param_3,param_4);
|
|
}
|
|
plVar14 = *(longlong **)psVar8;
|
|
if (plVar14 != (longlong *)0x0) {
|
|
FUN_14008ccf0(param_3,in_RDX,(longlong)param_3);
|
|
*(undefined4 *)(param_3 + 0xd5) = *(undefined4 *)(param_1 + 0xbc);
|
|
local_a8 = (int *)CONCAT44(local_a8._4_4_,0x10);
|
|
*(short *)((longlong)param_3 + 0x6ac) = param_1[0xbe];
|
|
param_3[0xce] = *(longlong *)(param_1 + 200);
|
|
*(undefined2 *)(param_3 + 0xcc) = 0xabce;
|
|
*(short *)((longlong)param_3 + 0x662) = param_1[0xc0];
|
|
lVar1 = plVar14[6];
|
|
param_3[0xcd] = 0;
|
|
*(int *)((longlong)param_3 + 0x664) = (int)lVar1;
|
|
lVar1 = param_3[1];
|
|
if (lVar1 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14003dec0();
|
|
}
|
|
FUN_14008c3d0(param_3,lVar1 + 1,-1);
|
|
if (param_3[1] <= lVar1) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14003dec0();
|
|
}
|
|
if ((ulonglong)param_3[2] < 0x65) {
|
|
plVar11 = param_3 + (lVar1 + 2) * 2;
|
|
}
|
|
else {
|
|
plVar11 = (longlong *)(lVar1 * 0x10 + *param_3);
|
|
}
|
|
*plVar11 = (longlong)local_a8;
|
|
plVar11[1] = (longlong)(param_3 + 0xcc);
|
|
puVar4 = puVar5;
|
|
if ((int)plVar14[6] != 0) {
|
|
puVar4 = (undefined8 *)plVar14[5];
|
|
}
|
|
lVar1 = param_3[1];
|
|
local_a8 = (int *)CONCAT44(local_a8._4_4_,(int)plVar14[6]);
|
|
if (lVar1 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14003dec0();
|
|
}
|
|
sVar15 = 0xffffffffffffffff;
|
|
FUN_14008c3d0(param_3,lVar1 + 1,-1);
|
|
if (param_3[1] <= lVar1) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14003dec0();
|
|
}
|
|
if ((ulonglong)param_3[2] < 0x65) {
|
|
plVar11 = param_3 + (lVar1 + 2) * 2;
|
|
}
|
|
else {
|
|
plVar11 = (longlong *)(lVar1 * 0x10 + *param_3);
|
|
}
|
|
*plVar11 = (longlong)local_a8;
|
|
plVar11[1] = (longlong)puVar4;
|
|
*(int *)(param_3 + 0xd6) = (int)plVar14[9];
|
|
iVar18 = (int)param_3[0xd2];
|
|
if (-1 < iVar18) {
|
|
lVar1 = param_3[0xd2];
|
|
FUN_14008c630((longlong)(param_3 + 0xcf),(int)lVar1 + 1,sVar15);
|
|
iVar17 = (int)lVar1 - iVar18;
|
|
if (0 < iVar17) {
|
|
puVar4 = puVar5;
|
|
if ((int)param_3[0xd2] != 0) {
|
|
puVar4 = (undefined8 *)param_3[0xd1];
|
|
}
|
|
sVar15 = (longlong)iVar17 << 3;
|
|
memmove(puVar4 + (longlong)iVar18 + 1,puVar4 + iVar18,sVar15);
|
|
}
|
|
if ((int)param_3[0xd2] != 0) {
|
|
puVar5 = (undefined8 *)param_3[0xd1];
|
|
}
|
|
puVar5[iVar18] = plVar14;
|
|
if ((longlong *)plVar14[2] == (longlong *)0x0) {
|
|
return;
|
|
}
|
|
FUN_14008be50((longlong *)plVar14[2],plVar14,sVar15,param_4);
|
|
return;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14003dec0();
|
|
}
|
|
puVar4 = (undefined8 *)((longlong)puVar4 + 1);
|
|
psVar8 = psVar8 + 0x1c;
|
|
} while ((longlong)puVar4 < 6);
|
|
iVar18 = -1;
|
|
plVar14 = param_3;
|
|
if (*(int *)(param_1 + 0xd8) == 0) {
|
|
*(int *)(param_1 + 0xea) = *(int *)(param_1 + 0xea) + 1;
|
|
local_a8 = (int *)(param_1 + 0x14);
|
|
param_1[0xe0] = 0;
|
|
param_1[0xe1] = 0;
|
|
param_1[0xe2] = 0;
|
|
param_1[0xe3] = 0;
|
|
param_1[0xe4] = 0;
|
|
param_1[0xe5] = 0;
|
|
param_1[0xe6] = 0;
|
|
param_1[0xe7] = 0;
|
|
param_1[0xe8] = 0;
|
|
param_1[0xe9] = 0;
|
|
local_res20 = 0;
|
|
puVar4 = puVar5;
|
|
do {
|
|
if ((local_res20 < 0) || (5 < local_res20)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14003def0(local_res20,in_RDX,plVar14,param_4);
|
|
}
|
|
iVar17 = *local_a8;
|
|
while (0 < iVar17) {
|
|
plVar11 = *(longlong **)(local_a8 + -4);
|
|
if ((int)puVar4 == 0) {
|
|
iVar18 = *(int *)(param_1 + 0xd8);
|
|
if (iVar18 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14003dec0();
|
|
}
|
|
iVar17 = *(int *)(param_1 + 0xd8);
|
|
uVar7 = iVar17 + 1;
|
|
in_RDX = (longlong *)(ulonglong)uVar7;
|
|
FUN_14008c630((longlong)(param_1 + 0xcc),uVar7,(longlong)plVar14);
|
|
iVar17 = iVar17 - iVar18;
|
|
if (0 < iVar17) {
|
|
puVar9 = puVar5;
|
|
if (*(int *)(param_1 + 0xd8) != 0) {
|
|
puVar9 = *(undefined8 **)(param_1 + 0xd4);
|
|
}
|
|
in_RDX = puVar9 + iVar18;
|
|
plVar14 = (longlong *)((longlong)iVar17 << 3);
|
|
memmove(puVar9 + (longlong)iVar18 + 1,in_RDX,(size_t)plVar14);
|
|
}
|
|
puVar9 = puVar5;
|
|
if (*(int *)(param_1 + 0xd8) != 0) {
|
|
puVar9 = *(undefined8 **)(param_1 + 0xd4);
|
|
}
|
|
puVar9[iVar18] = plVar11;
|
|
*(int *)(param_1 + 0xe0) = *(int *)(param_1 + 0xe0) + (int)plVar11[6];
|
|
iVar18 = (int)plVar11[9];
|
|
}
|
|
else {
|
|
if ((DAT_14016f118 <= (int)plVar11[6] + *(int *)(param_1 + 0xe0)) ||
|
|
(iVar18 != (int)plVar11[9])) goto LAB_14008d54d;
|
|
iVar17 = *(int *)(param_1 + 0xd8);
|
|
if (iVar17 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14003dec0();
|
|
}
|
|
iVar13 = *(int *)(param_1 + 0xd8);
|
|
uVar7 = iVar13 + 1;
|
|
in_RDX = (longlong *)(ulonglong)uVar7;
|
|
FUN_14008c630((longlong)(param_1 + 0xcc),uVar7,(longlong)plVar14);
|
|
iVar13 = iVar13 - iVar17;
|
|
if (0 < iVar13) {
|
|
puVar9 = puVar5;
|
|
if (*(int *)(param_1 + 0xd8) != 0) {
|
|
puVar9 = *(undefined8 **)(param_1 + 0xd4);
|
|
}
|
|
in_RDX = puVar9 + iVar17;
|
|
plVar14 = (longlong *)((longlong)iVar13 << 3);
|
|
memmove(puVar9 + (longlong)iVar17 + 1,in_RDX,(size_t)plVar14);
|
|
}
|
|
puVar9 = puVar5;
|
|
if (*(int *)(param_1 + 0xd8) != 0) {
|
|
puVar9 = *(undefined8 **)(param_1 + 0xd4);
|
|
}
|
|
puVar9[iVar17] = plVar11;
|
|
*(int *)(param_1 + 0xe0) = *(int *)(param_1 + 0xe0) + (int)plVar11[6];
|
|
}
|
|
if ((longlong *)plVar11[2] != (longlong *)0x0) {
|
|
FUN_14008be50((longlong *)plVar11[2],plVar11,plVar14,param_4);
|
|
in_RDX = plVar11;
|
|
}
|
|
puVar4 = (undefined8 *)(ulonglong)((int)puVar4 + 1);
|
|
iVar17 = *local_a8;
|
|
}
|
|
local_res20 = local_res20 + 1;
|
|
local_a8 = local_a8 + 0xe;
|
|
} while (local_res20 < 6);
|
|
LAB_14008d54d:
|
|
}
|
|
if (*(int *)(param_1 + 0xe0) < 1) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14003dec0();
|
|
}
|
|
FUN_14008ccf0(param_3,in_RDX,(longlong)plVar14);
|
|
*(undefined4 *)(param_3 + 0xd5) = *(undefined4 *)(param_1 + 0xbc);
|
|
local_a8 = (int *)CONCAT44(local_a8._4_4_,0x10);
|
|
*(short *)((longlong)param_3 + 0x6ac) = param_1[0xbe];
|
|
iVar17 = *(int *)(param_1 + 0xe0) - *(int *)(param_1 + 0xe4);
|
|
if (DAT_14016f118 < *(int *)(param_1 + 0xe0) - *(int *)(param_1 + 0xe4)) {
|
|
iVar17 = DAT_14016f118;
|
|
}
|
|
param_3[0xce] = *(longlong *)(param_1 + 200);
|
|
*(undefined2 *)(param_3 + 0xcc) = 0xabcd;
|
|
*(short *)((longlong)param_3 + 0x662) = param_1[0xc0];
|
|
*(undefined4 *)((longlong)param_3 + 0x664) = *(undefined4 *)(param_1 + 0xe0);
|
|
*(undefined4 *)(param_3 + 0xcd) = *(undefined4 *)(param_1 + 0xea);
|
|
*(undefined4 *)((longlong)param_3 + 0x66c) = *(undefined4 *)(param_1 + 0xe2);
|
|
lVar1 = param_3[1];
|
|
if (-1 < lVar1) {
|
|
lVar10 = lVar1 + 1;
|
|
sVar15 = 0xffffffffffffffff;
|
|
plVar14 = param_3;
|
|
FUN_14008c3d0(param_3,lVar10,-1);
|
|
if (param_3[1] <= lVar1) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14003dec0();
|
|
}
|
|
if ((ulonglong)param_3[2] < 0x65) {
|
|
plVar11 = param_3 + (lVar1 + 2) * 2;
|
|
}
|
|
else {
|
|
plVar11 = (longlong *)(lVar1 * 0x10 + *param_3);
|
|
}
|
|
*plVar11 = (longlong)local_a8;
|
|
plVar11[1] = (longlong)(param_3 + 0xcc);
|
|
*(int *)(param_3 + 0xd6) = iVar18;
|
|
iVar18 = *(int *)(param_1 + 0xe4);
|
|
iVar13 = iVar18;
|
|
while( true ) {
|
|
if (iVar18 + iVar17 <= iVar13) {
|
|
*(int *)(param_1 + 0xe2) = *(int *)(param_1 + 0xe2) + 1;
|
|
if (*(int *)(param_1 + 0xe4) == *(int *)(param_1 + 0xe0)) {
|
|
iVar18 = *(int *)(param_1 + 0xd8);
|
|
puVar4 = puVar5;
|
|
if (*(int *)(param_1 + 0xd8) != 0) {
|
|
puVar4 = *(undefined8 **)(param_1 + 0xd4);
|
|
}
|
|
if (iVar18 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14003dec0();
|
|
}
|
|
if (iVar18 != 0) {
|
|
lVar1 = param_3[0xd2];
|
|
FUN_14008c630((longlong)(param_3 + 0xcf),(int)lVar1 + iVar18,sVar15);
|
|
puVar9 = puVar5;
|
|
if ((int)param_3[0xd2] != 0) {
|
|
puVar9 = (undefined8 *)param_3[0xd1];
|
|
}
|
|
sVar15 = (longlong)iVar18 << 3;
|
|
if (sVar15 < 0x21) {
|
|
puVar9 = puVar9 + (int)lVar1;
|
|
for (uVar16 = (longlong)iVar18 & 0x1fffffffffffffff; uVar16 != 0; uVar16 = uVar16 - 1)
|
|
{
|
|
uVar3 = *puVar4;
|
|
puVar4 = puVar4 + 1;
|
|
*puVar9 = uVar3;
|
|
puVar9 = puVar9 + 1;
|
|
}
|
|
sVar15 = 0;
|
|
}
|
|
else {
|
|
memcpy(puVar9 + (int)lVar1,puVar4,sVar15);
|
|
}
|
|
}
|
|
FUN_14008c630((longlong)(param_1 + 0xcc),0,sVar15);
|
|
}
|
|
lVar1 = param_3[1];
|
|
puVar4 = puVar5;
|
|
puVar9 = puVar5;
|
|
if (0 < lVar1) {
|
|
do {
|
|
if (((longlong)puVar5 < 0) || (lVar1 <= (longlong)puVar5)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14003dec0();
|
|
}
|
|
if ((ulonglong)param_3[2] < 0x65) {
|
|
plVar14 = param_3 + ((longlong)puVar5 + 2) * 2;
|
|
}
|
|
else {
|
|
plVar14 = (longlong *)((longlong)puVar5 * 0x10 + *param_3);
|
|
}
|
|
uVar12 = (int)puVar9 + (int)*plVar14;
|
|
uVar7 = (int)puVar4 + 1;
|
|
puVar5 = (undefined8 *)(longlong)(int)uVar7;
|
|
puVar4 = (undefined8 *)(ulonglong)uVar7;
|
|
puVar9 = (undefined8 *)(ulonglong)uVar12;
|
|
} while ((longlong)puVar5 < lVar1);
|
|
}
|
|
FUN_1400b70e0((longlong)(param_1 + 0xec),uVar12);
|
|
*(undefined8 *)(param_1 + 0x100) = param_2;
|
|
*(double *)(param_1 + 0xf8) = (double)(int)uVar12 + *(double *)(param_1 + 0xf8);
|
|
return;
|
|
}
|
|
iVar13 = *(int *)(param_1 + 0xe8);
|
|
if ((iVar13 < 0) || (*(int *)(param_1 + 0xd8) <= iVar13)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14003def0(plVar14,lVar10,sVar15,param_3);
|
|
}
|
|
lVar1 = *(longlong *)(*(longlong *)(param_1 + 0xd4) + (longlong)iVar13 * 8);
|
|
iVar13 = *(int *)(lVar1 + 0x30) - *(int *)(param_1 + 0xe6);
|
|
iVar6 = (iVar18 - *(int *)(param_1 + 0xe4)) + iVar17;
|
|
if (iVar6 < iVar13) {
|
|
iVar13 = iVar6;
|
|
}
|
|
if (iVar13 < 1) break;
|
|
puVar4 = puVar5;
|
|
if (*(int *)(lVar1 + 0x30) != 0) {
|
|
puVar4 = *(undefined8 **)(lVar1 + 0x28);
|
|
}
|
|
iVar6 = *(int *)(param_1 + 0xe6);
|
|
lVar2 = param_3[1];
|
|
local_a8._4_4_ = (undefined4)((ulonglong)local_a8 >> 0x20);
|
|
local_a8 = (int *)CONCAT44(local_a8._4_4_,iVar13);
|
|
if (lVar2 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14003dec0();
|
|
}
|
|
lVar10 = lVar2 + 1;
|
|
sVar15 = 0xffffffffffffffff;
|
|
plVar14 = param_3;
|
|
FUN_14008c3d0(param_3,lVar10,-1);
|
|
if (param_3[1] <= lVar2) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14003dec0();
|
|
}
|
|
if ((ulonglong)param_3[2] < 0x65) {
|
|
plVar11 = param_3 + (lVar2 + 2) * 2;
|
|
}
|
|
else {
|
|
plVar11 = (longlong *)(lVar2 * 0x10 + *param_3);
|
|
}
|
|
*plVar11 = (longlong)local_a8;
|
|
plVar11[1] = (longlong)iVar6 + (longlong)puVar4;
|
|
*(int *)(param_1 + 0xe6) = *(int *)(param_1 + 0xe6) + iVar13;
|
|
*(int *)(param_1 + 0xe4) = *(int *)(param_1 + 0xe4) + iVar13;
|
|
if (*(int *)(param_1 + 0xe6) == *(int *)(lVar1 + 0x30)) {
|
|
*(int *)(param_1 + 0xe8) = *(int *)(param_1 + 0xe8) + 1;
|
|
param_1[0xe6] = 0;
|
|
param_1[0xe7] = 0;
|
|
}
|
|
iVar13 = *(int *)(param_1 + 0xe4);
|
|
}
|
|
FUN_14008cb70(param_1);
|
|
FUN_14003db10(local_98,L"Unexpected at PacketQueue Pop!",sVar15,param_3);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_98,(ThrowInfo *)&DAT_14016c210);
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14003dec0();
|
|
}
|
|
|