274 lines
7.9 KiB
C
274 lines
7.9 KiB
C
/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469
|
|
* Ghidra 12.1.2 decompiler output for 0x1400c42d0 FUN_1400c42d0
|
|
* Pseudocode, not original source. */
|
|
|
|
void FUN_1400c42d0(longlong *param_1,int param_2)
|
|
|
|
{
|
|
longlong lVar1;
|
|
uint uVar2;
|
|
undefined4 uVar3;
|
|
uint uVar4;
|
|
undefined4 uVar5;
|
|
undefined4 *puVar6;
|
|
longlong lVar7;
|
|
longlong lVar8;
|
|
longlong lVar9;
|
|
uint uVar10;
|
|
ulonglong uVar11;
|
|
uint uVar12;
|
|
uint uVar13;
|
|
uint uVar14;
|
|
byte *pbVar15;
|
|
byte *pbVar16;
|
|
longlong lVar17;
|
|
undefined1 *puVar18;
|
|
undefined1 *puVar19;
|
|
undefined1 *puVar20;
|
|
undefined1 *puVar21;
|
|
undefined1 *puVar22;
|
|
char cVar23;
|
|
uint uVar24;
|
|
uint uVar25;
|
|
int iVar26;
|
|
byte *pbVar27;
|
|
int local_60;
|
|
|
|
puVar6 = (undefined4 *)param_1[5];
|
|
lVar9 = param_1[3];
|
|
lVar17 = *(longlong *)(puVar6 + 0x16);
|
|
lVar7 = *(longlong *)(puVar6 + 0x18);
|
|
uVar2 = puVar6[0xd];
|
|
uVar14 = puVar6[0x10];
|
|
uVar25 = puVar6[0x11];
|
|
puVar18 = (undefined1 *)(param_1[2] + -1);
|
|
uVar3 = puVar6[0x1a];
|
|
pbVar15 = (byte *)(*param_1 + -1);
|
|
local_60 = (int)puVar18 - (param_2 - (int)lVar9);
|
|
iVar26 = puVar6[0xb];
|
|
uVar4 = puVar6[0xc];
|
|
lVar8 = *(longlong *)(puVar6 + 0xe);
|
|
pbVar27 = pbVar15 + ((int)param_1[1] - 5);
|
|
uVar5 = puVar6[0x1b];
|
|
puVar20 = puVar18;
|
|
LAB_1400c4380:
|
|
if (uVar25 < 0xf) {
|
|
pbVar16 = pbVar15 + 1;
|
|
pbVar15 = pbVar15 + 2;
|
|
uVar14 = uVar14 + ((uint)*pbVar16 << ((byte)uVar25 & 0x1f)) +
|
|
((uint)*pbVar15 << ((byte)uVar25 + 8 & 0x1f));
|
|
uVar25 = uVar25 + 0x10;
|
|
}
|
|
uVar12 = *(uint *)(lVar17 + (ulonglong)(uVar14 & (1 << ((byte)uVar3 & 0x1f)) - 1U) * 4);
|
|
uVar14 = uVar14 >> ((byte)(uVar12 >> 8) & 0x1f);
|
|
uVar25 = uVar25 - (uVar12 >> 8 & 0xff);
|
|
cVar23 = (char)uVar12;
|
|
while (cVar23 != '\0') {
|
|
puVar19 = puVar20;
|
|
if ((uVar12 & 0x10) != 0) {
|
|
uVar24 = uVar12 >> 0x10;
|
|
uVar12 = uVar12 & 0xf;
|
|
pbVar16 = pbVar15;
|
|
if (uVar12 != 0) {
|
|
if (uVar25 < uVar12) {
|
|
pbVar16 = pbVar15 + 1;
|
|
pbVar15 = pbVar15 + 1;
|
|
uVar14 = uVar14 + ((uint)*pbVar16 << ((byte)uVar25 & 0x1f));
|
|
uVar25 = uVar25 + 8;
|
|
}
|
|
uVar10 = (1 << (sbyte)uVar12) - 1U & uVar14;
|
|
uVar14 = uVar14 >> (sbyte)uVar12;
|
|
uVar24 = uVar24 + uVar10;
|
|
uVar25 = uVar25 - uVar12;
|
|
pbVar16 = pbVar15;
|
|
}
|
|
if (uVar25 < 0xf) {
|
|
pbVar15 = pbVar16 + 1;
|
|
pbVar16 = pbVar16 + 2;
|
|
uVar14 = uVar14 + ((uint)*pbVar15 << ((byte)uVar25 & 0x1f)) +
|
|
((uint)*pbVar16 << ((byte)uVar25 + 8 & 0x1f));
|
|
uVar25 = uVar25 + 0x10;
|
|
}
|
|
uVar12 = *(uint *)(lVar7 + (ulonglong)((1 << ((byte)uVar5 & 0x1f)) - 1U & uVar14) * 4);
|
|
uVar14 = uVar14 >> ((byte)(uVar12 >> 8) & 0x1f);
|
|
uVar25 = uVar25 - (uVar12 >> 8 & 0xff);
|
|
goto joined_r0x0001400c448d;
|
|
}
|
|
if ((uVar12 & 0x40) != 0) {
|
|
if ((uVar12 & 0x20) == 0) {
|
|
param_1[4] = (longlong)"invalid literal/length code";
|
|
*puVar6 = 0x1d;
|
|
}
|
|
else {
|
|
*puVar6 = 0xb;
|
|
}
|
|
goto LAB_1400c4755;
|
|
}
|
|
uVar12 = *(uint *)(lVar17 + (ulonglong)
|
|
(((1 << ((byte)uVar12 & 0x1f)) - 1U & uVar14) + (uVar12 >> 0x10)) *
|
|
4);
|
|
uVar14 = uVar14 >> ((byte)(uVar12 >> 8) & 0x1f);
|
|
uVar25 = uVar25 - (uVar12 >> 8 & 0xff);
|
|
cVar23 = (char)uVar12;
|
|
}
|
|
puVar20[1] = (char)(uVar12 >> 0x10);
|
|
puVar19 = puVar20 + 1;
|
|
goto LAB_1400c46d7;
|
|
joined_r0x0001400c448d:
|
|
pbVar15 = pbVar16;
|
|
if ((uVar12 & 0x10) != 0) goto LAB_1400c44d2;
|
|
if ((uVar12 & 0x40) != 0) {
|
|
param_1[4] = (longlong)"invalid distance code";
|
|
*puVar6 = 0x1d;
|
|
goto LAB_1400c4755;
|
|
}
|
|
uVar12 = *(uint *)(lVar7 + (ulonglong)
|
|
(((1 << ((byte)uVar12 & 0x1f)) - 1U & uVar14) + (uVar12 >> 0x10)) * 4);
|
|
uVar14 = uVar14 >> ((byte)(uVar12 >> 8) & 0x1f);
|
|
uVar25 = uVar25 - (uVar12 >> 8 & 0xff);
|
|
goto joined_r0x0001400c448d;
|
|
LAB_1400c44d2:
|
|
uVar13 = uVar12 & 0xf;
|
|
uVar10 = uVar25;
|
|
if (uVar25 < uVar13) {
|
|
pbVar15 = pbVar16 + 1;
|
|
uVar10 = uVar25 + 8;
|
|
uVar14 = uVar14 + ((uint)pbVar16[1] << ((byte)uVar25 & 0x1f));
|
|
if (uVar10 < uVar13) {
|
|
pbVar15 = pbVar16 + 2;
|
|
uVar14 = uVar14 + ((uint)pbVar16[2] << ((byte)uVar10 & 0x1f));
|
|
uVar10 = uVar25 + 0x10;
|
|
}
|
|
}
|
|
uVar25 = uVar10 - uVar13;
|
|
uVar10 = (1 << (sbyte)uVar13) - 1U & uVar14;
|
|
uVar14 = uVar14 >> (sbyte)uVar13;
|
|
uVar10 = (uVar12 >> 0x10) + uVar10;
|
|
uVar12 = (int)puVar20 - local_60;
|
|
if (uVar10 <= uVar12) {
|
|
puVar19 = puVar20 + -(ulonglong)uVar10;
|
|
do {
|
|
puVar22 = puVar20;
|
|
puVar21 = puVar19;
|
|
puVar20 = puVar22 + 3;
|
|
puVar22[1] = puVar21[1];
|
|
uVar24 = uVar24 - 3;
|
|
puVar22[2] = puVar21[2];
|
|
*puVar20 = puVar21[3];
|
|
puVar19 = puVar21 + 3;
|
|
} while (2 < uVar24);
|
|
puVar19 = puVar20;
|
|
if (uVar24 != 0) {
|
|
puVar22[4] = puVar21[4];
|
|
puVar19 = puVar22 + 4;
|
|
if (1 < uVar24) {
|
|
puVar22[5] = puVar21[5];
|
|
puVar19 = puVar22 + 5;
|
|
}
|
|
}
|
|
goto LAB_1400c46d7;
|
|
}
|
|
uVar12 = uVar10 - uVar12;
|
|
if ((uVar4 < uVar12) && (puVar6[0x6f6] != 0)) {
|
|
param_1[4] = (longlong)"invalid distance too far back";
|
|
*puVar6 = 0x1d;
|
|
LAB_1400c4755:
|
|
lVar17 = (longlong)pbVar15 - (ulonglong)(uVar25 >> 3);
|
|
iVar26 = uVar25 + (uVar25 >> 3) * -8;
|
|
*param_1 = lVar17 + 1;
|
|
param_1[2] = (longlong)(puVar19 + 1);
|
|
*(int *)(param_1 + 1) = ((int)pbVar27 - (int)lVar17) + 5;
|
|
*(int *)(param_1 + 3) = ((int)(puVar18 + ((int)lVar9 - 0x101)) - (int)puVar19) + 0x101;
|
|
puVar6[0x10] = uVar14 & (1 << ((byte)iVar26 & 0x1f)) - 1U;
|
|
puVar6[0x11] = iVar26;
|
|
return;
|
|
}
|
|
lVar1 = lVar8 + -1;
|
|
if (uVar2 == 0) {
|
|
puVar21 = (undefined1 *)(lVar1 + (ulonglong)(iVar26 - uVar12));
|
|
if (uVar12 < uVar24) {
|
|
uVar24 = uVar24 - uVar12;
|
|
do {
|
|
puVar20 = puVar21 + 1;
|
|
puVar21 = puVar21 + 1;
|
|
puVar19 = puVar19 + 1;
|
|
uVar12 = uVar12 - 1;
|
|
*puVar19 = *puVar20;
|
|
} while (uVar12 != 0);
|
|
LAB_1400c4602:
|
|
puVar21 = puVar19 + -(ulonglong)uVar10;
|
|
puVar20 = puVar19;
|
|
}
|
|
}
|
|
else if (uVar2 < uVar12) {
|
|
uVar13 = uVar12 - uVar2;
|
|
puVar21 = (undefined1 *)(lVar1 + (ulonglong)((uVar2 - uVar12) + iVar26));
|
|
if (uVar13 < uVar24) {
|
|
uVar24 = uVar24 - uVar13;
|
|
do {
|
|
puVar22 = puVar19 + (longlong)(puVar21 + (1 - (longlong)puVar20));
|
|
puVar19 = puVar19 + 1;
|
|
uVar13 = uVar13 - 1;
|
|
*puVar19 = *puVar22;
|
|
} while (uVar13 != 0);
|
|
puVar21 = (undefined1 *)(lVar8 + -1);
|
|
puVar20 = puVar19;
|
|
if (uVar2 < uVar24) {
|
|
uVar24 = uVar24 - uVar2;
|
|
uVar12 = uVar2;
|
|
do {
|
|
puVar20 = puVar21 + 1;
|
|
puVar21 = puVar21 + 1;
|
|
puVar19 = puVar19 + 1;
|
|
uVar12 = uVar12 - 1;
|
|
*puVar19 = *puVar20;
|
|
} while (uVar12 != 0);
|
|
goto LAB_1400c4602;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
puVar21 = (undefined1 *)(lVar1 + (ulonglong)(uVar2 - uVar12));
|
|
if (uVar12 < uVar24) {
|
|
uVar24 = uVar24 - uVar12;
|
|
do {
|
|
puVar20 = puVar21 + 1;
|
|
puVar21 = puVar21 + 1;
|
|
puVar19 = puVar19 + 1;
|
|
uVar12 = uVar12 - 1;
|
|
*puVar19 = *puVar20;
|
|
} while (uVar12 != 0);
|
|
goto LAB_1400c4602;
|
|
}
|
|
}
|
|
if (2 < uVar24) {
|
|
uVar11 = (ulonglong)((uVar24 - 3) / 3 + 1);
|
|
puVar19 = puVar20;
|
|
puVar22 = puVar21;
|
|
do {
|
|
puVar21 = puVar22 + 3;
|
|
puVar20 = puVar19 + 3;
|
|
puVar19[1] = puVar22[1];
|
|
uVar24 = uVar24 - 3;
|
|
uVar11 = uVar11 - 1;
|
|
puVar19[2] = puVar22[2];
|
|
*puVar20 = *puVar21;
|
|
puVar19 = puVar20;
|
|
puVar22 = puVar21;
|
|
} while (uVar11 != 0);
|
|
}
|
|
puVar19 = puVar20;
|
|
if (uVar24 != 0) {
|
|
puVar20[1] = puVar21[1];
|
|
puVar19 = puVar20 + 1;
|
|
if (1 < uVar24) {
|
|
puVar20[2] = puVar21[2];
|
|
puVar19 = puVar20 + 2;
|
|
}
|
|
}
|
|
LAB_1400c46d7:
|
|
if ((pbVar27 <= pbVar15) || (puVar20 = puVar19, puVar18 + ((int)lVar9 - 0x101) <= puVar19))
|
|
goto LAB_1400c4755;
|
|
goto LAB_1400c4380;
|
|
}
|
|
|