245 lines
7.8 KiB
C
245 lines
7.8 KiB
C
/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469
|
|
* Ghidra 12.1.2 decompiler output for 0x1400b0090 FUN_1400b0090
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b0130) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b0134) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b0150) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b015e) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b0156) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b0165) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400b017d) */
|
|
|
|
void FUN_1400b0090(longlong param_1,undefined **param_2,ulonglong param_3,undefined8 param_4)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
int *piVar3;
|
|
undefined8 *puVar4;
|
|
undefined *puVar5;
|
|
int *piVar6;
|
|
longlong lVar7;
|
|
undefined ***pppuVar8;
|
|
longlong *plVar9;
|
|
undefined8 uVar10;
|
|
undefined8 *puVar11;
|
|
int iVar12;
|
|
undefined8 *puVar13;
|
|
ulonglong uVar14;
|
|
uint uVar15;
|
|
longlong lVar16;
|
|
longlong lVar17;
|
|
longlong lVar18;
|
|
longlong lVar19;
|
|
int local_res10;
|
|
longlong *local_res18;
|
|
longlong local_res20;
|
|
undefined **local_b8;
|
|
longlong *local_b0;
|
|
longlong *local_a8;
|
|
undefined8 local_a0;
|
|
undefined8 local_98;
|
|
undefined *local_90;
|
|
int *local_88;
|
|
undefined1 local_80;
|
|
int *local_78;
|
|
undefined1 local_70;
|
|
int *local_68;
|
|
undefined1 local_60;
|
|
undefined8 local_58;
|
|
undefined8 *local_50;
|
|
|
|
local_58 = 0xfffffffffffffffe;
|
|
piVar6 = (int *)(param_1 + 0x10);
|
|
local_88 = piVar6;
|
|
FUN_14002e6e0(piVar6);
|
|
local_80 = 1;
|
|
local_b8 = Proud::CFastArray<Proud::StringT<char,Proud::AnsiStrTraits>,0>::vftable;
|
|
local_b0 = (longlong *)0x0;
|
|
local_a8 = (longlong *)0x0;
|
|
local_a0 = 0;
|
|
local_98 = 0;
|
|
pppuVar8 = &local_b8;
|
|
FUN_1400346e0((longlong)pppuVar8,param_2,param_3,param_4);
|
|
if ((uint)local_a0 == 0) {
|
|
FUN_140030200(pppuVar8,param_2,param_3,param_4);
|
|
puVar5 = PTR_DAT_140155008;
|
|
local_90 = PTR_DAT_140155008;
|
|
lVar17 = (longlong)(int)(uint)local_a0;
|
|
if ((int)(uint)local_a0 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14002f590();
|
|
}
|
|
FUN_140033940((longlong)&local_b8,(uint)local_a0 + 1,param_3,param_4);
|
|
plVar9 = local_a8;
|
|
if ((uint)local_a0 == 0) {
|
|
plVar9 = (longlong *)0x0;
|
|
}
|
|
plVar9 = plVar9 + lVar17;
|
|
param_2 = &local_90;
|
|
FUN_14001bf80(plVar9,(longlong *)param_2,param_3,param_4);
|
|
if (((puVar5 != (undefined *)0x0) && (puVar5 != PTR_DAT_140155008)) &&
|
|
(puVar5 + -8 != (undefined *)0x0)) {
|
|
piVar3 = (int *)FUN_140030200(plVar9,param_2,param_3,param_4);
|
|
local_78 = piVar3;
|
|
FUN_14002e6e0(piVar3);
|
|
local_70 = 1;
|
|
piVar1 = (int *)(puVar5 + -4);
|
|
*piVar1 = *piVar1 + -1;
|
|
if (*piVar1 == 0) {
|
|
FUN_1400302f0(puVar5 + -8);
|
|
}
|
|
FUN_14002e770((longlong)piVar3);
|
|
local_70 = 0;
|
|
}
|
|
local_90 = PTR_DAT_140155008;
|
|
}
|
|
local_res10 = 0;
|
|
local_res20 = 0;
|
|
uVar15 = (uint)local_a0;
|
|
if (0 < (int)(uint)local_a0) {
|
|
do {
|
|
puVar11 = (undefined8 *)0x0;
|
|
uVar10 = 0x100;
|
|
puVar4 = operator_new(0x100);
|
|
puVar13 = puVar11;
|
|
local_50 = puVar4;
|
|
if (puVar4 != (undefined8 *)0x0) {
|
|
*puVar4 = Proud::CSsdpContext::vftable;
|
|
FUN_140030200(uVar10,param_2,param_3,param_4);
|
|
puVar4[1] = PTR_DAT_140155008;
|
|
puVar4[2] = 0;
|
|
puVar4[5] = 0;
|
|
puVar4[6] = 0;
|
|
puVar4[7] = 0;
|
|
puVar4[8] = 0;
|
|
puVar4[4] = Proud::ByteArray::vftable;
|
|
*(undefined1 *)(puVar4 + 0x10) = 0;
|
|
*(undefined1 *)(puVar4 + 0x18) = 0;
|
|
puVar4[0x19] = 0;
|
|
puVar4[3] = 0;
|
|
puVar13 = puVar4;
|
|
}
|
|
if (puVar13 == (undefined8 *)0x0) {
|
|
local_res18 = (longlong *)0x0;
|
|
}
|
|
else {
|
|
uVar10 = 0x10;
|
|
local_res18 = (longlong *)FUN_140030280(0x10);
|
|
local_res18[1] = 1;
|
|
*local_res18 = (longlong)puVar13;
|
|
}
|
|
plVar9 = local_a8;
|
|
if ((local_res20 < 0) || ((int)(uint)local_a0 <= local_res10)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14002f5c0(uVar10,param_2,param_3,param_4);
|
|
}
|
|
if (local_res18 != (longlong *)0x0) {
|
|
puVar11 = (undefined8 *)*local_res18;
|
|
}
|
|
puVar5 = (undefined *)puVar11[1];
|
|
if ((undefined *)puVar11[1] == (undefined *)0x0) {
|
|
puVar5 = PTR_DAT_140155008;
|
|
}
|
|
puVar11[1] = puVar5;
|
|
if ((undefined *)local_a8[local_res20] != puVar5) {
|
|
piVar6 = (int *)FUN_140030200(uVar10,param_2,param_3,param_4);
|
|
local_68 = piVar6;
|
|
FUN_14002e6e0(piVar6);
|
|
local_60 = 1;
|
|
FUN_14001c020(puVar11 + 1);
|
|
puVar5 = (undefined *)plVar9[local_res20];
|
|
puVar11[1] = puVar5;
|
|
if (((puVar5 != PTR_DAT_140155008) && (puVar5 != (undefined *)0x0)) &&
|
|
(puVar5 != (undefined *)0x8)) {
|
|
*(int *)(puVar5 + -4) = *(int *)(puVar5 + -4) + 1;
|
|
}
|
|
FUN_14002e770((longlong)piVar6);
|
|
local_60 = 0;
|
|
}
|
|
lVar16 = param_1 + 0x100;
|
|
iVar2 = *(int *)(param_1 + 0x118);
|
|
lVar17 = (longlong)iVar2;
|
|
if (iVar2 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14002f590();
|
|
}
|
|
iVar12 = *(int *)(param_1 + 0x118);
|
|
uVar15 = iVar12 + 1;
|
|
param_2 = (undefined **)(ulonglong)uVar15;
|
|
FUN_1400af1c0(lVar16,uVar15);
|
|
iVar12 = iVar12 - iVar2;
|
|
if ((0 < iVar12) && (iVar12 = iVar12 + -1, -1 < iVar12)) {
|
|
lVar18 = (longlong)(iVar12 + iVar2 + 1) << 3;
|
|
lVar19 = (longlong)(iVar12 + iVar2) << 3;
|
|
do {
|
|
lVar7 = FUN_14003d690(lVar16);
|
|
param_2 = (undefined **)(lVar19 + lVar7);
|
|
lVar7 = FUN_14003d690(lVar16);
|
|
FUN_1400ad4b0((longlong *)(lVar18 + lVar7),(longlong *)param_2);
|
|
lVar19 = lVar19 + -8;
|
|
lVar18 = lVar18 + -8;
|
|
iVar12 = iVar12 + -1;
|
|
} while (-1 < iVar12);
|
|
}
|
|
lVar16 = FUN_14003d690(lVar16);
|
|
if (local_res18 != *(longlong **)(lVar16 + lVar17 * 8)) {
|
|
if (local_res18 != (longlong *)0x0) {
|
|
local_res18[1] = local_res18[1] + 1;
|
|
}
|
|
plVar9 = (longlong *)0x0;
|
|
lVar18 = *(longlong *)(lVar16 + lVar17 * 8);
|
|
if ((lVar18 != 0) &&
|
|
(*(longlong *)(*(longlong *)(lVar16 + lVar17 * 8) + 8) = *(longlong *)(lVar18 + 8) + -1,
|
|
*(longlong *)(*(longlong *)(lVar16 + lVar17 * 8) + 8) == 0)) {
|
|
plVar9 = *(longlong **)(lVar16 + lVar17 * 8);
|
|
}
|
|
*(longlong **)(lVar16 + lVar17 * 8) = local_res18;
|
|
if (plVar9 != (longlong *)0x0) {
|
|
if ((undefined8 *)*plVar9 != (undefined8 *)0x0) {
|
|
param_2 = (undefined **)0x1;
|
|
(*(code *)**(undefined8 **)*plVar9)();
|
|
}
|
|
FUN_1400302f0(plVar9);
|
|
}
|
|
}
|
|
if (local_res18 != (longlong *)0x0) {
|
|
plVar9 = local_res18 + 1;
|
|
*plVar9 = *plVar9 + -1;
|
|
if (*plVar9 == 0) {
|
|
if ((undefined8 *)*local_res18 != (undefined8 *)0x0) {
|
|
param_2 = (undefined **)0x1;
|
|
(*(code *)**(undefined8 **)*local_res18)();
|
|
}
|
|
FUN_1400302f0(local_res18);
|
|
}
|
|
}
|
|
local_res10 = local_res10 + 1;
|
|
local_res20 = local_res20 + 1;
|
|
piVar6 = local_88;
|
|
uVar15 = (uint)local_a0;
|
|
} while (local_res10 < (int)(uint)local_a0);
|
|
}
|
|
local_b8 = Proud::CFastArray<Proud::StringT<char,Proud::AnsiStrTraits>,0>::vftable;
|
|
if (0 < (int)uVar15) {
|
|
uVar14 = (ulonglong)uVar15;
|
|
plVar9 = local_a8;
|
|
do {
|
|
FUN_14001c020(plVar9);
|
|
plVar9 = plVar9 + 1;
|
|
uVar14 = uVar14 - 1;
|
|
} while (uVar14 != 0);
|
|
}
|
|
if (local_a8 != (longlong *)0x0) {
|
|
if (local_b0 == (longlong *)0x0) {
|
|
FUN_1400302f0(local_a8);
|
|
}
|
|
else {
|
|
(**(code **)(*local_b0 + 0x18))(local_b0,local_a8);
|
|
}
|
|
}
|
|
FUN_14002e770((longlong)piVar6);
|
|
return;
|
|
}
|
|
|