310 lines
11 KiB
C
310 lines
11 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x1400e2e10 FUN_1400e2e10
|
|
* Pseudocode, not original source. */
|
|
|
|
ulonglong FUN_1400e2e10(longlong param_1,IMAGE_DOS_HEADER *param_2,uint *param_3,
|
|
undefined ***param_4)
|
|
|
|
{
|
|
undefined1 uVar1;
|
|
ushort uVar2;
|
|
ulonglong in_RAX;
|
|
ulonglong uVar3;
|
|
undefined8 uVar4;
|
|
longlong *plVar5;
|
|
longlong *plVar6;
|
|
longlong *plVar7;
|
|
undefined1 *puVar8;
|
|
longlong **pplVar9;
|
|
longlong **pplVar10;
|
|
longlong **pplVar11;
|
|
longlong **pplVar12;
|
|
uint *puVar13;
|
|
SIZE_T SVar14;
|
|
int iVar15;
|
|
longlong **pplVar16;
|
|
int iVar17;
|
|
uint uVar18;
|
|
longlong **pplVar20;
|
|
double dVar21;
|
|
uint local_res18 [2];
|
|
longlong *local_res20;
|
|
undefined8 local_178;
|
|
longlong local_170;
|
|
longlong local_168;
|
|
undefined4 local_160;
|
|
int local_15c;
|
|
undefined **local_150;
|
|
undefined8 local_148;
|
|
longlong **local_140;
|
|
ulonglong local_138;
|
|
undefined8 local_130;
|
|
undefined **local_128;
|
|
longlong **local_120;
|
|
longlong **local_118;
|
|
undefined8 local_110;
|
|
undefined8 local_108;
|
|
longlong **local_100;
|
|
undefined1 local_f8 [56];
|
|
word local_c0 [2];
|
|
undefined2 local_bc;
|
|
byte local_b8;
|
|
undefined **local_a8;
|
|
uint local_a0;
|
|
byte local_9c [4];
|
|
byte local_98 [8];
|
|
int local_90 [2];
|
|
ulonglong local_88;
|
|
uint local_80 [2];
|
|
byte local_78 [8];
|
|
undefined1 local_70;
|
|
undefined4 local_6c;
|
|
undefined1 local_68;
|
|
undefined1 local_67;
|
|
undefined8 local_60;
|
|
longlong **pplVar19;
|
|
|
|
local_60 = 0xfffffffffffffffe;
|
|
if (((param_3[10] != 1) ||
|
|
(puVar13 = param_3, in_RAX = FUN_1400bd160(param_3,local_res18,param_3,param_4),
|
|
(char)in_RAX == '\0')) ||
|
|
(in_RAX = FUN_1400bcfd0(param_3,(undefined8 *)local_98,puVar13,param_4), (char)in_RAX == '\0'))
|
|
goto LAB_1400e337b;
|
|
pplVar11 = (longlong **)0x0;
|
|
local_120 = (longlong **)0x0;
|
|
local_118 = (longlong **)0x0;
|
|
local_110 = 0;
|
|
local_108 = 0;
|
|
local_128 = Proud::HostIDArray::vftable;
|
|
in_RAX = FUN_1400bcfd0(param_3,(undefined8 *)local_90,puVar13,param_4);
|
|
pplVar12 = pplVar11;
|
|
pplVar9 = pplVar11;
|
|
if ((((char)in_RAX == '\0') || (pplVar12 = (longlong **)0x0, local_90[0] < 0)) ||
|
|
(DAT_1401ac140 < local_90[0])) {
|
|
LAB_1400e335b:
|
|
if (pplVar12 == (longlong **)0x0) goto LAB_1400e337b;
|
|
if (pplVar9 == (longlong **)0x0) {
|
|
LAB_1400e3373:
|
|
in_RAX = FUN_14006cc60(pplVar12);
|
|
goto LAB_1400e337b;
|
|
}
|
|
plVar6 = *pplVar9;
|
|
}
|
|
else {
|
|
FUN_14007b600((longlong)&local_128,local_90[0],(longlong)puVar13);
|
|
pplVar12 = local_118;
|
|
iVar17 = (int)local_110;
|
|
pplVar9 = local_118;
|
|
if ((int)local_110 == 0) {
|
|
pplVar9 = pplVar11;
|
|
}
|
|
SVar14 = (SIZE_T)(uint)(local_90[0] * 4);
|
|
in_RAX = FUN_1400bc930(param_3,pplVar9,SVar14);
|
|
pplVar9 = local_120;
|
|
if ((char)in_RAX == '\0') goto LAB_1400e335b;
|
|
local_148 = 0;
|
|
local_140 = (longlong **)0x0;
|
|
local_138 = 0;
|
|
local_130 = 0;
|
|
local_150 = Proud::ByteArray::vftable;
|
|
uVar3 = FUN_1400bcfd0(param_3,&local_88,SVar14,param_4);
|
|
if ((((char)uVar3 != '\0') && (iVar15 = (int)local_88, -1 < iVar15)) &&
|
|
(iVar15 <= DAT_1401ac140)) {
|
|
FUN_1400146f0((longlong)&local_150,iVar15,SVar14);
|
|
pplVar9 = local_140;
|
|
if ((int)local_138 == 0) {
|
|
pplVar9 = pplVar11;
|
|
}
|
|
SVar14 = local_88 & 0xffffffff;
|
|
uVar4 = FUN_1400bc930(param_3,pplVar9,SVar14);
|
|
if ((char)uVar4 != '\0') {
|
|
FUN_1400bca00((undefined4 *)&local_178);
|
|
FUN_1400bc4d0((longlong)&local_178,pplVar9,SVar14,param_4);
|
|
FUN_1400bcb60((int *)&local_178,0x800,SVar14,param_4);
|
|
uVar4 = 0;
|
|
FUN_1400bcb60((int *)&local_178,0,SVar14,param_4);
|
|
FUN_140054a10((longlong)&local_178,CONCAT71((int7)((ulonglong)uVar4 >> 8),0x23),SVar14,
|
|
param_4);
|
|
uVar3 = local_138;
|
|
iVar15 = (int)local_138;
|
|
plVar6 = &local_178;
|
|
FUN_1400bddd0((longlong)plVar6,(longlong)(int)local_138,SVar14,param_4);
|
|
pplVar9 = local_140;
|
|
if ((int)local_138 == 0) {
|
|
pplVar9 = pplVar11;
|
|
}
|
|
if (iVar15 != 0) {
|
|
local_178._4_4_ = 0;
|
|
if (local_170 == 0) {
|
|
if (local_168 == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_1400d1900(0,pplVar9,SVar14,param_4);
|
|
}
|
|
LAB_1400e2ffe:
|
|
SVar14 = uVar3 & 0xffffffff;
|
|
FUN_1400145e0(&local_168,pplVar9,SVar14,param_4);
|
|
}
|
|
else {
|
|
if (local_168 != 0) goto LAB_1400e2ffe;
|
|
if (local_170 == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_1400d1900(0,pplVar9,SVar14,param_4);
|
|
}
|
|
SVar14 = uVar3 & 0xffffffff;
|
|
FUN_1400147b0(local_170,pplVar9,SVar14);
|
|
}
|
|
plVar6 = &local_178;
|
|
FUN_140014820((longlong)plVar6,pplVar9,SVar14,param_4);
|
|
}
|
|
local_70 = DAT_1401b61a0;
|
|
local_6c = 0xffffffff;
|
|
local_68 = DAT_1401b61c0;
|
|
local_80[0] = local_res18[0];
|
|
local_78[0] = local_98[0];
|
|
local_78[1] = local_98[1];
|
|
local_78[2] = local_98[2];
|
|
local_78[3] = local_98[3];
|
|
local_78[4] = local_98[4];
|
|
local_78[5] = local_98[5];
|
|
local_78[6] = local_98[6];
|
|
local_78[7] = local_98[7];
|
|
local_67 = 0;
|
|
pplVar19 = pplVar11;
|
|
pplVar20 = pplVar11;
|
|
if (0 < iVar17) {
|
|
do {
|
|
if (((longlong)pplVar20 < 0) || (iVar17 <= (int)pplVar19)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(plVar6,pplVar9,SVar14,param_4);
|
|
}
|
|
plVar6 = *(longlong **)(param_1 + 0x108);
|
|
pplVar9 = (longlong **)((longlong)pplVar12 + (longlong)pplVar20 * 4);
|
|
local_100 = pplVar9;
|
|
if (*(uint *)pplVar9 != *(uint *)(plVar6 + 0x2af)) {
|
|
SVar14 = (SIZE_T)*(uint *)pplVar9;
|
|
pplVar10 = &local_res20;
|
|
plVar5 = FUN_1400aca90(plVar6,(longlong *)pplVar10,*(uint *)pplVar9);
|
|
plVar7 = local_res20;
|
|
pplVar16 = pplVar11;
|
|
if ((undefined8 *)*plVar5 != (undefined8 *)0x0) {
|
|
pplVar16 = *(longlong ***)*plVar5;
|
|
}
|
|
pplVar9 = pplVar10;
|
|
if (local_res20 != (longlong *)0x0) {
|
|
local_res20[1] = local_res20[1] + -1;
|
|
plVar6 = (longlong *)local_res20[1];
|
|
if ((longlong *)local_res20[1] == (longlong *)0x0) {
|
|
if ((undefined8 *)*local_res20 != (undefined8 *)0x0) {
|
|
pplVar10 = (longlong **)0x1;
|
|
(*(code *)**(undefined8 **)*local_res20)();
|
|
}
|
|
FUN_14006cc60(plVar7);
|
|
plVar6 = plVar7;
|
|
}
|
|
pplVar9 = pplVar10;
|
|
pplVar12 = local_118;
|
|
iVar17 = (int)local_110;
|
|
}
|
|
if ((((pplVar16 != (longlong **)0x0) &&
|
|
(*(char *)((longlong)pplVar16 + 0x684) == '\0')) &&
|
|
(*(char *)(pplVar16 + 0xc1) != '\x01')) &&
|
|
((pplVar16[3] != (longlong *)0x0 && (*pplVar16[3] != 0)))) {
|
|
local_a8 = Proud::AddrPort::vftable;
|
|
local_a0 = *(uint *)(pplVar16 + 0xb3);
|
|
local_9c._0_2_ = *(undefined2 *)((longlong)pplVar16 + 0x59c);
|
|
plVar6 = *(longlong **)(param_1 + 0x108);
|
|
dVar21 = (double)(**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x70) +
|
|
0x1c0))();
|
|
uVar1 = (**(code **)(*plVar6 + 0x30))(plVar6);
|
|
uVar2 = FUN_1400d3400(uVar1,(char)*(uint *)local_100);
|
|
plVar6 = (longlong *)FUN_1400eff40((longlong)pplVar16);
|
|
param_4 = &local_a8;
|
|
SVar14 = (SIZE_T)uVar2;
|
|
pplVar9 = (longlong **)(ulonglong)*(uint *)local_100;
|
|
FUN_1400f3e80((longlong)plVar6,*(uint *)local_100,SVar14,(longlong)param_4,
|
|
(longlong)&local_178,dVar21,(undefined8 *)local_80);
|
|
}
|
|
}
|
|
uVar18 = (int)pplVar19 + 1;
|
|
pplVar19 = (longlong **)(ulonglong)uVar18;
|
|
pplVar20 = (longlong **)((longlong)pplVar20 + 1);
|
|
} while ((int)uVar18 < iVar17);
|
|
}
|
|
FUN_1400bca00((undefined4 *)local_f8);
|
|
local_f8._48_8_ = Proud::AddrPort::vftable;
|
|
local_b8 = 0;
|
|
local_c0[0] = (word)DAT_1401ac3d0;
|
|
local_c0[1] = DAT_1401ac3d0._2_2_;
|
|
local_bc = DAT_1401ac3d4;
|
|
local_f8._40_2_ = 1;
|
|
local_f8._42_2_ = 0;
|
|
puVar8 = local_f8;
|
|
FUN_1400bc4d0((longlong)puVar8,pplVar9,SVar14,param_4);
|
|
SVar14 = local_138 & 0xffffffff;
|
|
if ((int)local_138 < 1) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(puVar8,pplVar9,SVar14,param_4);
|
|
}
|
|
local_f8._4_2_ = 0;
|
|
local_f8._6_2_ = 0;
|
|
pplVar11 = local_140;
|
|
if (local_f8._8_8_ == 0) {
|
|
if (local_f8._16_8_ == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_1400d1900(0,pplVar9,SVar14,param_4);
|
|
}
|
|
}
|
|
else if (local_f8._16_8_ == 0) {
|
|
if (local_f8._8_8_ == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_1400d1900(0,pplVar9,SVar14,param_4);
|
|
}
|
|
FUN_1400147b0(local_f8._8_8_,local_140,SVar14);
|
|
goto LAB_1400e3289;
|
|
}
|
|
FUN_1400145e0((longlong *)(local_f8 + 0x10),local_140,SVar14,param_4);
|
|
LAB_1400e3289:
|
|
FUN_140014820((longlong)local_f8,pplVar11,SVar14,param_4);
|
|
FUN_1400e6e40((IMAGE_DOS_HEADER *)param_1,param_2,(IMAGE_DOS_HEADER *)local_f8,param_4);
|
|
local_res20 = (longlong *)(local_f8 + 8);
|
|
FUN_1400d1800((longlong *)(local_f8 + 8));
|
|
if (local_f8._16_8_ != 0) {
|
|
if ((int)local_f8._28_4_ < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
local_f8._24_2_ = 0;
|
|
local_f8._26_2_ = 0;
|
|
}
|
|
local_res20 = &local_170;
|
|
FUN_1400d1800(&local_170);
|
|
if (local_168 != 0) {
|
|
if (local_15c < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
local_160 = 0;
|
|
}
|
|
uVar4 = FUN_140078360(&local_150);
|
|
if (pplVar12 != (longlong **)0x0) {
|
|
if (local_120 == (longlong **)0x0) {
|
|
uVar4 = FUN_14006cc60(pplVar12);
|
|
}
|
|
else {
|
|
uVar4 = (*(code *)(*local_120)[3])(local_120,pplVar12);
|
|
}
|
|
}
|
|
return CONCAT71((int7)((ulonglong)uVar4 >> 8),1);
|
|
}
|
|
}
|
|
in_RAX = FUN_140078360(&local_150);
|
|
if (pplVar12 == (longlong **)0x0) goto LAB_1400e337b;
|
|
if (local_120 == (longlong **)0x0) goto LAB_1400e3373;
|
|
plVar6 = *local_120;
|
|
pplVar9 = local_120;
|
|
}
|
|
in_RAX = (*(code *)plVar6[3])(pplVar9,pplVar12);
|
|
LAB_1400e337b:
|
|
return in_RAX & 0xffffffffffffff00;
|
|
}
|
|
|