298 lines
12 KiB
C
298 lines
12 KiB
C
/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469
|
|
* Ghidra 12.1.2 decompiler output for 0x14004f740 FUN_14004f740
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00014004fdd7) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014004fddf) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014004fde3) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014004fded) */
|
|
|
|
void FUN_14004f740(longlong param_1,int param_2,int param_3)
|
|
|
|
{
|
|
double *pdVar1;
|
|
int *piVar2;
|
|
double dVar3;
|
|
int iVar4;
|
|
undefined8 uVar5;
|
|
undefined8 uVar6;
|
|
undefined8 uVar7;
|
|
longlong *plVar8;
|
|
longlong lVar9;
|
|
void *pvVar10;
|
|
ulonglong uVar11;
|
|
int iVar12;
|
|
longlong lVar13;
|
|
ulonglong uVar14;
|
|
int iVar15;
|
|
longlong lVar16;
|
|
longlong lVar17;
|
|
int local_res10 [2];
|
|
int local_res18 [2];
|
|
char *local_res20;
|
|
longlong *local_138;
|
|
void *local_130;
|
|
ulonglong local_128;
|
|
longlong local_120;
|
|
longlong local_118;
|
|
longlong *local_108;
|
|
undefined **local_100 [3];
|
|
undefined **local_e8 [3];
|
|
undefined8 local_d0;
|
|
undefined8 local_c8;
|
|
undefined8 local_c0;
|
|
undefined **local_b8 [3];
|
|
undefined8 local_a0;
|
|
undefined **local_98 [3];
|
|
undefined **local_80 [3];
|
|
undefined8 local_68 [3];
|
|
undefined8 local_50 [3];
|
|
|
|
local_a0 = 0xfffffffffffffffe;
|
|
if (1 < param_2 - param_3) {
|
|
std::_Container_base12::_Container_base12((_Container_base12 *)&local_138);
|
|
local_138 = operator_new(0x10);
|
|
if (local_138 == (longlong *)0x0) {
|
|
local_108 = local_138;
|
|
std::exception::exception((exception *)local_e8,(char **)&local_108);
|
|
local_e8[0] = std::bad_alloc::vftable;
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_e8,(ThrowInfo *)&DAT_140151ad0);
|
|
}
|
|
*local_138 = 0;
|
|
local_138[1] = 0;
|
|
*local_138 = (longlong)&local_138;
|
|
local_130 = (void *)0x0;
|
|
local_128 = 0;
|
|
local_120 = 0;
|
|
local_118 = 0;
|
|
local_res18[0] = param_2 + -1;
|
|
local_res10[0] = param_3;
|
|
FUN_140044460((_Container_base12 *)&local_138,local_res10);
|
|
FUN_140044460((_Container_base12 *)&local_138,local_res18);
|
|
lVar13 = local_118;
|
|
while (lVar16 = 0, uVar11 = local_128, lVar13 != 0) {
|
|
plVar8 = FUN_1400415a0(&local_138,&local_d0);
|
|
plVar8 = FUN_140044550(plVar8,local_68,1);
|
|
lVar17 = lVar16;
|
|
if ((longlong *)*plVar8 != (longlong *)0x0) {
|
|
lVar17 = *(longlong *)*plVar8;
|
|
}
|
|
uVar11 = (ulonglong)plVar8[2] >> 2;
|
|
if (*(ulonglong *)(lVar17 + 0x10) <= uVar11) {
|
|
uVar11 = uVar11 - *(ulonglong *)(lVar17 + 0x10);
|
|
}
|
|
local_res10[0] =
|
|
*(int *)(*(longlong *)(*(longlong *)(lVar17 + 8) + uVar11 * 8) +
|
|
(ulonglong)((uint)plVar8[2] & 3) * 4);
|
|
if ((lVar13 != 0) && (lVar13 = lVar13 + -1, local_118 = lVar13, lVar13 == 0)) {
|
|
local_120 = lVar16;
|
|
}
|
|
plVar8 = FUN_1400415a0(&local_138,local_68);
|
|
plVar8 = FUN_140044550(plVar8,local_50,1);
|
|
lVar17 = lVar16;
|
|
if ((longlong *)*plVar8 != (longlong *)0x0) {
|
|
lVar17 = *(longlong *)*plVar8;
|
|
}
|
|
uVar11 = (ulonglong)plVar8[2] >> 2;
|
|
if (*(ulonglong *)(lVar17 + 0x10) <= uVar11) {
|
|
uVar11 = uVar11 - *(ulonglong *)(lVar17 + 0x10);
|
|
}
|
|
iVar4 = *(int *)(*(longlong *)(*(longlong *)(lVar17 + 8) + uVar11 * 8) +
|
|
(ulonglong)((uint)plVar8[2] & 3) * 4);
|
|
lVar17 = (longlong)iVar4;
|
|
if ((lVar13 != 0) && (lVar13 = lVar13 + -1, local_118 = lVar13, lVar13 == 0)) {
|
|
local_120 = lVar16;
|
|
}
|
|
iVar15 = iVar4 + 1;
|
|
lVar16 = *(longlong *)(param_1 + lVar17 * 0x18);
|
|
local_c8 = *(undefined8 *)(param_1 + 8 + lVar17 * 0x18);
|
|
local_c0 = *(undefined8 *)(param_1 + 0x10 + lVar17 * 0x18);
|
|
if (iVar15 <= local_res10[0]) {
|
|
iVar12 = local_res10[0];
|
|
if ((iVar15 < local_res10[0]) && (lVar13 = local_118, iVar15 <= local_res10[0])) {
|
|
do {
|
|
dVar3 = *(double *)(lVar16 + 0x188);
|
|
while (*(double *)(*(longlong *)(param_1 + (longlong)iVar15 * 0x18) + 0x188) <= dVar3) {
|
|
iVar15 = iVar15 + 1;
|
|
lVar13 = local_118;
|
|
if (iVar12 < iVar15) goto LAB_14004f9c8;
|
|
}
|
|
while( true ) {
|
|
lVar13 = local_118;
|
|
if (iVar12 < iVar15) goto LAB_14004f9c8;
|
|
if (*(double *)(*(longlong *)(param_1 + (longlong)iVar12 * 0x18) + 0x188) < dVar3)
|
|
break;
|
|
iVar12 = iVar12 + -1;
|
|
}
|
|
if (iVar12 < iVar15) break;
|
|
lVar13 = (longlong)iVar12;
|
|
lVar9 = (longlong)iVar15;
|
|
uVar6 = *(undefined8 *)(param_1 + lVar9 * 0x18);
|
|
uVar7 = *(undefined8 *)(param_1 + 8 + lVar9 * 0x18);
|
|
uVar5 = *(undefined8 *)(param_1 + 0x10 + lVar9 * 0x18);
|
|
*(undefined8 *)(param_1 + lVar9 * 0x18) = *(undefined8 *)(param_1 + lVar13 * 0x18);
|
|
*(undefined8 *)(param_1 + 8 + lVar9 * 0x18) =
|
|
*(undefined8 *)(param_1 + 8 + lVar13 * 0x18);
|
|
*(undefined8 *)(param_1 + 0x10 + lVar9 * 0x18) =
|
|
*(undefined8 *)(param_1 + 0x10 + lVar13 * 0x18);
|
|
*(undefined8 *)(param_1 + lVar13 * 0x18) = uVar6;
|
|
*(undefined8 *)(param_1 + 8 + lVar13 * 0x18) = uVar7;
|
|
*(undefined8 *)(param_1 + 0x10 + lVar13 * 0x18) = uVar5;
|
|
lVar13 = local_118;
|
|
} while (iVar15 < iVar12);
|
|
}
|
|
LAB_14004f9c8:
|
|
if (iVar4 <= iVar12) {
|
|
lVar9 = (longlong)iVar12;
|
|
lVar16 = *(longlong *)(param_1 + lVar17 * 0x18);
|
|
dVar3 = *(double *)(lVar16 + 0x188);
|
|
pdVar1 = (double *)(*(longlong *)(param_1 + lVar9 * 0x18) + 0x188);
|
|
if (*pdVar1 <= dVar3 && dVar3 != *pdVar1) {
|
|
uVar6 = *(undefined8 *)(param_1 + 8 + lVar17 * 0x18);
|
|
uVar7 = *(undefined8 *)(param_1 + 0x10 + lVar17 * 0x18);
|
|
*(undefined8 *)(param_1 + lVar17 * 0x18) = *(undefined8 *)(param_1 + lVar9 * 0x18);
|
|
*(undefined8 *)(param_1 + 8 + lVar17 * 0x18) =
|
|
*(undefined8 *)(param_1 + 8 + lVar9 * 0x18);
|
|
*(undefined8 *)(param_1 + 0x10 + lVar17 * 0x18) =
|
|
*(undefined8 *)(param_1 + 0x10 + lVar9 * 0x18);
|
|
*(longlong *)(param_1 + lVar9 * 0x18) = lVar16;
|
|
*(undefined8 *)(param_1 + 8 + lVar9 * 0x18) = uVar6;
|
|
*(undefined8 *)(param_1 + 0x10 + lVar9 * 0x18) = uVar7;
|
|
lVar13 = local_118;
|
|
}
|
|
if (iVar4 < iVar12) {
|
|
std::_Container_base12::_Orphan_all((_Container_base12 *)&local_138);
|
|
if ((((int)local_120 + (int)local_118 & 3U) == 0) && (local_128 <= local_118 + 4U >> 2))
|
|
{
|
|
FUN_1400415c0((longlong)&local_138,1);
|
|
}
|
|
uVar11 = local_118 + local_120;
|
|
uVar14 = uVar11 >> 2;
|
|
if (local_128 <= uVar14) {
|
|
uVar14 = uVar14 - local_128;
|
|
}
|
|
if (*(longlong *)((longlong)local_130 + uVar14 * 8) == 0) {
|
|
pvVar10 = operator_new(0x10);
|
|
if (pvVar10 == (void *)0x0) {
|
|
local_res20 = (char *)0x0;
|
|
std::exception::exception((exception *)local_98,&local_res20);
|
|
local_98[0] = std::bad_alloc::vftable;
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_98,(ThrowInfo *)&DAT_140151ad0);
|
|
}
|
|
*(void **)((longlong)local_130 + uVar14 * 8) = pvVar10;
|
|
}
|
|
piVar2 = (int *)(*(longlong *)((longlong)local_130 + uVar14 * 8) +
|
|
(ulonglong)((uint)uVar11 & 3) * 4);
|
|
if (piVar2 != (int *)0x0) {
|
|
*piVar2 = iVar4;
|
|
}
|
|
local_118 = local_118 + 1;
|
|
std::_Container_base12::_Orphan_all((_Container_base12 *)&local_138);
|
|
if ((((char)local_118 + (char)local_120 & 3U) == 0) &&
|
|
(local_128 <= local_118 + 4U >> 2)) {
|
|
FUN_1400415c0((longlong)&local_138,1);
|
|
}
|
|
uVar11 = local_118 + local_120;
|
|
uVar14 = uVar11 >> 2;
|
|
if (local_128 <= uVar14) {
|
|
uVar14 = uVar14 - local_128;
|
|
}
|
|
if (*(longlong *)((longlong)local_130 + uVar14 * 8) == 0) {
|
|
local_res20 = operator_new(0x10);
|
|
if (local_res20 == (char *)0x0) {
|
|
std::exception::exception((exception *)local_80,&local_res20);
|
|
local_80[0] = std::bad_alloc::vftable;
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_80,(ThrowInfo *)&DAT_140151ad0);
|
|
}
|
|
*(char **)((longlong)local_130 + uVar14 * 8) = local_res20;
|
|
}
|
|
piVar2 = (int *)(*(longlong *)((longlong)local_130 + uVar14 * 8) +
|
|
(ulonglong)((uint)uVar11 & 3) * 4);
|
|
if (piVar2 != (int *)0x0) {
|
|
*piVar2 = iVar12 + -1;
|
|
}
|
|
lVar13 = local_118 + 1;
|
|
local_118 = lVar13;
|
|
}
|
|
}
|
|
iVar4 = local_res10[0];
|
|
if (iVar12 < local_res10[0]) {
|
|
std::_Container_base12::_Orphan_all((_Container_base12 *)&local_138);
|
|
if ((((int)local_120 + (int)local_118 & 3U) == 0) && (local_128 <= local_118 + 4U >> 2)) {
|
|
FUN_1400415c0((longlong)&local_138,1);
|
|
}
|
|
uVar11 = local_118 + local_120;
|
|
uVar14 = uVar11 >> 2;
|
|
if (local_128 <= uVar14) {
|
|
uVar14 = uVar14 - local_128;
|
|
}
|
|
if (*(longlong *)((longlong)local_130 + uVar14 * 8) == 0) {
|
|
pvVar10 = operator_new(0x10);
|
|
if (pvVar10 == (void *)0x0) {
|
|
local_res20 = (char *)0x0;
|
|
std::exception::exception((exception *)local_b8,&local_res20);
|
|
local_b8[0] = std::bad_alloc::vftable;
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_b8,(ThrowInfo *)&DAT_140151ad0);
|
|
}
|
|
*(void **)((longlong)local_130 + uVar14 * 8) = pvVar10;
|
|
}
|
|
piVar2 = (int *)(*(longlong *)((longlong)local_130 + uVar14 * 8) +
|
|
(ulonglong)((uint)uVar11 & 3) * 4);
|
|
if (piVar2 != (int *)0x0) {
|
|
*piVar2 = iVar12 + 1;
|
|
}
|
|
local_118 = local_118 + 1;
|
|
std::_Container_base12::_Orphan_all((_Container_base12 *)&local_138);
|
|
if ((((char)local_118 + (char)local_120 & 3U) == 0) && (local_128 <= local_118 + 4U >> 2))
|
|
{
|
|
FUN_1400415c0((longlong)&local_138,1);
|
|
}
|
|
uVar11 = local_118 + local_120;
|
|
uVar14 = uVar11 >> 2;
|
|
if (local_128 <= uVar14) {
|
|
uVar14 = uVar14 - local_128;
|
|
}
|
|
if (*(longlong *)((longlong)local_130 + uVar14 * 8) == 0) {
|
|
pvVar10 = operator_new(0x10);
|
|
if (pvVar10 == (void *)0x0) {
|
|
local_res20 = (char *)0x0;
|
|
std::exception::exception((exception *)local_100,&local_res20);
|
|
local_100[0] = std::bad_alloc::vftable;
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_100,(ThrowInfo *)&DAT_140151ad0);
|
|
}
|
|
*(void **)((longlong)local_130 + uVar14 * 8) = pvVar10;
|
|
}
|
|
piVar2 = (int *)(*(longlong *)((longlong)local_130 + uVar14 * 8) +
|
|
(ulonglong)((uint)uVar11 & 3) * 4);
|
|
if (piVar2 != (int *)0x0) {
|
|
*piVar2 = iVar4;
|
|
}
|
|
lVar13 = local_118 + 1;
|
|
local_118 = lVar13;
|
|
}
|
|
}
|
|
}
|
|
while (uVar11 != 0) {
|
|
uVar11 = uVar11 - 1;
|
|
if (*(longlong *)((longlong)local_130 + uVar11 * 8) != 0) {
|
|
operator_delete(*(void **)((longlong)local_130 + uVar11 * 8));
|
|
}
|
|
}
|
|
if (local_130 != (void *)0x0) {
|
|
operator_delete(local_130);
|
|
}
|
|
local_128 = 0;
|
|
local_130 = (void *)0x0;
|
|
std::_Container_base12::_Orphan_all((_Container_base12 *)&local_138);
|
|
operator_delete(local_138);
|
|
local_138 = (longlong *)0x0;
|
|
std::_Container_base12::~_Container_base12((_Container_base12 *)&local_138);
|
|
}
|
|
return;
|
|
}
|
|
|