359 lines
15 KiB
C
359 lines
15 KiB
C
/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
|
|
* Ghidra 12.1.2 decompiler output for 0x1400e7bec FUN_1400e7bec
|
|
* Pseudocode, not original source. */
|
|
|
|
ulonglong FUN_1400e7bec(longlong *param_1,uint param_2)
|
|
|
|
{
|
|
byte bVar1;
|
|
int iVar2;
|
|
undefined8 *puVar3;
|
|
int *piVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
int iVar7;
|
|
undefined8 *puVar8;
|
|
undefined1 uVar9;
|
|
ulonglong uVar10;
|
|
ulonglong uVar11;
|
|
uint uVar12;
|
|
|
|
if (((param_1 == (longlong *)0x0) ||
|
|
(puVar3 = (undefined8 *)param_1[5], puVar3 == (undefined8 *)0x0)) || (4 < param_2)) {
|
|
return 0xfffffffe;
|
|
}
|
|
if (((param_1[2] == 0) || ((*param_1 == 0 && ((int)param_1[1] != 0)))) ||
|
|
((*(int *)(puVar3 + 1) == 0x29a && (param_2 != 4)))) {
|
|
param_1[4] = (longlong)"stream error";
|
|
return 0xfffffffe;
|
|
}
|
|
if ((int)param_1[3] == 0) {
|
|
param_1[4] = (longlong)"buffer error";
|
|
return 0xfffffffb;
|
|
}
|
|
iVar7 = *(int *)(puVar3 + 8);
|
|
uVar12 = 1;
|
|
*puVar3 = param_1;
|
|
*(uint *)(puVar3 + 8) = param_2;
|
|
if (*(int *)(puVar3 + 1) == 0x2a) {
|
|
if (*(int *)((longlong)puVar3 + 0x2c) == 2) {
|
|
uVar5 = FUN_1400eb028(0,(uint *)0x0,0);
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar5;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = 0x1f;
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = 0x8b;
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = 8;
|
|
piVar4 = (int *)puVar3[6];
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
if (piVar4 == (int *)0x0) {
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = 0;
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = 0;
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = 0;
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = 0;
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = 0;
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
if (*(int *)((longlong)puVar3 + 0xac) == 9) {
|
|
uVar9 = 2;
|
|
}
|
|
else if ((1 < *(int *)(puVar3 + 0x16)) || (uVar9 = 0, *(int *)((longlong)puVar3 + 0xac) < 2)
|
|
) {
|
|
uVar9 = 4;
|
|
}
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = uVar9;
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = 0xb;
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined4 *)(puVar3 + 1) = 0x71;
|
|
}
|
|
else {
|
|
*(byte *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) =
|
|
(-(*(longlong *)(piVar4 + 0xc) != 0) & 0x10U) + (-(piVar4[0xf] != 0) & 2U) +
|
|
(-(*(longlong *)(piVar4 + 8) != 0) & 8U) + (-(*(longlong *)(piVar4 + 4) != 0) & 4U) +
|
|
(*piVar4 != 0);
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) =
|
|
*(undefined1 *)(puVar3[6] + 4);
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) =
|
|
*(undefined1 *)(puVar3[6] + 5);
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) =
|
|
*(undefined1 *)(puVar3[6] + 6);
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) =
|
|
*(undefined1 *)(puVar3[6] + 7);
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
if (*(int *)((longlong)puVar3 + 0xac) == 9) {
|
|
uVar9 = 2;
|
|
}
|
|
else if ((1 < *(int *)(puVar3 + 0x16)) || (uVar9 = 0, *(int *)((longlong)puVar3 + 0xac) < 2)
|
|
) {
|
|
uVar9 = 4;
|
|
}
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = uVar9;
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) =
|
|
*(undefined1 *)(puVar3[6] + 0xc);
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
uVar5 = *(uint *)(puVar3 + 5);
|
|
if (*(longlong *)(puVar3[6] + 0x10) != 0) {
|
|
*(undefined1 *)((ulonglong)uVar5 + puVar3[2]) = *(undefined1 *)(puVar3[6] + 0x18);
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) =
|
|
*(undefined1 *)(puVar3[6] + 0x19);
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
uVar5 = *(uint *)(puVar3 + 5);
|
|
}
|
|
if (*(int *)(puVar3[6] + 0x3c) != 0) {
|
|
uVar5 = FUN_1400eb028(*(uint *)((longlong)param_1 + 0x4c),(uint *)puVar3[2],uVar5);
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar5;
|
|
}
|
|
*(undefined4 *)(puVar3 + 7) = 0;
|
|
*(undefined4 *)(puVar3 + 1) = 0x45;
|
|
}
|
|
}
|
|
else {
|
|
uVar5 = 0;
|
|
if (((*(int *)(puVar3 + 0x16) < 2) && (iVar2 = *(int *)((longlong)puVar3 + 0xac), 1 < iVar2))
|
|
&& (uVar5 = uVar12, 5 < iVar2)) {
|
|
uVar5 = (iVar2 != 6) + 2;
|
|
}
|
|
uVar5 = (*(int *)(puVar3 + 9) + -8) * 0x1000 + 0x800U | uVar5 << 6;
|
|
if (*(int *)((longlong)puVar3 + 0x94) != 0) {
|
|
uVar5 = uVar5 | 0x20;
|
|
}
|
|
*(undefined4 *)(puVar3 + 1) = 0x71;
|
|
puVar8 = puVar3;
|
|
FUN_1400e7b3c((longlong)puVar3,(uVar5 / 0x1f + 1) * 0x1f);
|
|
if (*(int *)((longlong)puVar3 + 0x94) != 0) {
|
|
FUN_1400e7b3c((longlong)puVar8,(uint)*(ushort *)((longlong)param_1 + 0x4e));
|
|
FUN_1400e7b3c((longlong)puVar8,(uint)*(ushort *)((longlong)param_1 + 0x4c));
|
|
}
|
|
uVar5 = FUN_1400ea49c(0,(byte *)0x0,0);
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar5;
|
|
}
|
|
}
|
|
if (*(int *)(puVar3 + 1) == 0x45) {
|
|
if (*(longlong *)(puVar3[6] + 0x10) != 0) {
|
|
uVar5 = *(uint *)(puVar3 + 5);
|
|
if (*(uint *)(puVar3 + 7) < (uint)*(ushort *)(puVar3[6] + 0x18)) {
|
|
do {
|
|
uVar6 = *(uint *)(puVar3 + 5);
|
|
if (uVar6 == *(uint *)(puVar3 + 3)) {
|
|
if ((*(int *)(puVar3[6] + 0x3c) != 0) && (uVar5 < uVar6)) {
|
|
uVar5 = FUN_1400eb028(*(uint *)((longlong)param_1 + 0x4c),
|
|
(uint *)((ulonglong)uVar5 + puVar3[2]),uVar6 - uVar5);
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar5;
|
|
}
|
|
FUN_1400e7b6c((longlong)param_1);
|
|
uVar5 = *(uint *)(puVar3 + 5);
|
|
uVar6 = uVar5;
|
|
if (uVar5 == *(uint *)(puVar3 + 3)) break;
|
|
}
|
|
*(undefined1 *)((ulonglong)uVar6 + puVar3[2]) =
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 7) + *(longlong *)(puVar3[6] + 0x10));
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(int *)(puVar3 + 7) = *(int *)(puVar3 + 7) + 1;
|
|
} while (*(uint *)(puVar3 + 7) < (uint)*(ushort *)(puVar3[6] + 0x18));
|
|
}
|
|
if ((*(int *)(puVar3[6] + 0x3c) != 0) && (uVar5 < *(uint *)(puVar3 + 5))) {
|
|
uVar5 = FUN_1400eb028(*(uint *)((longlong)param_1 + 0x4c),
|
|
(uint *)((ulonglong)uVar5 + puVar3[2]),*(uint *)(puVar3 + 5) - uVar5);
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar5;
|
|
}
|
|
if (*(int *)(puVar3 + 7) != *(int *)(puVar3[6] + 0x18)) goto LAB_1400e8030;
|
|
*(undefined4 *)(puVar3 + 7) = 0;
|
|
}
|
|
*(undefined4 *)(puVar3 + 1) = 0x49;
|
|
}
|
|
LAB_1400e8030:
|
|
if (*(int *)(puVar3 + 1) == 0x49) {
|
|
if (*(longlong *)(puVar3[6] + 0x20) != 0) {
|
|
uVar10 = (ulonglong)*(uint *)(puVar3 + 5);
|
|
do {
|
|
uVar5 = *(uint *)(puVar3 + 5);
|
|
uVar11 = (ulonglong)uVar5;
|
|
if (uVar5 == *(uint *)(puVar3 + 3)) {
|
|
if ((*(int *)(puVar3[6] + 0x3c) != 0) && ((uint)uVar10 < uVar5)) {
|
|
uVar5 = FUN_1400eb028(*(uint *)((longlong)param_1 + 0x4c),(uint *)(uVar10 + puVar3[2]),
|
|
uVar5 - (uint)uVar10);
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar5;
|
|
}
|
|
FUN_1400e7b6c((longlong)param_1);
|
|
uVar10 = (ulonglong)*(uint *)(puVar3 + 5);
|
|
uVar11 = uVar10;
|
|
uVar5 = uVar12;
|
|
if (*(uint *)(puVar3 + 5) == *(uint *)(puVar3 + 3)) break;
|
|
}
|
|
bVar1 = *(byte *)(*(longlong *)(puVar3[6] + 0x20) + (ulonglong)*(uint *)(puVar3 + 7));
|
|
*(uint *)(puVar3 + 7) = *(uint *)(puVar3 + 7) + 1;
|
|
*(byte *)(uVar11 + puVar3[2]) = bVar1;
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
uVar5 = (uint)bVar1;
|
|
} while (bVar1 != 0);
|
|
if (*(int *)(puVar3[6] + 0x3c) != 0) {
|
|
if ((uint)uVar10 < *(uint *)(puVar3 + 5)) {
|
|
uVar6 = FUN_1400eb028(*(uint *)((longlong)param_1 + 0x4c),(uint *)(uVar10 + puVar3[2]),
|
|
*(uint *)(puVar3 + 5) - (uint)uVar10);
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar6;
|
|
}
|
|
}
|
|
if (uVar5 != 0) goto LAB_1400e80ee;
|
|
*(undefined4 *)(puVar3 + 7) = 0;
|
|
}
|
|
*(undefined4 *)(puVar3 + 1) = 0x5b;
|
|
}
|
|
LAB_1400e80ee:
|
|
if (*(int *)(puVar3 + 1) == 0x5b) {
|
|
if (*(longlong *)(puVar3[6] + 0x30) != 0) {
|
|
uVar10 = (ulonglong)*(uint *)(puVar3 + 5);
|
|
do {
|
|
uVar5 = *(uint *)(puVar3 + 5);
|
|
uVar11 = (ulonglong)uVar5;
|
|
if (uVar5 == *(uint *)(puVar3 + 3)) {
|
|
if ((*(int *)(puVar3[6] + 0x3c) != 0) && ((uint)uVar10 < uVar5)) {
|
|
uVar5 = FUN_1400eb028(*(uint *)((longlong)param_1 + 0x4c),(uint *)(uVar10 + puVar3[2]),
|
|
uVar5 - (uint)uVar10);
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar5;
|
|
}
|
|
FUN_1400e7b6c((longlong)param_1);
|
|
uVar10 = (ulonglong)*(uint *)(puVar3 + 5);
|
|
uVar11 = uVar10;
|
|
uVar5 = uVar12;
|
|
if (*(uint *)(puVar3 + 5) == *(uint *)(puVar3 + 3)) break;
|
|
}
|
|
bVar1 = *(byte *)(*(longlong *)(puVar3[6] + 0x30) + (ulonglong)*(uint *)(puVar3 + 7));
|
|
*(uint *)(puVar3 + 7) = *(uint *)(puVar3 + 7) + 1;
|
|
*(byte *)(uVar11 + puVar3[2]) = bVar1;
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
uVar5 = (uint)bVar1;
|
|
} while (bVar1 != 0);
|
|
if (*(int *)(puVar3[6] + 0x3c) != 0) {
|
|
if ((uint)uVar10 < *(uint *)(puVar3 + 5)) {
|
|
uVar12 = FUN_1400eb028(*(uint *)((longlong)param_1 + 0x4c),(uint *)(uVar10 + puVar3[2]),
|
|
*(uint *)(puVar3 + 5) - (uint)uVar10);
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar12;
|
|
}
|
|
}
|
|
if (uVar5 != 0) goto LAB_1400e81a9;
|
|
}
|
|
*(undefined4 *)(puVar3 + 1) = 0x67;
|
|
}
|
|
LAB_1400e81a9:
|
|
if (*(int *)(puVar3 + 1) == 0x67) {
|
|
if (*(int *)(puVar3[6] + 0x3c) != 0) {
|
|
if (*(uint *)(puVar3 + 3) < *(int *)(puVar3 + 5) + 2U) {
|
|
FUN_1400e7b6c((longlong)param_1);
|
|
}
|
|
if (*(uint *)(puVar3 + 3) < *(uint *)(puVar3 + 5) + 2) goto LAB_1400e820d;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) =
|
|
*(undefined1 *)((longlong)param_1 + 0x4c);
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) =
|
|
*(undefined1 *)((longlong)param_1 + 0x4d);
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
uVar12 = FUN_1400eb028(0,(uint *)0x0,0);
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar12;
|
|
}
|
|
*(undefined4 *)(puVar3 + 1) = 0x71;
|
|
}
|
|
LAB_1400e820d:
|
|
if (*(int *)(puVar3 + 5) == 0) {
|
|
if ((((int)param_1[1] == 0) && ((int)param_2 <= iVar7)) && (param_2 != 4)) goto LAB_1400e8239;
|
|
LAB_1400e8249:
|
|
if (*(int *)(puVar3 + 1) == 0x29a) {
|
|
if ((int)param_1[1] != 0) {
|
|
LAB_1400e8239:
|
|
param_1[4] = (longlong)"buffer error";
|
|
return 0xfffffffb;
|
|
}
|
|
LAB_1400e8261:
|
|
if ((*(int *)((longlong)puVar3 + 0x9c) != 0) ||
|
|
((param_2 != 0 && (*(int *)(puVar3 + 1) != 0x29a)))) goto LAB_1400e827b;
|
|
}
|
|
else {
|
|
if ((int)param_1[1] == 0) goto LAB_1400e8261;
|
|
LAB_1400e827b:
|
|
iVar7 = (*(code *)(&PTR_FUN_14012b718)[(longlong)*(int *)((longlong)puVar3 + 0xac) * 2])
|
|
(puVar3);
|
|
if ((iVar7 == 2) || (iVar7 == 3)) {
|
|
*(undefined4 *)(puVar3 + 1) = 0x29a;
|
|
}
|
|
if ((iVar7 == 0) || (iVar7 == 2)) {
|
|
if ((int)param_1[3] != 0) {
|
|
return 0;
|
|
}
|
|
goto LAB_1400e821f;
|
|
}
|
|
if (iVar7 == 1) {
|
|
if (param_2 == 1) {
|
|
FUN_1400ec818((longlong)puVar3);
|
|
}
|
|
else {
|
|
FUN_1400ec778((longlong)puVar3,(undefined1 *)0x0,0,0);
|
|
if (param_2 == 3) {
|
|
*(undefined2 *)(puVar3[0xd] + (ulonglong)(*(int *)((longlong)puVar3 + 0x74) - 1) * 2) =
|
|
0;
|
|
memset((void *)puVar3[0xd],0,(ulonglong)(*(int *)((longlong)puVar3 + 0x74) - 1) * 2);
|
|
}
|
|
}
|
|
FUN_1400e7b6c((longlong)param_1);
|
|
if ((int)param_1[3] == 0) goto LAB_1400e821f;
|
|
}
|
|
}
|
|
if (param_2 == 4) {
|
|
if (0 < *(int *)((longlong)puVar3 + 0x2c)) {
|
|
if (*(int *)((longlong)puVar3 + 0x2c) == 2) {
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) =
|
|
*(undefined1 *)((longlong)param_1 + 0x4c);
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) =
|
|
*(undefined1 *)((longlong)param_1 + 0x4d);
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) =
|
|
*(undefined1 *)((longlong)param_1 + 0x4e);
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) =
|
|
*(undefined1 *)((longlong)param_1 + 0x4f);
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) =
|
|
*(undefined1 *)((longlong)param_1 + 0xc);
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) =
|
|
*(undefined1 *)((longlong)param_1 + 0xd);
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) =
|
|
*(undefined1 *)((longlong)param_1 + 0xe);
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) =
|
|
*(undefined1 *)((longlong)param_1 + 0xf);
|
|
*(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1;
|
|
}
|
|
else {
|
|
puVar8 = puVar3;
|
|
FUN_1400e7b3c((longlong)puVar3,(uint)*(ushort *)((longlong)param_1 + 0x4e));
|
|
FUN_1400e7b3c((longlong)puVar8,(uint)*(ushort *)((longlong)param_1 + 0x4c));
|
|
}
|
|
FUN_1400e7b6c((longlong)param_1);
|
|
if (0 < *(int *)((longlong)puVar3 + 0x2c)) {
|
|
*(int *)((longlong)puVar3 + 0x2c) = -*(int *)((longlong)puVar3 + 0x2c);
|
|
}
|
|
return (ulonglong)(*(int *)(puVar3 + 5) == 0);
|
|
}
|
|
return 1;
|
|
}
|
|
}
|
|
else {
|
|
FUN_1400e7b6c((longlong)param_1);
|
|
if ((int)param_1[3] != 0) goto LAB_1400e8249;
|
|
LAB_1400e821f:
|
|
*(undefined4 *)(puVar3 + 8) = 0xffffffff;
|
|
}
|
|
return 0;
|
|
}
|
|
|