decomp DBCServer_Release and inspect/document database

This commit is contained in:
Benjamin Palko 2026-10-14 23:22:03 -04:00
parent 4b267cbe05
commit 7834b98bf0
28222 changed files with 843300 additions and 144 deletions

View file

@ -0,0 +1,273 @@
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400c96e0 FUN_1400c96e0
* Pseudocode, not original source. */
void FUN_1400c96e0(byte **param_1,longlong param_2,IMAGE_DOS_HEADER *param_3,
IMAGE_DOS_HEADER *param_4)
{
undefined4 uVar1;
IMAGE_DOS_HEADER *pIVar2;
int iVar3;
int *piVar4;
IMAGE_DOS_HEADER *pIVar5;
IMAGE_DOS_HEADER *pIVar6;
undefined8 uVar7;
undefined8 *puVar8;
longlong *plVar9;
byte *pbVar10;
byte **ppbVar11;
word *pwVar12;
int iVar13;
byte *pbVar14;
IMAGE_DOS_HEADER *pIVar15;
IMAGE_DOS_HEADER *pIVar16;
longlong lVar17;
undefined1 local_170 [8];
IMAGE_DOS_HEADER *local_168;
longlong local_160;
undefined **local_158;
byte local_150 [4];
word local_14c;
undefined **local_148;
word local_140 [4];
undefined **local_138;
byte local_130 [4];
word local_12c;
undefined **local_128;
undefined4 local_120;
word local_11c;
longlong local_118;
undefined **local_110;
word local_108 [2];
word local_104;
undefined **local_100;
byte local_f8 [4];
word local_f4;
undefined **local_f0;
byte local_e8 [4];
word local_e4;
word *local_e0;
byte local_d8;
int *local_d0;
byte local_c8;
int *local_c0;
byte local_b8;
byte *local_b0;
byte local_a8 [8];
IMAGE_DOS_HEADER *local_a0;
byte local_98 [16];
int *local_88;
undefined1 local_80;
word *local_78;
undefined1 local_70;
word *local_68;
undefined1 local_60;
undefined8 local_58;
local_58 = 0xfffffffffffffffe;
pbVar14 = (byte *)0x0;
pbVar10 = param_3->e_program;
if (param_3 == (IMAGE_DOS_HEADER *)0x0) {
pbVar10 = pbVar14;
}
plVar9 = &local_118;
pIVar5 = param_3;
pIVar6 = param_4;
FUN_1400d8980(plVar9,(longlong)pbVar10);
if (*(int *)(param_2 + 8) < 1) {
pwVar12 = param_3[1].e_res2_10_;
local_68 = pwVar12;
FUN_14006b350((int *)pwVar12);
local_60 = 1;
param_3[2].e_program[0] = 0;
FUN_1400d8bf0((longlong)param_3,pbVar10,(undefined **)pIVar5,pIVar6);
FUN_14006b3e0((longlong)pwVar12);
goto LAB_1400c9ced;
}
local_158 = Proud::AddrPort::vftable;
local_150[0] = 0;
local_150[1] = 0;
local_150[2] = 0;
local_150[3] = 0;
local_14c = 0;
local_160 = 0;
local_148 = Proud::AddrPort::vftable;
local_140[0] = 0;
local_140[1] = 0;
local_140[2] = 0;
FUN_14006cb70(plVar9,pbVar10,pIVar5,pIVar6);
local_168 = (IMAGE_DOS_HEADER *)PTR_DAT_1401ac010;
piVar4 = (int *)(**(code **)(*(longlong *)param_1[0x29] + 0x58))();
local_c0 = piVar4;
FUN_14006b350(piVar4);
local_b8 = 1;
if (DAT_1401b42cf != '\0') {
(**(code **)(*(longlong *)param_1[0x29] + 200))
(param_1[0x29],L"Proud::CNetThreads_S::NetWorkerThread_UdpRecvCompletionCase");
}
lVar17 = (**(code **)(*(longlong *)(param_1[0x29] + 0x118) + 8))();
local_f0 = Proud::AddrPort::vftable;
local_e8 = *(byte (*) [4])(param_2 + 0x30);
local_e4 = *(word *)(param_2 + 0x34);
pIVar5 = (IMAGE_DOS_HEADER *)FUN_14007c190((longlong)param_1[0x29],(longlong)&local_f0);
local_100 = Proud::AddrPort::vftable;
local_f8 = *(byte (*) [4])(param_2 + 0x30);
local_f4 = *(word *)(param_2 + 0x34);
local_170._0_4_ = FUN_14007cde0((longlong)param_1[0x29],(longlong)&local_100);
uVar1 = *(undefined4 *)(param_1[0x29] + 0x22c);
if (pIVar5 != (IMAGE_DOS_HEADER *)0x0) {
FUN_1400d8960((longlong)pIVar5[1].e_program);
local_140[0] = pIVar5[0xe].e_sp;
local_140[1] = pIVar5[0xe].e_csum;
local_140[2] = pIVar5[0xe].e_ip;
}
FUN_14006b3e0((longlong)piVar4);
local_b8 = 0;
local_e0 = param_3[1].e_res2_10_;
FUN_14006b350((int *)local_e0);
local_d8 = 1;
local_128 = Proud::AddrPort::vftable;
local_120 = *(undefined4 *)(param_2 + 0x30);
local_11c = *(word *)(param_2 + 0x34);
pbVar10 = pbVar14;
if (*(ulonglong **)(param_3[2].e_program + 0x10) != (ulonglong *)0x0) {
pbVar10 = (byte *)**(ulonglong **)(param_3[2].e_program + 0x10);
}
puVar8 = *(undefined8 **)(param_3[2].e_program + 0x38);
pIVar6 = (IMAGE_DOS_HEADER *)FUN_140072240((longlong)pbVar10);
pIVar16 = (IMAGE_DOS_HEADER *)&local_128;
pIVar15 = (IMAGE_DOS_HEADER *)(ulonglong)*(uint *)(param_2 + 8);
uVar7 = FUN_1400d6a50(puVar8,(longlong)pIVar6,*(uint *)(param_2 + 8),(longlong)pIVar16,
(char)local_170._0_4_,lVar17,&local_160,(longlong *)&local_168);
FUN_14006b3e0((longlong)param_3[1].e_res2_10_);
local_d8 = 0;
if ((int)uVar7 == 0) {
if (pIVar5 != (IMAGE_DOS_HEADER *)0x0) {
*(longlong *)(param_1[0x29] + 0x600) = *(longlong *)(param_1[0x29] + 0x600) + 1;
*(longlong *)(param_1[0x29] + 0x640) =
*(longlong *)(param_1[0x29] + 0x640) + (longlong)*(int *)(local_160 + 0x40);
uVar7 = (**(code **)(*(longlong *)(param_1[0x29] + 0x118) + 8))();
pIVar5[3].e_lfarlc = (short)uVar7;
pIVar5[3].e_ovno = (short)((ulonglong)uVar7 >> 0x10);
pIVar5[3].e_res_4_[0] = (short)((ulonglong)uVar7 >> 0x20);
pIVar5[3].e_res_4_[1] = (short)((ulonglong)uVar7 >> 0x30);
uVar7 = (**(code **)(*(longlong *)(param_1[0x29] + 0x118) + 8))();
*(undefined8 *)(pIVar5[3].e_res2_10_ + 8) = uVar7;
FUN_1400ac2e0((longlong)param_4,0,pIVar15,pIVar16);
if (*(uint *)(local_160 + 0x40) != 0) {
pbVar14 = *(byte **)(local_160 + 0x38);
}
FUN_1400d1f50((longlong)pIVar5,(longlong)pbVar14,(ulonglong)*(uint *)(local_160 + 0x40),
(longlong)&local_148,uVar1,(longlong)param_4);
pIVar6 = pIVar5;
pIVar16 = param_3;
FUN_1400c9630((longlong *)param_1,pIVar5,param_4,param_3);
pIVar15 = param_4;
goto LAB_1400c9bfc;
}
FUN_1400ac2e0((longlong)param_4,0,pIVar15,pIVar16);
FUN_1400daf20(&local_b0);
local_b0 = pbVar14;
if (*(int *)(local_160 + 0x40) != 0) {
local_b0 = *(byte **)(local_160 + 0x38);
}
local_a8._0_4_ = *(undefined4 *)(local_160 + 0x40);
local_98[0] = 0;
local_98[1] = 0;
local_98[2] = 0;
local_98[3] = 0;
pIVar6 = (IMAGE_DOS_HEADER *)local_170;
ppbVar11 = &local_b0;
local_a0 = param_4;
local_98._4_4_ = uVar1;
puVar8 = FUN_1400db8b0((longlong *)ppbVar11,(undefined4 *)pIVar6,pIVar15,pIVar16);
if (-1 < (int)puVar8) {
iVar3._0_2_ = param_4->e_lfarlc;
iVar3._2_2_ = param_4->e_ovno;
while (iVar13 = (int)pbVar14, iVar13 != iVar3) {
if ((iVar13 < 0) || (iVar3 <= iVar13)) {
/* WARNING: Subroutine does not return */
FUN_14006be30(ppbVar11,pIVar6,pIVar15,pIVar16);
}
pIVar5 = (IMAGE_DOS_HEADER *)(*(longlong *)&param_4->e_sp + (longlong)iVar13 * 0x48);
FUN_1400bc600((int *)pIVar5,0,pIVar15,pIVar16);
local_138 = Proud::AddrPort::vftable;
local_130[0] = local_150[0];
local_130[1] = local_150[1];
local_130[2] = local_150[2];
local_130[3] = local_150[3];
local_12c = local_14c;
pIVar6 = (IMAGE_DOS_HEADER *)&local_138;
ppbVar11 = param_1;
pIVar16 = param_3;
FUN_1400c5bc0((longlong)param_1,(longlong)pIVar6,(uint *)pIVar5,(longlong)param_3);
iVar3._0_2_ = param_4->e_lfarlc;
iVar3._2_2_ = param_4->e_ovno;
if (iVar3 <= iVar13) {
/* WARNING: Subroutine does not return */
FUN_14006be30(ppbVar11,pIVar6,pIVar5,pIVar16);
}
pIVar15 = pIVar5;
pbVar14 = (byte *)(ulonglong)(iVar13 + 1);
}
}
}
else {
if ((int)uVar7 == 2) {
piVar4 = (int *)(**(code **)(*(longlong *)param_1[0x29] + 0x58))();
local_d0 = piVar4;
FUN_14006b350(piVar4);
local_c8 = 1;
if (DAT_1401b42cf != '\0') {
(**(code **)(*(longlong *)param_1[0x29] + 200))
(param_1[0x29],L"Proud::CNetThreads_S::NetWorkerThread_UdpRecvCompletionCase");
}
pIVar15 = local_168;
if (local_168 == (IMAGE_DOS_HEADER *)0x0) {
pIVar15 = (IMAGE_DOS_HEADER *)PTR_DAT_1401ac010;
}
local_110 = Proud::AddrPort::vftable;
local_108 = *(word (*) [2])(param_2 + 0x30);
local_104 = *(word *)(param_2 + 0x34);
pIVar6 = (IMAGE_DOS_HEADER *)&local_110;
FUN_14008e710((longlong *)param_1[0x29],(longlong)pIVar6,(short *)pIVar15);
FUN_14006b3e0((longlong)piVar4);
local_c8 = 0;
}
LAB_1400c9bfc:
if (pIVar5 != (IMAGE_DOS_HEADER *)0x0) {
FUN_1400d8970((longlong)pIVar5[1].e_program);
}
}
pwVar12 = param_3[1].e_res2_10_;
local_78 = pwVar12;
FUN_14006b350((int *)pwVar12);
local_70 = 1;
param_3[2].e_program[0] = 0;
FUN_1400d8bf0((longlong)param_3,pIVar6,(undefined **)pIVar15,pIVar16);
FUN_14006b3e0((longlong)pwVar12);
pIVar5 = local_168;
if (((local_168 != (IMAGE_DOS_HEADER *)0x0) &&
(local_168 != (IMAGE_DOS_HEADER *)PTR_DAT_1401ac010)) &&
(pIVar2 = local_168 + -1, pIVar2->e_program + 0x38 != (byte *)0x0)) {
piVar4 = (int *)FUN_14006cb70(pwVar12,pIVar6,pIVar15,pIVar16);
local_88 = piVar4;
FUN_14006b350(piVar4);
local_80 = 1;
pbVar14 = pIVar5[-1].e_program + 0x3c;
*(int *)pbVar14 = *(int *)pbVar14 + -1;
if (*(int *)pbVar14 == 0) {
FUN_14006cc60(pIVar2->e_program + 0x38);
}
FUN_14006b3e0((longlong)piVar4);
}
local_168 = (IMAGE_DOS_HEADER *)PTR_DAT_1401ac010;
if (local_160 != 0) {
FUN_1400c28d0(local_160,pIVar6,(SIZE_T)pIVar15);
}
LAB_1400c9ced:
FUN_1400d8990(&local_118);
return;
}