132 lines
3.6 KiB
C
132 lines
3.6 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x14010c500 FUN_14010c500
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
|
|
undefined8 FUN_14010c500(uint *param_1,uint *param_2,int param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
ulonglong uVar3;
|
|
undefined8 uVar4;
|
|
ulonglong *puVar5;
|
|
ulonglong *puVar6;
|
|
ulonglong *puVar7;
|
|
uint *puVar8;
|
|
int iVar9;
|
|
uint *_Dst;
|
|
ulonglong uVar10;
|
|
uint uVar11;
|
|
ulonglong uVar12;
|
|
int iVar13;
|
|
uint uVar14;
|
|
undefined1 auStack_1078 [32];
|
|
uint local_1058;
|
|
int local_1054;
|
|
uint *local_1050;
|
|
ulonglong local_1048 [512];
|
|
ulonglong local_48;
|
|
|
|
local_48 = DAT_1401ac5a0 ^ (ulonglong)auStack_1078;
|
|
uVar14 = *param_1;
|
|
local_1058 = uVar14;
|
|
local_1054 = param_3;
|
|
local_1050 = param_1;
|
|
if (((int)(*param_2 + 1) <= (int)param_1[1]) ||
|
|
(uVar4 = FUN_140109880((longlong)param_1,*param_2 + 1), (int)uVar4 == 0)) {
|
|
_Dst = *(uint **)(param_1 + 4);
|
|
iVar9 = 0;
|
|
puVar7 = local_1048;
|
|
uVar11 = 0;
|
|
if (0 < (int)*param_1) {
|
|
uVar11 = *param_1;
|
|
uVar10 = (ulonglong)uVar11;
|
|
puVar6 = puVar7;
|
|
puVar8 = _Dst;
|
|
do {
|
|
uVar1 = *puVar8;
|
|
puVar7 = puVar6 + 1;
|
|
puVar8 = puVar8 + 1;
|
|
uVar10 = uVar10 - 1;
|
|
*puVar6 = (ulonglong)uVar1;
|
|
puVar6 = puVar7;
|
|
} while (uVar10 != 0);
|
|
}
|
|
uVar1 = *param_2;
|
|
iVar2 = uVar1 * 2 + 1;
|
|
if ((int)uVar11 < iVar2) {
|
|
memset(puVar7,0,(ulonglong)(iVar2 - uVar11) << 3);
|
|
}
|
|
uVar11 = 0;
|
|
if (0 < (int)uVar1) {
|
|
puVar6 = local_1048;
|
|
puVar7 = local_1048;
|
|
uVar10 = (ulonglong)uVar1;
|
|
do {
|
|
puVar6 = puVar6 + 1;
|
|
uVar3 = puVar6[-1];
|
|
puVar8 = *(uint **)(param_2 + 4);
|
|
if (0 < (int)uVar1) {
|
|
uVar12 = (ulonglong)uVar1;
|
|
puVar5 = puVar7;
|
|
do {
|
|
uVar14 = *puVar8;
|
|
puVar8 = puVar8 + 1;
|
|
*puVar5 = *puVar5 + (ulonglong)uVar14 * (ulonglong)((int)uVar3 * local_1054 & 0xfffffff)
|
|
;
|
|
uVar12 = uVar12 - 1;
|
|
puVar5 = puVar5 + 1;
|
|
} while (uVar12 != 0);
|
|
}
|
|
puVar7 = puVar7 + 1;
|
|
*puVar6 = *puVar6 + (puVar6[-1] >> 0x1c);
|
|
uVar10 = uVar10 - 1;
|
|
param_1 = local_1050;
|
|
uVar14 = local_1058;
|
|
uVar11 = uVar1;
|
|
} while (uVar10 != 0);
|
|
}
|
|
iVar13 = uVar11 + 1;
|
|
puVar7 = local_1048 + (int)uVar11;
|
|
if (iVar13 <= iVar2) {
|
|
uVar10 = (ulonglong)((iVar2 - iVar13) + 1);
|
|
puVar6 = local_1048 + iVar13;
|
|
do {
|
|
uVar3 = *puVar7;
|
|
puVar7 = puVar7 + 1;
|
|
*puVar6 = *puVar6 + (uVar3 >> 0x1c);
|
|
uVar10 = uVar10 - 1;
|
|
puVar6 = puVar6 + 1;
|
|
} while (uVar10 != 0);
|
|
}
|
|
puVar7 = local_1048 + (int)uVar1;
|
|
puVar8 = _Dst;
|
|
if (0 < (int)(uVar1 + 1)) {
|
|
do {
|
|
uVar10 = *puVar7;
|
|
iVar9 = iVar9 + 1;
|
|
_Dst = puVar8 + 1;
|
|
puVar7 = puVar7 + 1;
|
|
*puVar8 = (uint)uVar10 & 0xfffffff;
|
|
puVar8 = _Dst;
|
|
} while (iVar9 < (int)(*param_2 + 1));
|
|
}
|
|
if (iVar9 < (int)uVar14) {
|
|
memset(_Dst,0,(ulonglong)(uVar14 - iVar9) << 2);
|
|
}
|
|
*param_1 = *param_2 + 1;
|
|
FUN_140109920((int *)param_1);
|
|
uVar4 = FUN_140109a90((int *)param_1,(int *)param_2);
|
|
if ((int)uVar4 == -1) {
|
|
uVar4 = 0;
|
|
}
|
|
else {
|
|
uVar4 = FUN_140109e70(param_1,param_2,param_1);
|
|
}
|
|
}
|
|
return uVar4;
|
|
}
|
|
|