Created
April 14, 2023 15:57
-
-
Save oblivia-simplex/04f45ae66682c58e673ace6c27acca7e to your computer and use it in GitHub Desktop.
Demonstration of G-3PO Annotating a Decompiled Binary: Before
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* DISPLAY WARNING: Type casts are NOT being printed */ | |
void * FUN_4520a9bc(uint *param_1,uint *param_2,size_t param_3) | |
{ | |
undefined8 *puVar1; | |
undefined8 *puVar2; | |
uint *puVar3; | |
byte *pbVar4; | |
uint *puVar5; | |
undefined8 *puVar6; | |
uint *puVar7; | |
byte bVar8; | |
undefined2 uVar9; | |
uint uVar10; | |
uint uVar11; | |
uint uVar12; | |
uint uVar13; | |
uint uVar14; | |
uint uVar15; | |
byte bVar16; | |
uint uVar17; | |
uint in_r12; | |
uint uVar18; | |
bool bVar19; | |
bool bVar20; | |
undefined8 in_d0; | |
uint uVar21; | |
undefined8 in_d1; | |
uVar10 = param_1 - param_2; | |
bVar19 = uVar10 == 0; | |
if (param_2 <= param_1) { | |
bVar19 = param_3 == uVar10; | |
} | |
if ((param_2 <= param_1 && uVar10 <= param_3) && !bVar19) { | |
puVar1 = param_1 + param_3; | |
puVar6 = param_2 + param_3; | |
if (3 < param_3) { | |
bVar19 = (puVar1 & 3) == 0; | |
do { | |
if (!bVar19) { | |
puVar6 = puVar6 + -1; | |
param_3 = param_3 - 1; | |
puVar1 = puVar1 + -1; | |
*puVar1 = *puVar6; | |
} | |
bVar19 = (puVar1 & 3) == 0; | |
} while (!bVar19); | |
uVar10 = puVar6 & 3; | |
if (uVar10 == 0) { | |
while (uVar10 = param_3 - 0x10, 0xf < param_3) { | |
in_d0 = puVar6[-2]; | |
in_d1 = puVar6[-1]; | |
puVar1[-2] = in_d0; | |
puVar1[-1] = in_d1; | |
puVar1 = puVar1 + -2; | |
puVar6 = puVar6 + -2; | |
param_3 = uVar10; | |
} | |
uVar21 = in_d1; | |
bVar19 = uVar10 >> 3 & 1; | |
uVar11 = param_3 << 0x1d; | |
if (bVar19) { | |
puVar6 = puVar6 + -1; | |
in_d0 = *puVar6; | |
} | |
if (uVar11 < 0) { | |
puVar6 = puVar6 + -4; | |
uVar21 = *puVar6; | |
} | |
puVar2 = puVar1; | |
if (bVar19) { | |
puVar2 = puVar1 + -1; | |
*puVar2 = in_d0; | |
*(puVar1 + -4) = in_d0 >> 0x20; | |
} | |
if (uVar11 < 0) { | |
puVar2 = puVar2 + -4; | |
*puVar2 = uVar21; | |
} | |
if ((uVar10 & 3) != 0) { | |
bVar20 = uVar10 >> 1 & 1; | |
uVar10 = param_3 << 0x1f; | |
bVar19 = uVar10 < 0; | |
if (bVar20) { | |
puVar6 = puVar6 + -2; | |
uVar11 = *puVar6; | |
} | |
if (bVar19) { | |
uVar10 = *(puVar6 + -1); | |
} | |
if (bVar20) { | |
puVar2 = puVar2 + -2; | |
*puVar2 = uVar11; | |
} | |
if (bVar19) { | |
*(puVar2 + -1) = uVar10; | |
} | |
return puVar2; | |
} | |
return puVar2; | |
} | |
bVar19 = 3 < param_3; | |
param_3 = param_3 - 4; | |
if (bVar19) { | |
puVar7 = puVar6 - uVar10; | |
in_r12 = *puVar7; | |
if (uVar10 < 2) { | |
do { | |
puVar3 = puVar7; | |
uVar10 = in_r12 << 0x18; | |
puVar7 = puVar3 + -1; | |
in_r12 = *puVar7; | |
bVar19 = 3 < param_3; | |
param_3 = param_3 - 4; | |
uVar10 = uVar10 | in_r12 >> 8; | |
puVar1 = puVar1 + -4; | |
*puVar1 = uVar10; | |
} while (bVar19); | |
puVar6 = puVar3 + -3; | |
} | |
else if (uVar10 < 3) { | |
do { | |
puVar3 = puVar7; | |
uVar10 = in_r12 << 0x10; | |
puVar7 = puVar3 + -1; | |
in_r12 = *puVar7; | |
bVar19 = 3 < param_3; | |
param_3 = param_3 - 4; | |
uVar10 = uVar10 | in_r12 >> 0x10; | |
puVar1 = puVar1 + -4; | |
*puVar1 = uVar10; | |
} while (bVar19); | |
puVar6 = puVar3 + -2; | |
} | |
else { | |
do { | |
puVar3 = puVar7; | |
uVar10 = in_r12 << 8; | |
puVar7 = puVar3 + -1; | |
in_r12 = *puVar7; | |
bVar19 = 3 < param_3; | |
param_3 = param_3 - 4; | |
uVar10 = uVar10 | in_r12 >> 0x18; | |
puVar1 = puVar1 + -4; | |
*puVar1 = uVar10; | |
} while (bVar19); | |
puVar6 = puVar3 + -1; | |
} | |
} | |
} | |
bVar16 = in_r12; | |
bVar8 = uVar10; | |
bVar20 = param_3 >> 1 & 1; | |
uVar10 = param_3 << 0x1f; | |
bVar19 = uVar10 < 0; | |
if (bVar20) { | |
bVar8 = *(puVar6 + -1); | |
puVar6 = puVar6 + -2; | |
bVar16 = *puVar6; | |
} | |
if (bVar19) { | |
uVar10 = *(puVar6 + -1); | |
} | |
if (bVar20) { | |
*(puVar1 + -1) = bVar8; | |
puVar1 = puVar1 + -2; | |
*puVar1 = bVar16; | |
} | |
if (bVar19) { | |
*(puVar1 + -1) = uVar10; | |
} | |
return puVar1; | |
} | |
if (3 < param_3) { | |
uVar10 = param_1 & 3; | |
in_r12 = uVar10; | |
if (uVar10 != 0) { | |
bVar8 = *param_2; | |
puVar7 = param_2 + 1; | |
if (uVar10 < 3) { | |
puVar7 = param_2 + 2; | |
in_r12 = *(param_2 + 1); | |
} | |
*param_1 = bVar8; | |
param_2 = puVar7; | |
if (uVar10 < 2) { | |
param_2 = puVar7 + 1; | |
bVar8 = *puVar7; | |
} | |
puVar7 = param_1 + 1; | |
if (uVar10 < 3) { | |
puVar7 = param_1 + 2; | |
*(param_1 + 1) = in_r12; | |
} | |
param_3 = (param_3 + uVar10) - 4; | |
param_1 = puVar7; | |
if (uVar10 < 2) { | |
param_1 = puVar7 + 1; | |
*puVar7 = bVar8; | |
} | |
} | |
uVar10 = param_2 & 3; | |
if (uVar10 == 0) { | |
uVar11 = param_3 - 0x20; | |
if (0x1f < param_3) { | |
for (; 0x7f < uVar11; uVar11 = uVar11 - 0x20) { | |
HintPreloadData(param_2 + 0x20); | |
uVar10 = *param_2; | |
uVar21 = param_2[1]; | |
uVar12 = param_2[2]; | |
uVar13 = param_2[3]; | |
uVar14 = param_2[4]; | |
uVar15 = param_2[5]; | |
uVar17 = param_2[6]; | |
uVar18 = param_2[7]; | |
param_2 = param_2 + 8; | |
*param_1 = uVar10; | |
param_1[1] = uVar21; | |
param_1[2] = uVar12; | |
param_1[3] = uVar13; | |
param_1[4] = uVar14; | |
param_1[5] = uVar15; | |
param_1[6] = uVar17; | |
param_1[7] = uVar18; | |
param_1 = param_1 + 8; | |
} | |
do { | |
uVar10 = *param_2; | |
uVar21 = param_2[1]; | |
uVar12 = param_2[2]; | |
uVar13 = param_2[3]; | |
uVar14 = param_2[4]; | |
uVar15 = param_2[5]; | |
uVar17 = param_2[6]; | |
uVar18 = param_2[7]; | |
param_2 = param_2 + 8; | |
bVar19 = 0x1f < uVar11; | |
uVar11 = uVar11 - 0x20; | |
*param_1 = uVar10; | |
param_1[1] = uVar21; | |
param_1[2] = uVar12; | |
param_1[3] = uVar13; | |
param_1[4] = uVar14; | |
param_1[5] = uVar15; | |
param_1[6] = uVar17; | |
param_1[7] = uVar18; | |
param_1 = param_1 + 8; | |
} while (bVar19); | |
} | |
if (uVar11 >> 4 & 1) { | |
uVar10 = *param_2; | |
uVar21 = param_2[1]; | |
uVar12 = param_2[2]; | |
uVar13 = param_2[3]; | |
param_2 = param_2 + 4; | |
*param_1 = uVar10; | |
param_1[1] = uVar21; | |
param_1[2] = uVar12; | |
param_1[3] = uVar13; | |
param_1 = param_1 + 4; | |
} | |
if (uVar11 << 0x1c < 0) { | |
uVar10 = *param_2; | |
uVar21 = param_2[1]; | |
param_2 = param_2 + 2; | |
*param_1 = uVar10; | |
param_1[1] = uVar21; | |
param_1 = param_1 + 2; | |
} | |
puVar3 = param_1; | |
puVar7 = param_2; | |
if (uVar11 >> 2 & 1) { | |
puVar7 = param_2 + 1; | |
uVar10 = *param_2; | |
puVar3 = param_1 + 1; | |
*param_1 = uVar10; | |
} | |
uVar9 = uVar10; | |
if ((uVar11 & 3) != 0) { | |
bVar20 = uVar11 >> 1 & 1; | |
uVar11 = uVar11 << 0x1f; | |
bVar19 = uVar11 < 0; | |
puVar5 = puVar7; | |
if (bVar20) { | |
puVar5 = puVar7 + 2; | |
uVar9 = *puVar7; | |
} | |
if (bVar19) { | |
uVar11 = *puVar5; | |
} | |
puVar7 = puVar3; | |
if (bVar20) { | |
puVar7 = puVar3 + 2; | |
*puVar3 = uVar9; | |
} | |
puVar3 = puVar7; | |
if (bVar19) { | |
puVar3 = puVar7 + 1; | |
*puVar7 = uVar11; | |
} | |
return puVar3; | |
} | |
return puVar3; | |
} | |
bVar19 = 3 < param_3; | |
param_3 = param_3 - 4; | |
if (bVar19) { | |
puVar3 = param_2 - uVar10; | |
in_r12 = *puVar3; | |
puVar7 = param_1; | |
if (uVar10 == 2) { | |
do { | |
puVar5 = puVar3; | |
uVar10 = in_r12 >> 0x10; | |
puVar3 = puVar5 + 1; | |
in_r12 = *puVar3; | |
bVar19 = 3 < param_3; | |
param_3 = param_3 - 4; | |
uVar10 = uVar10 | in_r12 << 0x10; | |
param_1 = puVar7 + 1; | |
*puVar7 = uVar10; | |
puVar7 = param_1; | |
} while (bVar19); | |
param_2 = puVar5 + 6; | |
} | |
else if (uVar10 < 3) { | |
do { | |
puVar5 = puVar3; | |
uVar10 = in_r12 >> 8; | |
puVar3 = puVar5 + 1; | |
in_r12 = *puVar3; | |
bVar19 = 3 < param_3; | |
param_3 = param_3 - 4; | |
uVar10 = uVar10 | in_r12 << 0x18; | |
param_1 = puVar7 + 1; | |
*puVar7 = uVar10; | |
puVar7 = param_1; | |
} while (bVar19); | |
param_2 = puVar5 + 5; | |
} | |
else { | |
do { | |
puVar5 = puVar3; | |
uVar10 = in_r12 >> 0x18; | |
puVar3 = puVar5 + 1; | |
in_r12 = *puVar3; | |
bVar19 = 3 < param_3; | |
param_3 = param_3 - 4; | |
uVar10 = uVar10 | in_r12 << 8; | |
param_1 = puVar7 + 1; | |
*puVar7 = uVar10; | |
puVar7 = param_1; | |
} while (bVar19); | |
param_2 = puVar5 + 7; | |
} | |
} | |
} | |
bVar16 = in_r12; | |
bVar8 = uVar10; | |
bVar20 = param_3 >> 1 & 1; | |
uVar10 = param_3 << 0x1f; | |
bVar19 = uVar10 < 0; | |
if (bVar20) { | |
pbVar4 = param_2 + 1; | |
bVar8 = *param_2; | |
param_2 = param_2 + 2; | |
bVar16 = *pbVar4; | |
} | |
if (bVar19) { | |
uVar10 = *param_2; | |
} | |
if (bVar20) { | |
pbVar4 = param_1 + 1; | |
*param_1 = bVar8; | |
param_1 = param_1 + 2; | |
*pbVar4 = bVar16; | |
} | |
puVar7 = param_1; | |
if (bVar19) { | |
puVar7 = param_1 + 1; | |
*param_1 = uVar10; | |
} | |
return puVar7; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment