183 lines
8.1 KiB
C
183 lines
8.1 KiB
C
/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
|
|
* Ghidra 12.1.2 decompiler output for 0x1400ebd18 FUN_1400ebd18
|
|
* Pseudocode, not original source. */
|
|
|
|
void FUN_1400ebd18(longlong param_1,longlong param_2,longlong param_3)
|
|
|
|
{
|
|
byte bVar1;
|
|
byte bVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
byte bVar5;
|
|
ulonglong uVar6;
|
|
longlong lVar7;
|
|
uint uVar8;
|
|
ulonglong uVar9;
|
|
uint uVar10;
|
|
ushort uVar11;
|
|
ushort uVar12;
|
|
uint uVar13;
|
|
longlong lVar14;
|
|
|
|
uVar9 = 0;
|
|
if (*(int *)(param_1 + 0x16f4) != 0) {
|
|
lVar14 = 0;
|
|
do {
|
|
iVar3 = *(int *)(param_1 + 0x1714);
|
|
uVar12 = *(ushort *)(*(longlong *)(param_1 + 0x16f8) + lVar14);
|
|
lVar14 = lVar14 + 2;
|
|
bVar1 = *(byte *)(uVar9 + *(longlong *)(param_1 + 0x16e8));
|
|
uVar8 = (int)uVar9 + 1;
|
|
uVar9 = (ulonglong)uVar8;
|
|
bVar5 = (byte)iVar3;
|
|
if (uVar12 == 0) {
|
|
lVar7 = (longlong)(int)(uint)bVar1;
|
|
uVar13 = (uint)*(ushort *)(param_2 + 2 + lVar7 * 4);
|
|
if ((int)(0x10 - uVar13) < iVar3) {
|
|
uVar12 = *(ushort *)(param_2 + lVar7 * 4);
|
|
*(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | uVar12 << (bVar5 & 0x1f);
|
|
*(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
|
|
*(undefined1 *)(param_1 + 0x1710);
|
|
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
|
|
*(undefined1 *)(param_1 + 0x1711);
|
|
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
|
|
iVar3 = *(int *)(param_1 + 0x1714) + -0x10 + uVar13;
|
|
*(ushort *)(param_1 + 0x1710) =
|
|
uVar12 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f);
|
|
}
|
|
else {
|
|
*(ushort *)(param_1 + 0x1710) =
|
|
*(ushort *)(param_1 + 0x1710) | *(short *)(param_2 + lVar7 * 4) << (bVar5 & 0x1f);
|
|
iVar3 = iVar3 + uVar13;
|
|
}
|
|
LAB_1400ec088:
|
|
*(int *)(param_1 + 0x1714) = iVar3;
|
|
}
|
|
else {
|
|
bVar2 = (&DAT_14012e1b0)[bVar1];
|
|
uVar13 = bVar2 + 0x101;
|
|
uVar10 = (uint)*(ushort *)(param_2 + 2 + (ulonglong)uVar13 * 4);
|
|
if ((int)(0x10 - uVar10) < iVar3) {
|
|
uVar11 = *(ushort *)(param_2 + (ulonglong)uVar13 * 4);
|
|
*(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | uVar11 << (bVar5 & 0x1f);
|
|
*(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
|
|
*(undefined1 *)(param_1 + 0x1710);
|
|
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
|
|
*(undefined1 *)(param_1 + 0x1711);
|
|
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
|
|
iVar3 = *(int *)(param_1 + 0x1714) + -0x10;
|
|
*(ushort *)(param_1 + 0x1710) =
|
|
uVar11 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f);
|
|
}
|
|
else {
|
|
*(ushort *)(param_1 + 0x1710) =
|
|
*(ushort *)(param_1 + 0x1710) |
|
|
*(short *)(param_2 + (ulonglong)uVar13 * 4) << (bVar5 & 0x1f);
|
|
}
|
|
iVar3 = iVar3 + uVar10;
|
|
*(int *)(param_1 + 0x1714) = iVar3;
|
|
iVar4 = *(int *)(&DAT_14012d940 + (ulonglong)bVar2 * 4);
|
|
if (iVar4 != 0) {
|
|
uVar11 = (ushort)bVar1 - (short)*(undefined4 *)(&DAT_14012e2b0 + (ulonglong)bVar2 * 4);
|
|
if (0x10 - iVar4 < iVar3) {
|
|
*(ushort *)(param_1 + 0x1710) =
|
|
*(ushort *)(param_1 + 0x1710) | uVar11 << ((byte)iVar3 & 0x1f);
|
|
*(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
|
|
*(undefined1 *)(param_1 + 0x1710);
|
|
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
|
|
*(undefined1 *)(param_1 + 0x1711);
|
|
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
|
|
iVar3 = *(int *)(param_1 + 0x1714) + -0x10;
|
|
*(ushort *)(param_1 + 0x1710) =
|
|
uVar11 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f);
|
|
}
|
|
else {
|
|
*(ushort *)(param_1 + 0x1710) =
|
|
*(ushort *)(param_1 + 0x1710) | uVar11 << ((byte)iVar3 & 0x1f);
|
|
}
|
|
*(int *)(param_1 + 0x1714) = iVar3 + iVar4;
|
|
}
|
|
uVar13 = uVar12 - 1;
|
|
if (uVar13 < 0x100) {
|
|
bVar1 = (&DAT_14012dfb0)[uVar13];
|
|
}
|
|
else {
|
|
bVar1 = (&DAT_14012dfb0)[(uVar13 >> 7) + 0x100];
|
|
}
|
|
uVar6 = (ulonglong)bVar1;
|
|
uVar10 = (uint)*(ushort *)(param_3 + 2 + uVar6 * 4);
|
|
iVar4 = *(int *)(param_1 + 0x1714);
|
|
if ((int)(0x10 - uVar10) < iVar4) {
|
|
uVar12 = *(ushort *)(param_3 + uVar6 * 4);
|
|
*(ushort *)(param_1 + 0x1710) =
|
|
*(ushort *)(param_1 + 0x1710) | uVar12 << ((byte)iVar4 & 0x1f);
|
|
*(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
|
|
*(undefined1 *)(param_1 + 0x1710);
|
|
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
|
|
*(undefined1 *)(param_1 + 0x1711);
|
|
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
|
|
iVar4 = *(int *)(param_1 + 0x1714) + -0x10;
|
|
*(ushort *)(param_1 + 0x1710) =
|
|
uVar12 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f);
|
|
}
|
|
else {
|
|
*(ushort *)(param_1 + 0x1710) =
|
|
*(ushort *)(param_1 + 0x1710) |
|
|
*(short *)(param_3 + uVar6 * 4) << ((byte)iVar4 & 0x1f);
|
|
}
|
|
iVar4 = iVar4 + uVar10;
|
|
*(int *)(param_1 + 0x1714) = iVar4;
|
|
iVar3 = *(int *)(&DAT_14012d9c0 + uVar6 * 4);
|
|
if (iVar3 != 0) {
|
|
uVar12 = (short)uVar13 - (short)*(undefined4 *)(&DAT_14012e330 + uVar6 * 4);
|
|
if (0x10 - iVar3 < iVar4) {
|
|
*(ushort *)(param_1 + 0x1710) =
|
|
*(ushort *)(param_1 + 0x1710) | uVar12 << ((byte)iVar4 & 0x1f);
|
|
*(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
|
|
*(undefined1 *)(param_1 + 0x1710);
|
|
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
|
|
*(undefined1 *)(param_1 + 0x1711);
|
|
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
|
|
iVar3 = *(int *)(param_1 + 0x1714) + -0x10 + iVar3;
|
|
*(ushort *)(param_1 + 0x1710) =
|
|
uVar12 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f);
|
|
}
|
|
else {
|
|
iVar3 = iVar4 + iVar3;
|
|
*(ushort *)(param_1 + 0x1710) =
|
|
*(ushort *)(param_1 + 0x1710) | uVar12 << ((byte)iVar4 & 0x1f);
|
|
}
|
|
goto LAB_1400ec088;
|
|
}
|
|
}
|
|
} while (uVar8 < *(uint *)(param_1 + 0x16f4));
|
|
}
|
|
uVar12 = *(ushort *)(param_2 + 0x402);
|
|
iVar3 = *(int *)(param_1 + 0x1714);
|
|
if ((int)(0x10 - (uint)uVar12) < iVar3) {
|
|
uVar11 = *(ushort *)(param_2 + 0x400);
|
|
*(ushort *)(param_1 + 0x1710) = *(ushort *)(param_1 + 0x1710) | uVar11 << ((byte)iVar3 & 0x1f);
|
|
*(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
|
|
*(undefined1 *)(param_1 + 0x1710);
|
|
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
|
|
*(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
|
|
*(undefined1 *)(param_1 + 0x1711);
|
|
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
|
|
iVar3 = *(int *)(param_1 + 0x1714) + -0x10;
|
|
*(ushort *)(param_1 + 0x1710) = uVar11 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f);
|
|
}
|
|
else {
|
|
*(ushort *)(param_1 + 0x1710) =
|
|
*(ushort *)(param_1 + 0x1710) | *(short *)(param_2 + 0x400) << ((byte)iVar3 & 0x1f);
|
|
}
|
|
*(uint *)(param_1 + 0x1714) = iVar3 + (uint)uVar12;
|
|
*(uint *)(param_1 + 0x170c) = (uint)*(ushort *)(param_2 + 0x402);
|
|
return;
|
|
}
|
|
|