262 lines
7.3 KiB
C
262 lines
7.3 KiB
C
/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
|
|
* Ghidra 12.1.2 decompiler output for 0x1400e9bd4 FUN_1400e9bd4
|
|
* Pseudocode, not original source. */
|
|
|
|
void FUN_1400e9bd4(longlong *param_1,int param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
undefined4 uVar2;
|
|
uint uVar3;
|
|
undefined4 uVar4;
|
|
undefined4 *puVar5;
|
|
longlong lVar6;
|
|
longlong lVar7;
|
|
longlong lVar8;
|
|
uint uVar9;
|
|
uint uVar10;
|
|
char *pcVar11;
|
|
ulonglong uVar12;
|
|
uint uVar13;
|
|
uint uVar14;
|
|
byte *pbVar15;
|
|
byte *pbVar16;
|
|
longlong lVar17;
|
|
undefined1 *puVar18;
|
|
undefined1 *puVar19;
|
|
undefined1 *puVar20;
|
|
undefined1 *puVar21;
|
|
longlong lVar22;
|
|
undefined1 *puVar23;
|
|
uint uVar24;
|
|
int iVar25;
|
|
uint uVar26;
|
|
byte *pbVar27;
|
|
int local_68;
|
|
|
|
puVar5 = (undefined4 *)param_1[5];
|
|
lVar17 = *(longlong *)(puVar5 + 0x16);
|
|
lVar6 = *(longlong *)(puVar5 + 0x18);
|
|
uVar1 = puVar5[0xd];
|
|
uVar14 = puVar5[0x10];
|
|
uVar24 = puVar5[0x11];
|
|
lVar8 = param_1[3];
|
|
puVar18 = (undefined1 *)(param_1[2] + -1);
|
|
uVar2 = puVar5[0x1a];
|
|
pbVar15 = (byte *)(*param_1 + -1);
|
|
local_68 = (int)puVar18 - (param_2 - (int)lVar8);
|
|
iVar25 = puVar5[0xb];
|
|
uVar3 = puVar5[0xc];
|
|
lVar7 = *(longlong *)(puVar5 + 0xe);
|
|
pbVar27 = pbVar15 + ((int)param_1[1] - 5);
|
|
uVar4 = puVar5[0x1b];
|
|
puVar19 = puVar18;
|
|
LAB_1400e9c8e:
|
|
if (uVar24 < 0xf) {
|
|
pbVar16 = pbVar15 + 1;
|
|
pbVar15 = pbVar15 + 2;
|
|
uVar14 = uVar14 + ((uint)*pbVar16 << ((byte)uVar24 & 0x1f)) +
|
|
((uint)*pbVar15 << ((byte)uVar24 + 8 & 0x1f));
|
|
uVar24 = uVar24 + 0x10;
|
|
}
|
|
uVar9 = uVar14 & (1 << ((byte)uVar2 & 0x1f)) - 1U;
|
|
while( true ) {
|
|
uVar9 = *(uint *)(lVar17 + (ulonglong)uVar9 * 4);
|
|
uVar14 = uVar14 >> ((byte)(uVar9 >> 8) & 0x1f);
|
|
uVar24 = uVar24 - (uVar9 >> 8 & 0xff);
|
|
if ((byte)uVar9 == 0) break;
|
|
pbVar16 = pbVar15;
|
|
if ((uVar9 & 0x10) != 0) {
|
|
uVar26 = uVar9 >> 0x10;
|
|
uVar9 = uVar9 & 0xf;
|
|
if (uVar9 != 0) {
|
|
if (uVar24 < uVar9) {
|
|
pbVar15 = pbVar15 + 1;
|
|
uVar14 = uVar14 + ((uint)*pbVar15 << ((byte)uVar24 & 0x1f));
|
|
uVar24 = uVar24 + 8;
|
|
}
|
|
uVar10 = (1 << (sbyte)uVar9) - 1U & uVar14;
|
|
uVar14 = uVar14 >> (sbyte)uVar9;
|
|
uVar26 = uVar26 + uVar10;
|
|
uVar24 = uVar24 - uVar9;
|
|
pbVar16 = pbVar15;
|
|
}
|
|
if (uVar24 < 0xf) {
|
|
pbVar15 = pbVar16 + 1;
|
|
pbVar16 = pbVar16 + 2;
|
|
uVar14 = uVar14 + ((uint)*pbVar15 << ((byte)uVar24 & 0x1f)) +
|
|
((uint)*pbVar16 << ((byte)uVar24 + 8 & 0x1f));
|
|
uVar24 = uVar24 + 0x10;
|
|
}
|
|
uVar9 = *(uint *)(lVar6 + (ulonglong)((1 << ((byte)uVar4 & 0x1f)) - 1U & uVar14) * 4);
|
|
goto LAB_1400e9d95;
|
|
}
|
|
if ((uVar9 & 0x40) != 0) {
|
|
if ((uVar9 & 0x20) == 0) {
|
|
pcVar11 = "invalid literal/length code";
|
|
goto LAB_1400e9fc0;
|
|
}
|
|
*puVar5 = 0xb;
|
|
goto LAB_1400e9fcc;
|
|
}
|
|
uVar9 = ((1 << ((byte)uVar9 & 0x1f)) - 1U & uVar14) + (uVar9 >> 0x10);
|
|
}
|
|
puVar19[1] = (char)(uVar9 >> 0x10);
|
|
puVar20 = puVar19 + 1;
|
|
goto LAB_1400e9f84;
|
|
LAB_1400e9d95:
|
|
uVar14 = uVar14 >> ((byte)(uVar9 >> 8) & 0x1f);
|
|
uVar24 = uVar24 - (uVar9 >> 8 & 0xff);
|
|
if ((uVar9 & 0x10) != 0) goto code_r0x0001400e9db2;
|
|
if ((uVar9 & 0x40) != 0) {
|
|
pcVar11 = "invalid distance code";
|
|
goto LAB_1400e9fc0;
|
|
}
|
|
uVar9 = *(uint *)(lVar6 + (ulonglong)
|
|
(((1 << ((byte)uVar9 & 0x1f)) - 1U & uVar14) + (uVar9 >> 0x10)) * 4);
|
|
goto LAB_1400e9d95;
|
|
code_r0x0001400e9db2:
|
|
uVar13 = uVar9 & 0xf;
|
|
pbVar15 = pbVar16;
|
|
uVar10 = uVar24;
|
|
if (uVar24 < uVar13) {
|
|
pbVar15 = pbVar16 + 1;
|
|
uVar10 = uVar24 + 8;
|
|
uVar14 = uVar14 + ((uint)*pbVar15 << ((byte)uVar24 & 0x1f));
|
|
if (uVar10 < uVar13) {
|
|
pbVar15 = pbVar16 + 2;
|
|
uVar14 = uVar14 + ((uint)*pbVar15 << ((byte)uVar10 & 0x1f));
|
|
uVar10 = uVar24 + 0x10;
|
|
}
|
|
}
|
|
uVar24 = uVar10 - uVar13;
|
|
uVar10 = (1 << (sbyte)uVar13) - 1U & uVar14;
|
|
uVar14 = uVar14 >> (sbyte)uVar13;
|
|
uVar10 = (uVar9 >> 0x10) + uVar10;
|
|
uVar9 = (int)puVar19 - local_68;
|
|
if (uVar10 <= uVar9) {
|
|
puVar20 = puVar19 + -(ulonglong)uVar10;
|
|
do {
|
|
puVar23 = puVar19;
|
|
puVar21 = puVar20;
|
|
puVar19 = puVar23 + 3;
|
|
puVar23[1] = puVar21[1];
|
|
uVar26 = uVar26 - 3;
|
|
puVar23[2] = puVar21[2];
|
|
*puVar19 = puVar21[3];
|
|
puVar20 = puVar21 + 3;
|
|
} while (2 < uVar26);
|
|
puVar20 = puVar19;
|
|
if (uVar26 != 0) {
|
|
puVar23[4] = puVar21[4];
|
|
puVar20 = puVar23 + 4;
|
|
if (1 < uVar26) {
|
|
puVar23[5] = puVar21[5];
|
|
puVar20 = puVar23 + 5;
|
|
}
|
|
}
|
|
goto LAB_1400e9f84;
|
|
}
|
|
uVar9 = uVar10 - uVar9;
|
|
if (uVar3 < uVar9) {
|
|
pcVar11 = "invalid distance too far back";
|
|
pbVar16 = pbVar15;
|
|
LAB_1400e9fc0:
|
|
param_1[4] = (longlong)pcVar11;
|
|
*puVar5 = 0x1b;
|
|
LAB_1400e9fcc:
|
|
*(int *)(param_1 + 3) = ((int)(puVar18 + ((int)lVar8 - 0x101)) - (int)puVar19) + 0x101;
|
|
lVar17 = (longlong)pbVar16 - (ulonglong)(uVar24 >> 3);
|
|
iVar25 = uVar24 + (uVar24 >> 3) * -8;
|
|
*param_1 = lVar17 + 1;
|
|
*(int *)(param_1 + 1) = ((int)pbVar27 - (int)lVar17) + 5;
|
|
param_1[2] = (longlong)(puVar19 + 1);
|
|
puVar5[0x11] = iVar25;
|
|
puVar5[0x10] = (1 << ((byte)iVar25 & 0x1f)) - 1U & uVar14;
|
|
return;
|
|
}
|
|
lVar22 = lVar7 + -1;
|
|
if (uVar1 == 0) {
|
|
puVar21 = (undefined1 *)(lVar22 + (ulonglong)(iVar25 - uVar9));
|
|
if (uVar9 < uVar26) {
|
|
uVar26 = uVar26 - uVar9;
|
|
do {
|
|
puVar21 = puVar21 + 1;
|
|
puVar19 = puVar19 + 1;
|
|
uVar9 = uVar9 - 1;
|
|
*puVar19 = *puVar21;
|
|
} while (uVar9 != 0);
|
|
LAB_1400e9ebc:
|
|
puVar21 = puVar19 + -(ulonglong)uVar10;
|
|
}
|
|
}
|
|
else if (uVar1 < uVar9) {
|
|
uVar13 = uVar9 - uVar1;
|
|
puVar21 = (undefined1 *)(lVar22 + (ulonglong)((uVar1 - uVar9) + iVar25));
|
|
if (uVar13 < uVar26) {
|
|
uVar26 = uVar26 - uVar13;
|
|
lVar22 = (longlong)puVar21 - (longlong)puVar19;
|
|
do {
|
|
puVar19 = puVar19 + 1;
|
|
uVar13 = uVar13 - 1;
|
|
*puVar19 = puVar19[lVar22];
|
|
} while (uVar13 != 0);
|
|
puVar21 = (undefined1 *)(lVar7 + -1);
|
|
if (uVar1 < uVar26) {
|
|
uVar26 = uVar26 - uVar1;
|
|
uVar9 = uVar1;
|
|
do {
|
|
puVar21 = puVar21 + 1;
|
|
puVar19 = puVar19 + 1;
|
|
uVar9 = uVar9 - 1;
|
|
*puVar19 = *puVar21;
|
|
} while (uVar9 != 0);
|
|
goto LAB_1400e9ebc;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
puVar21 = (undefined1 *)(lVar22 + (ulonglong)(uVar1 - uVar9));
|
|
if (uVar9 < uVar26) {
|
|
uVar26 = uVar26 - uVar9;
|
|
do {
|
|
puVar21 = puVar21 + 1;
|
|
puVar19 = puVar19 + 1;
|
|
uVar9 = uVar9 - 1;
|
|
*puVar19 = *puVar21;
|
|
} while (uVar9 != 0);
|
|
goto LAB_1400e9ebc;
|
|
}
|
|
}
|
|
if (2 < uVar26) {
|
|
uVar12 = (ulonglong)((uVar26 - 3) / 3 + 1);
|
|
puVar20 = puVar19;
|
|
puVar23 = puVar21;
|
|
do {
|
|
puVar21 = puVar23 + 3;
|
|
puVar19 = puVar20 + 3;
|
|
puVar20[1] = puVar23[1];
|
|
uVar26 = uVar26 - 3;
|
|
uVar12 = uVar12 - 1;
|
|
puVar20[2] = puVar23[2];
|
|
*puVar19 = *puVar21;
|
|
puVar20 = puVar19;
|
|
puVar23 = puVar21;
|
|
} while (uVar12 != 0);
|
|
}
|
|
puVar20 = puVar19;
|
|
if (uVar26 != 0) {
|
|
puVar19[1] = puVar21[1];
|
|
puVar20 = puVar19 + 1;
|
|
if (1 < uVar26) {
|
|
puVar19[2] = puVar21[2];
|
|
puVar20 = puVar19 + 2;
|
|
}
|
|
}
|
|
LAB_1400e9f84:
|
|
pbVar16 = pbVar15;
|
|
puVar19 = puVar20;
|
|
if ((pbVar27 <= pbVar15) || (puVar18 + ((int)lVar8 - 0x101) <= puVar20)) goto LAB_1400e9fcc;
|
|
goto LAB_1400e9c8e;
|
|
}
|
|
|