108 lines
3.3 KiB
C
108 lines
3.3 KiB
C
/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469
|
|
* Ghidra 12.1.2 decompiler output for 0x14001b020 FUN_14001b020
|
|
* Pseudocode, not original source. */
|
|
|
|
uint * FUN_14001b020(uint *param_1,ulonglong *param_2,undefined8 param_3,undefined8 param_4)
|
|
|
|
{
|
|
void *_Src;
|
|
void *_Dst;
|
|
uint *puVar1;
|
|
code *pcVar2;
|
|
uint uVar3;
|
|
uint *puVar4;
|
|
ulonglong uVar5;
|
|
ulonglong uVar6;
|
|
int iVar7;
|
|
undefined8 uVar8;
|
|
uint uVar9;
|
|
uint local_res10 [2];
|
|
uint local_res18 [4];
|
|
|
|
puVar4 = local_res10;
|
|
uVar8 = 4;
|
|
FUN_140080600(param_1,(undefined8 *)puVar4,4);
|
|
uVar3 = local_res10[0];
|
|
if (((int)local_res10[0] < 0) || (DAT_140155140 <= (int)local_res10[0])) {
|
|
FUN_14009d5d0(local_res10[0],puVar4,uVar8,param_4);
|
|
}
|
|
FUN_14000b0f0((longlong *)param_2,(longlong)(int)uVar3);
|
|
_Src = (void *)param_2[1];
|
|
_Dst = (void *)*param_2;
|
|
if (((longlong)_Src - (longlong)_Dst >> 2 != 0) && (_Dst != _Src)) {
|
|
memmove(_Dst,_Src,0);
|
|
param_2[1] = (ulonglong)_Dst;
|
|
}
|
|
iVar7 = 0;
|
|
uVar9 = local_res10[0];
|
|
if (0 < (int)uVar3) {
|
|
do {
|
|
uVar8 = FUN_140080600(param_1,(undefined8 *)local_res18,4);
|
|
puVar4 = (uint *)param_2[1];
|
|
if ((char)uVar8 != '\0') {
|
|
uVar9 = local_res18[0];
|
|
}
|
|
if ((local_res10 < puVar4) && (puVar1 = (uint *)*param_2, puVar1 <= local_res10)) {
|
|
if (puVar4 == (uint *)param_2[2]) {
|
|
uVar5 = (longlong)puVar4 - (longlong)puVar1 >> 2;
|
|
if (0x3ffffffffffffffe < uVar5) {
|
|
std::_Xlength_error("vector<T> too long");
|
|
pcVar2 = (code *)swi(3);
|
|
puVar4 = (uint *)(*pcVar2)();
|
|
return puVar4;
|
|
}
|
|
uVar5 = uVar5 + 1;
|
|
uVar6 = (longlong)param_2[2] - (longlong)puVar1 >> 2;
|
|
if (uVar6 < uVar5) {
|
|
if (0x3fffffffffffffff - (uVar6 >> 1) < uVar6) {
|
|
uVar6 = 0;
|
|
}
|
|
else {
|
|
uVar6 = uVar6 + (uVar6 >> 1);
|
|
}
|
|
if (uVar6 < uVar5) {
|
|
uVar6 = uVar5;
|
|
}
|
|
FUN_14000b0f0((longlong *)param_2,uVar6);
|
|
}
|
|
}
|
|
if ((undefined4 *)param_2[1] != (undefined4 *)0x0) {
|
|
*(undefined4 *)param_2[1] =
|
|
*(undefined4 *)(*param_2 + ((longlong)local_res10 - (longlong)puVar1 >> 2) * 4);
|
|
}
|
|
}
|
|
else {
|
|
if (puVar4 == (uint *)param_2[2]) {
|
|
uVar5 = (longlong)((longlong)puVar4 - *param_2) >> 2;
|
|
if (0x3ffffffffffffffe < uVar5) {
|
|
std::_Xlength_error("vector<T> too long");
|
|
pcVar2 = (code *)swi(3);
|
|
puVar4 = (uint *)(*pcVar2)();
|
|
return puVar4;
|
|
}
|
|
uVar5 = uVar5 + 1;
|
|
uVar6 = (longlong)((longlong)param_2[2] - *param_2) >> 2;
|
|
if (uVar6 < uVar5) {
|
|
if (0x3fffffffffffffff - (uVar6 >> 1) < uVar6) {
|
|
uVar6 = 0;
|
|
}
|
|
else {
|
|
uVar6 = uVar6 + (uVar6 >> 1);
|
|
}
|
|
if (uVar6 < uVar5) {
|
|
uVar6 = uVar5;
|
|
}
|
|
FUN_14000b0f0((longlong *)param_2,uVar6);
|
|
}
|
|
}
|
|
if ((uint *)param_2[1] != (uint *)0x0) {
|
|
*(uint *)param_2[1] = uVar9;
|
|
}
|
|
}
|
|
param_2[1] = param_2[1] + 4;
|
|
iVar7 = iVar7 + 1;
|
|
} while (iVar7 < (int)uVar3);
|
|
}
|
|
return param_1;
|
|
}
|
|
|