server-re/decomp/MessageServer_Release_x64/full/functions/0x1400e76a0.c

183 lines
6.5 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400e76a0 FUN_1400e76a0
* Pseudocode, not original source. */
void FUN_1400e76a0(IMAGE_DOS_HEADER *param_1,IMAGE_DOS_HEADER *param_2,undefined **param_3,
undefined ***param_4)
{
undefined **ppuVar1;
int *piVar2;
longlong *plVar3;
longlong lVar4;
char cVar5;
IMAGE_DOS_HEADER *pIVar6;
undefined8 uVar7;
undefined **ppuVar8;
IMAGE_DOS_HEADER *pIVar9;
int *piVar10;
undefined ***pppuVar11;
int iVar12;
undefined **ppuVar13;
longlong lVar14;
uint local_res8 [2];
undefined **local_res10;
longlong local_e8;
undefined **local_e0;
undefined4 local_d8;
undefined2 local_d4;
undefined **local_d0;
undefined8 local_c8;
longlong local_c0;
undefined8 local_b8;
undefined4 local_b0;
undefined4 local_ac;
undefined **local_a8;
undefined4 local_a0;
undefined2 local_9c;
undefined **local_98;
undefined4 local_90;
word local_8c;
undefined **local_88;
word local_80 [2];
word local_7c;
undefined **local_78;
word local_70 [2];
word local_6c;
int *local_68;
undefined1 local_60;
byte local_58 [32];
local_58[0] = 0xfe;
local_58[1] = 0xff;
local_58[2] = 0xff;
local_58[3] = 0xff;
local_58[4] = 0xff;
local_58[5] = 0xff;
local_58[6] = 0xff;
local_58[7] = 0xff;
pIVar6 = param_2;
ppuVar13 = param_3;
(**(code **)(*(longlong *)(*(longlong *)&param_1[2].e_cparhdr + 0x78) + 0x10))();
param_2[1].e_program[0] = 0;
if ((*(double *)(param_2[2].e_program + 8) == 0.0) && (0 < *(int *)(param_3 + 1))) {
lVar14 = (**(code **)(*(longlong *)(*(longlong *)&param_1[2].e_cparhdr + 0x70) + 0x1c0))();
plVar3 = (longlong *)(*(longlong *)&param_1[2].e_cparhdr + 0x678);
*plVar3 = *plVar3 + 1;
lVar4 = *(longlong *)&param_1[2].e_cparhdr;
plVar3 = (longlong *)(lVar4 + 0x680);
*plVar3 = *plVar3 + (longlong)*(int *)(param_3 + 1);
local_e0 = Proud::AddrPort::vftable;
pIVar9 = (IMAGE_DOS_HEADER *)0x0;
local_d8 = 0;
local_d4 = 0;
local_e8 = 0;
FUN_14006cb70(lVar4,pIVar6,ppuVar13,param_4);
local_res10 = (undefined **)PTR_DAT_1401ac010;
local_78 = Proud::AddrPort::vftable;
local_80 = *(word (*) [2])(param_3 + 6);
local_7c = *(word *)((longlong)param_3 + 0x34);
local_88 = Proud::AddrPort::vftable;
pIVar6 = pIVar9;
if (*(undefined8 **)(param_2 + 2) != (undefined8 *)0x0) {
pIVar6 = (IMAGE_DOS_HEADER *)**(undefined8 **)(param_2 + 2);
}
pppuVar11 = *(undefined ****)&param_2[3].e_cparhdr;
local_70 = local_80;
local_6c = local_7c;
cVar5 = (**(code **)(**(longlong **)&param_1[2].e_cparhdr + 0xe0))
(*(longlong **)&param_1[2].e_cparhdr,&local_78);
pIVar6 = (IMAGE_DOS_HEADER *)FUN_140072240((longlong)pIVar6);
param_4 = &local_88;
ppuVar13 = (undefined **)(ulonglong)*(uint *)(param_3 + 1);
uVar7 = FUN_1400d6a50(pppuVar11,(longlong)pIVar6,*(uint *)(param_3 + 1),(longlong)param_4,cVar5,
lVar14,&local_e8,(longlong *)&local_res10);
if ((int)uVar7 == 0) {
local_c8 = 0;
local_c0 = 0;
local_b8 = 0;
local_d0 = Proud::CReceivedMessageList::vftable;
local_b0 = 1000;
local_ac = 1;
local_a8 = Proud::AddrPort::vftable;
local_a0 = local_d8;
local_9c = local_d4;
ppuVar13 = (undefined **)(ulonglong)*(uint *)(local_e8 + 0x40);
pIVar6 = pIVar9;
if (*(uint *)(local_e8 + 0x40) != 0) {
pIVar6 = *(IMAGE_DOS_HEADER **)(local_e8 + 0x38);
}
param_4 = &local_a8;
pppuVar11 = *(undefined ****)&param_1[2].e_cparhdr;
FUN_1400b02e0(pppuVar11,(longlong)pIVar6,ppuVar13,(longlong)param_4,(uint *)&local_d0,
local_res8);
while (iVar12 = (int)pIVar9, iVar12 != (int)local_b8) {
if ((iVar12 < 0) || ((int)local_b8 <= iVar12)) {
/* WARNING: Subroutine does not return */
FUN_14006be30(pppuVar11,pIVar6,ppuVar13,param_4);
}
pIVar6 = (IMAGE_DOS_HEADER *)(local_c0 + (longlong)iVar12 * 0x48);
lVar4 = *(longlong *)&param_1[2].e_cparhdr;
param_4 = (undefined ***)0x0;
ppuVar13 = *(undefined ***)(lVar4 + 0x6f0);
ppuVar8 = (undefined **)
FUN_1400e2d60((longlong *)(lVar4 + 0x6e0),(undefined4 *)pIVar6,ppuVar13,0);
pppuVar11 = *(undefined ****)(lVar4 + 0x6f0);
if (pppuVar11 == (undefined ***)0x0) {
*(undefined ***)(lVar4 + 0x6e8) = ppuVar8;
}
else {
*pppuVar11 = ppuVar8;
}
*(undefined ***)(lVar4 + 0x6f0) = ppuVar8;
if ((int)local_b8 <= iVar12) {
/* WARNING: Subroutine does not return */
FUN_14006be30(pppuVar11,pIVar6,ppuVar13,param_4);
}
pIVar9 = (IMAGE_DOS_HEADER *)(ulonglong)(iVar12 + 1);
}
if ((*(longlong *)(param_2[2].e_res_4_ + 2) != 0) ||
(lVar4._0_2_ = param_1[2].e_cparhdr, lVar4._2_2_ = param_1[2].e_minalloc,
lVar4._4_2_ = param_1[2].e_maxalloc, lVar4._6_2_ = param_1[2].e_ss,
pIVar9 = (IMAGE_DOS_HEADER *)FUN_1400a0ef0(lVar4), param_2 == pIVar9)) {
pIVar6 = param_2;
FUN_1400e74f0(param_1,param_2,ppuVar13,param_4);
}
pppuVar11 = &local_d0;
FUN_1400c5af0(pppuVar11);
}
else if ((int)uVar7 == 2) {
ppuVar13 = local_res10;
if (local_res10 == (undefined **)0x0) {
ppuVar13 = (undefined **)PTR_DAT_1401ac010;
}
local_98 = Proud::AddrPort::vftable;
local_90 = *(undefined4 *)(param_3 + 6);
local_8c = *(word *)((longlong)param_3 + 0x34);
pppuVar11 = (undefined ***)(*(longlong *)&param_1[2].e_cparhdr + 0x88);
pIVar6 = (IMAGE_DOS_HEADER *)&local_98;
(*(code *)**pppuVar11)();
}
ppuVar8 = local_res10;
if (((local_res10 != (undefined **)0x0) && (local_res10 != (undefined **)PTR_DAT_1401ac010)) &&
(ppuVar1 = local_res10 + -1, ppuVar1 != (undefined **)0x0)) {
piVar10 = (int *)FUN_14006cb70(pppuVar11,pIVar6,ppuVar13,param_4);
local_68 = piVar10;
FUN_14006b350(piVar10);
local_60 = 1;
piVar2 = (int *)((longlong)ppuVar8 + -4);
*piVar2 = *piVar2 + -1;
if (*piVar2 == 0) {
FUN_14006cc60(ppuVar1);
}
FUN_14006b3e0((longlong)piVar10);
}
local_res10 = (undefined **)PTR_DAT_1401ac010;
if (local_e8 != 0) {
FUN_1400c28d0(local_e8,pIVar6,(SIZE_T)ppuVar13);
}
}
FUN_1400f3960((longlong)param_2,pIVar6,ppuVar13,param_4);
return;
}