255 lines
7.8 KiB
C
255 lines
7.8 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x14008f270 FUN_14008f270
|
|
* Pseudocode, not original source. */
|
|
|
|
ulonglong FUN_14008f270(longlong param_1,ulonglong param_2,ulonglong *param_3,undefined8 param_4)
|
|
|
|
{
|
|
longlong *plVar1;
|
|
undefined8 *puVar2;
|
|
undefined8 *puVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
ulonglong *puVar6;
|
|
undefined8 uVar7;
|
|
uint *puVar8;
|
|
ulonglong *puVar9;
|
|
int *piVar10;
|
|
undefined ***pppuVar11;
|
|
undefined8 **ppuVar12;
|
|
char *pcVar13;
|
|
uint *puVar14;
|
|
uint uVar15;
|
|
uint uVar16;
|
|
uint uVar17;
|
|
ulonglong *puVar18;
|
|
longlong *plVar19;
|
|
ulonglong uVar20;
|
|
uint **ppuVar21;
|
|
uint *local_res8;
|
|
int *local_res20;
|
|
undefined8 *local_98;
|
|
undefined8 local_90;
|
|
int *local_88;
|
|
undefined1 local_80;
|
|
int *local_78;
|
|
undefined1 local_70;
|
|
undefined **local_68;
|
|
undefined8 local_60;
|
|
undefined8 local_58;
|
|
undefined8 local_50;
|
|
undefined8 local_48;
|
|
|
|
local_90 = 0xfffffffffffffffe;
|
|
plVar19 = (longlong *)(param_2 & 0xffffffff);
|
|
puVar18 = param_3;
|
|
local_res8 = (uint *)FUN_14006cbf0(0x400);
|
|
puVar9 = (ulonglong *)0x0;
|
|
uVar16 = 0;
|
|
uVar17 = 0;
|
|
puVar6 = puVar9;
|
|
if (local_res8 != (uint *)0x0) {
|
|
puVar18 = (ulonglong *)(param_1 + 0x60);
|
|
if (param_1 == 0) {
|
|
puVar18 = puVar9;
|
|
}
|
|
puVar6 = FUN_1400724c0((undefined8 *)local_res8,0,puVar18,param_4);
|
|
}
|
|
if (puVar6 == (ulonglong *)0x0) {
|
|
local_98 = (undefined8 *)0x0;
|
|
}
|
|
else {
|
|
local_98 = (undefined8 *)FUN_14006cbf0(0x10);
|
|
local_98[1] = 1;
|
|
*local_98 = puVar6;
|
|
}
|
|
puVar2 = local_98;
|
|
ppuVar12 = &local_98;
|
|
FUN_14006e8a0((longlong *)(param_1 + 0x748),(longlong *)ppuVar12);
|
|
puVar3 = local_98;
|
|
if (puVar2 != (undefined8 *)0x0) {
|
|
plVar1 = puVar2 + 1;
|
|
*plVar1 = *plVar1 + -1;
|
|
if (*plVar1 == 0) {
|
|
plVar1 = (longlong *)*local_98;
|
|
if (plVar1 != (longlong *)0x0) {
|
|
FUN_140072370(plVar1,ppuVar12,(longlong *)puVar18,param_4);
|
|
FUN_14006cc60(plVar1);
|
|
}
|
|
FUN_14006cc60(puVar3);
|
|
}
|
|
}
|
|
puVar6 = puVar9;
|
|
if (*(undefined8 **)(param_1 + 0x748) != (undefined8 *)0x0) {
|
|
puVar6 = (ulonglong *)**(undefined8 **)(param_1 + 0x748);
|
|
}
|
|
*(undefined1 *)((longlong)puVar6 + 0x314) = 1;
|
|
pcVar13 = *(char **)(param_1 + 0x218);
|
|
if (*(char **)(param_1 + 0x218) == (char *)0x0) {
|
|
pcVar13 = PTR_DAT_1401ac008;
|
|
}
|
|
puVar6 = puVar9;
|
|
if (*(undefined8 **)(param_1 + 0x748) != (undefined8 *)0x0) {
|
|
puVar6 = (ulonglong *)**(undefined8 **)(param_1 + 0x748);
|
|
}
|
|
uVar7 = FUN_140073b00((longlong)puVar6,pcVar13,(short)plVar19,param_4);
|
|
if ((char)uVar7 != '\0') {
|
|
puVar6 = puVar9;
|
|
if (*(undefined8 **)(param_1 + 0x748) != (undefined8 *)0x0) {
|
|
puVar6 = (ulonglong *)**(undefined8 **)(param_1 + 0x748);
|
|
}
|
|
FUN_1400734d0((longlong)puVar6,pcVar13,plVar19,param_4);
|
|
puVar6 = puVar9;
|
|
if (*(undefined8 **)(param_1 + 0x748) != (undefined8 *)0x0) {
|
|
puVar6 = (ulonglong *)**(undefined8 **)(param_1 + 0x748);
|
|
}
|
|
FUN_1400716c0((longlong)puVar6,param_1 + 0xb0,plVar19,param_4);
|
|
if (*(undefined8 **)(param_1 + 0x748) != (undefined8 *)0x0) {
|
|
puVar9 = (ulonglong *)**(undefined8 **)(param_1 + 0x748);
|
|
}
|
|
uVar7 = FUN_1400765b0(*(longlong *)(param_1 + 0x790),(longlong *)puVar9,plVar19,param_4);
|
|
return CONCAT71((int7)((ulonglong)uVar7 >> 8),1);
|
|
}
|
|
FUN_14006cb70(puVar6,pcVar13,plVar19,param_4);
|
|
local_res8 = (uint *)PTR_DAT_1401ac010;
|
|
uVar4 = FUN_14006c9f0(&DAT_14015cd00);
|
|
if ((local_res8 != (uint *)0x0) &&
|
|
(puVar9 = (ulonglong *)0x0, local_res8 != (uint *)PTR_DAT_1401ac010)) {
|
|
puVar9 = (ulonglong *)(ulonglong)local_res8[-2];
|
|
}
|
|
uVar5 = uVar4;
|
|
if ((((int)uVar4 <= (int)puVar9) && (uVar5 = uVar17, local_res8 != (uint *)0x0)) &&
|
|
(local_res8 != (uint *)PTR_DAT_1401ac010)) {
|
|
uVar5 = local_res8[-2];
|
|
}
|
|
uVar15 = 1;
|
|
if (1 < (int)uVar5) {
|
|
uVar15 = uVar5;
|
|
}
|
|
uVar5 = uVar17;
|
|
if ((local_res8 != (uint *)0x0) && (local_res8 != (uint *)PTR_DAT_1401ac010)) {
|
|
uVar5 = local_res8[-2];
|
|
}
|
|
if ((int)uVar5 < (int)uVar15) {
|
|
if (local_res8 == (uint *)0x0) {
|
|
local_res8 = (uint *)PTR_DAT_1401ac010;
|
|
}
|
|
if ((int)uVar15 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
if (uVar15 == 0) {
|
|
FUN_1400031e0((longlong *)&local_res8,PTR_DAT_1401ac010,puVar9,param_4);
|
|
}
|
|
else {
|
|
uVar5 = uVar17;
|
|
if ((local_res8 != (uint *)0x0) && (local_res8 != (uint *)PTR_DAT_1401ac010)) {
|
|
uVar5 = local_res8[-2];
|
|
}
|
|
if (uVar15 != uVar5) {
|
|
puVar8 = (uint *)FUN_14006cbf0((longlong)(int)uVar15 * 2 + 10);
|
|
if (puVar8 != (uint *)0x0) {
|
|
*puVar8 = 0;
|
|
puVar8[1] = 1;
|
|
}
|
|
*puVar8 = uVar15;
|
|
uVar5 = uVar17;
|
|
if ((local_res8 != (uint *)0x0) && (local_res8 != (uint *)PTR_DAT_1401ac010)) {
|
|
uVar5 = local_res8[-2];
|
|
}
|
|
puVar14 = (uint *)PTR_DAT_1401ac010;
|
|
if ((int)uVar15 < (int)uVar5) {
|
|
LAB_14008f48d:
|
|
if (local_res8 != (uint *)0x0) {
|
|
puVar14 = local_res8;
|
|
}
|
|
}
|
|
else {
|
|
uVar15 = uVar17;
|
|
if (local_res8 != (uint *)0x0) {
|
|
if (local_res8 != (uint *)PTR_DAT_1401ac010) {
|
|
uVar15 = local_res8[-2];
|
|
}
|
|
goto LAB_14008f48d;
|
|
}
|
|
}
|
|
uVar20 = (ulonglong)uVar15;
|
|
FUN_14006ca20(puVar8 + 2,puVar14,uVar15);
|
|
FUN_1400031e0((longlong *)&local_res8,puVar14,uVar20,param_4);
|
|
local_res8 = puVar8 + 2;
|
|
}
|
|
}
|
|
}
|
|
FUN_140002e40((longlong *)&local_res8);
|
|
puVar8 = local_res8;
|
|
if (local_res8 == (uint *)0x0) {
|
|
puVar8 = (uint *)PTR_DAT_1401ac010;
|
|
}
|
|
FUN_14006ca20(puVar8,&DAT_14015cd00,uVar4);
|
|
puVar8 = local_res8;
|
|
if (local_res8 == (uint *)0x0) {
|
|
puVar8 = (uint *)PTR_DAT_1401ac010;
|
|
}
|
|
uVar4 = FUN_14006c9f0((short *)puVar8);
|
|
uVar17 = uVar16;
|
|
if (0 < (int)uVar4) {
|
|
uVar17 = uVar4;
|
|
}
|
|
uVar4 = uVar16;
|
|
if ((local_res8 != (uint *)0x0) && (local_res8 != (uint *)PTR_DAT_1401ac010)) {
|
|
uVar4 = local_res8[-2];
|
|
}
|
|
if (((int)uVar4 <= (int)uVar17) && (uVar17 = uVar16, local_res8 != (uint *)0x0)) {
|
|
if (local_res8 == (uint *)PTR_DAT_1401ac010) goto LAB_14008f53d;
|
|
uVar17 = local_res8[-2];
|
|
}
|
|
if (((local_res8 != (uint *)PTR_DAT_1401ac010) && (local_res8 != (uint *)0x0)) &&
|
|
(local_res8 + -2 != (uint *)0x0)) {
|
|
local_res8[-2] = uVar17;
|
|
*(undefined2 *)((longlong)local_res8 + (longlong)(int)uVar17 * 2) = 0;
|
|
}
|
|
LAB_14008f53d:
|
|
local_60 = 0;
|
|
local_58 = 0;
|
|
local_50 = 0;
|
|
local_48 = 0;
|
|
local_68 = Proud::ByteArray::vftable;
|
|
ppuVar21 = &local_res8;
|
|
uVar7 = 1;
|
|
puVar9 = (ulonglong *)
|
|
FUN_140078c10((longlong *)&local_res20,0x10,1,(longlong *)ppuVar21,(longlong)&local_68);
|
|
FUN_140078ae0(param_3,puVar9,uVar7,ppuVar21);
|
|
piVar10 = local_res20;
|
|
if (local_res20 != (int *)0x0) {
|
|
local_88 = local_res20;
|
|
FUN_14006b350(local_res20);
|
|
local_80 = 1;
|
|
*(longlong *)(local_res20 + 0x10) = *(longlong *)(local_res20 + 0x10) + -1;
|
|
if (*(longlong *)(local_res20 + 0x10) == 0) {
|
|
FUN_14006b3e0((longlong)piVar10);
|
|
local_80 = 0;
|
|
FUN_1400640e0(local_res20,puVar9,uVar7,ppuVar21);
|
|
}
|
|
else {
|
|
FUN_14006b3e0((longlong)piVar10);
|
|
}
|
|
}
|
|
pppuVar11 = &local_68;
|
|
FUN_140078360(pppuVar11);
|
|
puVar8 = local_res8;
|
|
if (((local_res8 != (uint *)0x0) && (local_res8 != (uint *)PTR_DAT_1401ac010)) &&
|
|
(puVar14 = local_res8 + -2, puVar14 != (uint *)0x0)) {
|
|
piVar10 = (int *)FUN_14006cb70(pppuVar11,puVar9,uVar7,ppuVar21);
|
|
local_78 = piVar10;
|
|
FUN_14006b350(piVar10);
|
|
local_70 = 1;
|
|
puVar8 = puVar8 + -1;
|
|
*puVar8 = *puVar8 - 1;
|
|
if (*puVar8 == 0) {
|
|
FUN_14006cc60(puVar14);
|
|
}
|
|
local_res8 = (uint *)FUN_14006b3e0((longlong)piVar10);
|
|
}
|
|
return (ulonglong)local_res8 & 0xffffffffffffff00;
|
|
}
|
|
|