192 lines
6 KiB
C
192 lines
6 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x1400f5f50 FUN_1400f5f50
|
|
* Pseudocode, not original source. */
|
|
|
|
void FUN_1400f5f50(undefined8 *param_1,longlong *param_2,longlong *param_3,undefined8 param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
undefined8 uVar2;
|
|
int iVar3;
|
|
undefined8 *puVar4;
|
|
longlong *_Dst;
|
|
longlong lVar5;
|
|
char cVar6;
|
|
uint uVar7;
|
|
longlong *plVar8;
|
|
uint uVar9;
|
|
ulonglong uVar10;
|
|
ulonglong uVar11;
|
|
longlong *plVar12;
|
|
double dVar13;
|
|
longlong *local_80;
|
|
longlong *local_78;
|
|
undefined8 local_70;
|
|
longlong *local_68;
|
|
undefined8 local_60;
|
|
undefined4 local_58;
|
|
undefined4 local_54;
|
|
undefined8 local_50;
|
|
undefined8 local_48;
|
|
undefined8 local_40;
|
|
undefined4 local_38;
|
|
|
|
cVar6 = (char)param_2;
|
|
dVar13 = (double)(**(code **)(**(longlong **)*param_1 + 0x18))
|
|
(*(longlong **)*param_1,param_2,param_3,param_4,0xfffffffffffffffe);
|
|
if ((((cVar6 != '\0') || (iVar3 = (**(code **)(**(longlong **)*param_1 + 0x20))(), iVar3 == 0)) ||
|
|
(DAT_1401ae2b8 < dVar13 - (double)param_1[4])) &&
|
|
(param_1[4] = dVar13, 0 < (longlong)param_1[0xd])) {
|
|
plVar12 = (longlong *)0x0;
|
|
do {
|
|
local_60 = (**(code **)(**(longlong **)*param_1 + 0x38))();
|
|
local_70 = 0;
|
|
local_78 = (longlong *)0x0;
|
|
local_80 = (longlong *)0x0;
|
|
local_68 = (longlong *)0x0;
|
|
local_54 = 0;
|
|
local_40 = 0;
|
|
local_50 = 0;
|
|
local_48 = 0;
|
|
local_38 = 0;
|
|
uVar1 = *(uint *)(param_1 + 1);
|
|
*(uint *)(param_1 + 1) = uVar1 + 1;
|
|
uVar9 = DAT_1401ba9d8;
|
|
if ((int)(uint)param_1[0xd] <= (int)DAT_1401ba9d8) {
|
|
uVar9 = (uint)param_1[0xd];
|
|
}
|
|
local_80 = (longlong *)FUN_1400d1840((ulonglong)uVar1,param_2,(SIZE_T)param_3);
|
|
local_80[5] = 1;
|
|
if ((int)uVar9 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
if (local_78 == (longlong *)0x0) {
|
|
if ((int)uVar9 < 1) {
|
|
if (local_80 == (longlong *)0x0) goto LAB_1400f608b;
|
|
param_3 = local_80;
|
|
uVar7 = 0;
|
|
}
|
|
else {
|
|
uVar7 = uVar9;
|
|
if (local_80 == (longlong *)0x0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_1400d1900(0,param_2,param_3,param_4);
|
|
}
|
|
}
|
|
FUN_1400146f0((longlong)local_80,uVar7,(SIZE_T)param_3);
|
|
}
|
|
else {
|
|
if (local_70._4_4_ < (int)uVar9) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
local_70 = CONCAT44(local_70._4_4_,uVar9);
|
|
}
|
|
LAB_1400f608b:
|
|
plVar8 = plVar12;
|
|
if (*(int *)(param_1 + 10) != 0) {
|
|
plVar8 = (longlong *)param_1[9];
|
|
}
|
|
plVar8 = (longlong *)((longlong)plVar8 + param_1[0xc]);
|
|
_Dst = local_78;
|
|
if (local_78 == (longlong *)0x0) {
|
|
if (local_80 == (longlong *)0x0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_1400d1900(0,plVar8,0,param_4);
|
|
}
|
|
_Dst = plVar12;
|
|
if ((int)local_80[3] != 0) {
|
|
_Dst = (longlong *)local_80[2];
|
|
}
|
|
}
|
|
param_2 = (longlong *)(longlong)(int)uVar9;
|
|
if (param_2 < (longlong *)0x21) {
|
|
uVar10 = (ulonglong)(uVar9 & 7);
|
|
for (uVar11 = (ulonglong)param_2 >> 3; uVar11 != 0; uVar11 = uVar11 - 1) {
|
|
*_Dst = *plVar8;
|
|
_Dst = _Dst + 1;
|
|
plVar8 = plVar8 + 1;
|
|
}
|
|
param_4 = 0;
|
|
param_3 = (longlong *)0x0;
|
|
if (uVar10 != 0) {
|
|
lVar5 = (longlong)_Dst - (longlong)plVar8;
|
|
do {
|
|
*(char *)(lVar5 + (longlong)plVar8) = (char)*plVar8;
|
|
plVar8 = (longlong *)((longlong)plVar8 + 1);
|
|
uVar10 = uVar10 - 1;
|
|
} while (uVar10 != 0);
|
|
param_3 = (longlong *)0x0;
|
|
}
|
|
}
|
|
else {
|
|
param_3 = param_2;
|
|
memcpy(_Dst,plVar8,(size_t)param_2);
|
|
}
|
|
uVar2 = param_1[0x10];
|
|
plVar8 = (longlong *)param_1[0xe];
|
|
if (plVar8 == (longlong *)0x0) {
|
|
puVar4 = (undefined8 *)FUN_14006cbf0(0x68);
|
|
}
|
|
else {
|
|
puVar4 = (undefined8 *)(**(code **)(*plVar8 + 8))(plVar8,0x68);
|
|
}
|
|
if (puVar4 != (undefined8 *)0x0) {
|
|
*(undefined4 *)(puVar4 + 2) = 1;
|
|
*(uint *)((longlong)puVar4 + 0x14) = uVar1;
|
|
puVar4[5] = 0;
|
|
puVar4[4] = 0;
|
|
if (local_80 == (longlong *)0x0) {
|
|
puVar4[3] = 0;
|
|
*(int *)((longlong)puVar4 + 0x2c) = local_70._4_4_;
|
|
puVar4[4] = local_78;
|
|
*(undefined4 *)(puVar4 + 5) = (undefined4)local_70;
|
|
}
|
|
else {
|
|
local_80[5] = local_80[5] + 1;
|
|
puVar4[3] = local_80;
|
|
}
|
|
puVar4[7] = local_60;
|
|
plVar8 = plVar12;
|
|
if (local_68 != (longlong *)0x0) {
|
|
local_68[1] = local_68[1] + 1;
|
|
plVar8 = local_68;
|
|
}
|
|
puVar4[6] = plVar8;
|
|
*(undefined4 *)(puVar4 + 8) = local_58;
|
|
*(undefined4 *)((longlong)puVar4 + 0x44) = local_54;
|
|
puVar4[9] = local_50;
|
|
puVar4[10] = local_48;
|
|
puVar4[0xb] = local_40;
|
|
*(undefined4 *)(puVar4 + 0xc) = local_38;
|
|
}
|
|
puVar4[1] = uVar2;
|
|
*puVar4 = 0;
|
|
param_1[0x11] = param_1[0x11] + 1;
|
|
if ((undefined8 *)param_1[0x10] == (undefined8 *)0x0) {
|
|
param_1[0xf] = puVar4;
|
|
}
|
|
else {
|
|
*(undefined8 *)param_1[0x10] = puVar4;
|
|
}
|
|
param_1[0x10] = puVar4;
|
|
FUN_1400f88b0(param_1 + 6,(longlong)param_2,param_3,param_4);
|
|
if (local_68 != (longlong *)0x0) {
|
|
plVar8 = local_68 + 1;
|
|
*plVar8 = *plVar8 + -1;
|
|
if (*plVar8 == 0) {
|
|
param_2 = local_68;
|
|
FUN_140080140((longlong)&local_68,local_68);
|
|
}
|
|
}
|
|
FUN_1400d1800((longlong *)&local_80);
|
|
if ((local_78 != (longlong *)0x0) && (local_70 < 0)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
} while (0 < (longlong)param_1[0xd]);
|
|
}
|
|
return;
|
|
}
|
|
|