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,403 @@
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400c8ed0 FUN_1400c8ed0
* Pseudocode, not original source. */
undefined8
FUN_1400c8ed0(longlong *param_1,IMAGE_DOS_HEADER *param_2,IMAGE_DOS_HEADER *param_3,
IMAGE_DOS_HEADER *param_4)
{
uint uVar1;
int iVar2;
undefined8 uVar3;
longlong *plVar4;
int *piVar5;
uint *puVar6;
ulonglong uVar7;
undefined8 *puVar8;
uint uVar9;
IMAGE_DOS_HEADER *pIVar10;
uint *puVar11;
uint uVar16;
IMAGE_DOS_HEADER *pIVar12;
ulonglong uVar13;
undefined *puVar14;
longlong lVar15;
uint **ppuVar17;
undefined8 *local_res10 [2];
IMAGE_DOS_HEADER *local_res20;
uint *local_c8;
uint local_c0;
uint local_bc;
undefined1 local_b8 [16];
undefined8 *local_a8;
undefined8 local_a0;
undefined8 local_98;
word local_90 [4];
undefined **local_88;
word local_80 [2];
undefined2 local_7c;
byte local_78;
undefined **local_68;
undefined1 local_60;
undefined3 uStack_5f;
word local_5c;
undefined **local_58;
undefined4 local_50;
word local_4c;
undefined **local_48;
word local_40 [2];
word local_3c;
undefined **local_38;
word local_30 [2];
word local_2c;
byte local_28 [16];
local_28[0] = 0xfe;
local_28[1] = 0xff;
local_28[2] = 0xff;
local_28[3] = 0xff;
local_28[4] = 0xff;
local_28[5] = 0xff;
local_28[6] = 0xff;
local_28[7] = 0xff;
local_c0 = (int)(*(int *)param_2 + (*(int *)param_2 >> 0x1f & 7U)) >> 3;
pIVar12 = param_3;
local_res20 = param_4;
uVar3 = FUN_1400bd260((uint *)param_2,&local_bc,param_3,param_4);
if ((char)uVar3 == '\0') goto switchD_1400c8f57_caseD_3;
local_res10[0] = (undefined8 *)((ulonglong)local_res10[0] & 0xffffffffffffff00);
pIVar12 = &IMAGE_DOS_HEADER_140000000;
plVar4 = param_1;
pIVar10 = param_2;
switch(local_bc) {
case 1:
pIVar12 = (IMAGE_DOS_HEADER *)0x0;
FUN_1400c8ae0((longlong)param_1,(int *)param_2,0,(longlong)param_3,
local_res20 != (IMAGE_DOS_HEADER *)0x0);
param_4 = param_3;
default:
switchD_1400c8f57_caseD_3:
uVar7 = FUN_1400bc600((int *)param_2,(ulonglong)local_c0,pIVar12,param_4);
return uVar7 & 0xffffffffffffff00;
case 2:
pIVar12 = (IMAGE_DOS_HEADER *)0x0;
FUN_1400c8d00((longlong)param_1,(int *)param_2,0,(longlong)param_3,
local_res20 != (IMAGE_DOS_HEADER *)0x0);
param_4 = param_3;
goto switchD_1400c8f57_caseD_3;
case 5:
FUN_1400c7630((int *)param_1,(uint *)param_2,(longlong *)param_3,param_4);
break;
case 7:
FUN_1400c5c90((longlong)param_1,(uint *)param_2,(uint *)param_3,param_4);
break;
case 0xc:
local_58 = Proud::AddrPort::vftable;
local_50._0_2_ = param_2->e_res2_10_[8];
local_50._2_2_ = param_2->e_res2_10_[9];
local_4c = (word)param_2->e_lfanew;
uVar7 = FUN_14006fbe0((longlong)&local_58);
if ((char)uVar7 == '\0') {
FUN_14009b0d0((longlong *)param_1[0x29],(wchar_t *)param_3,
"receivedInfo.GetRemoteAddr().IsUnicastEndpoint()",2);
}
local_48 = Proud::AddrPort::vftable;
local_40 = *(word (*) [2])(param_2->e_res2_10_ + 8);
local_3c = (word)param_2->e_lfanew;
param_3 = (IMAGE_DOS_HEADER *)&local_48;
param_4 = local_res20;
FUN_1400c3820((longlong)param_1,(uint *)param_2,(longlong)param_3,(longlong)local_res20);
break;
case 0xe:
FUN_1400c2ec0((longlong)param_1,(uint *)param_2,(longlong)param_3,(TypeDescriptor *)param_4);
break;
case 0x10:
local_38 = Proud::AddrPort::vftable;
local_30 = *(word (*) [2])(param_2->e_res2_10_ + 8);
local_2c = (word)param_2->e_lfanew;
uVar7 = FUN_14006fbe0((longlong)&local_38);
if ((char)uVar7 == '\0') {
FUN_14009b0d0((longlong *)param_1[0x29],(wchar_t *)param_3,
"receivedInfo.GetRemoteAddr().IsUnicastEndpoint()",2);
}
local_68 = Proud::AddrPort::vftable;
_local_60 = param_2->e_res2_10_[8];
unique0x00023d02 = param_2->e_res2_10_[9];
local_5c = (word)param_2->e_lfanew;
param_3 = (IMAGE_DOS_HEADER *)&local_68;
param_4 = local_res20;
FUN_1400c3bc0((longlong)param_1,(uint *)param_2,(longlong)param_3,(longlong)local_res20);
break;
case 0x12:
FUN_1400c3340((longlong)param_1,(uint *)param_2,(longlong)param_3,param_4);
break;
case 0x14:
FUN_1400c3fb0((longlong)param_1,(uint *)param_2,(wchar_t *)param_3,(longlong)param_4);
break;
case 0x15:
FUN_1400c4810((longlong)param_1,(uint *)param_2,(wchar_t *)param_3,(uint **)param_4);
break;
case 0x16:
FUN_1400c4f80((longlong)param_1,(uint *)param_2,(wchar_t *)param_3,param_4);
break;
case 0x1a:
FUN_1400c5350((longlong)param_1,(uint *)param_2,(longlong *)param_3,param_4);
break;
case 0x1b:
FUN_1400c1c10((longlong)param_1,param_2,(wchar_t *)param_3,param_4);
break;
case 0x24:
case 0x25:
FUN_1400bca00((undefined4 *)local_b8);
local_88 = Proud::AddrPort::vftable;
local_78 = 0;
local_90[0] = 0;
local_90[1] = 0;
local_80[0] = (word)DAT_1401ac3d0;
local_80[1] = DAT_1401ac3d0._2_2_;
local_7c = DAT_1401ac3d4;
param_4 = (IMAGE_DOS_HEADER *)local_b8;
pIVar10 = (IMAGE_DOS_HEADER *)(ulonglong)local_bc;
pIVar12 = param_2;
uVar3 = FUN_1400c0610((uint *)param_1[0x29],local_bc,(uint *)param_2,(uint *)param_4);
if ((char)uVar3 != '\0') {
local_78 = param_2->e_program[0];
local_80 = *(word (*) [2])(param_2->e_res2_10_ + 8);
local_7c = (undefined2)param_2->e_lfanew;
local_90._0_4_ = *(undefined4 *)param_2->e_res2_10_;
pIVar10 = (IMAGE_DOS_HEADER *)local_b8;
param_4 = local_res20;
uVar3 = FUN_1400c8ed0(param_1,pIVar10,param_3,local_res20);
local_res10[0] = (undefined8 *)CONCAT71(local_res10[0]._1_7_,(char)uVar3);
pIVar12 = param_3;
}
local_c8 = (uint *)(local_b8 + 8);
plVar4 = (longlong *)(local_b8 + 8);
FUN_1400d1800(plVar4);
if ((local_a8 != (undefined8 *)0x0) && (local_a0._4_4_ < 0)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
goto LAB_1400c9265;
case 0x26:
FUN_1400bca00((undefined4 *)local_b8);
local_88 = Proud::AddrPort::vftable;
local_78 = 0;
local_90[0] = 0;
local_90[1] = 0;
local_80[0] = (word)DAT_1401ac3d0;
local_80[1] = DAT_1401ac3d0._2_2_;
local_7c = DAT_1401ac3d4;
pIVar12 = (IMAGE_DOS_HEADER *)local_b8;
uVar3 = FUN_1400bea40((longlong *)param_1[0x29],(uint *)param_2,(int *)pIVar12,
(ulonglong)param_4);
if ((char)uVar3 != '\0') {
local_78 = param_2->e_program[0];
local_80 = *(word (*) [2])(param_2->e_res2_10_ + 8);
local_7c = (undefined2)param_2->e_lfanew;
local_90._0_4_ = *(undefined4 *)param_2->e_res2_10_;
pIVar10 = (IMAGE_DOS_HEADER *)local_b8;
param_4 = local_res20;
uVar3 = FUN_1400c8ed0(param_1,pIVar10,param_3,local_res20);
local_res10[0] = (undefined8 *)CONCAT71(local_res10[0]._1_7_,(char)uVar3);
pIVar12 = param_3;
}
local_c8 = (uint *)(local_b8 + 8);
plVar4 = (longlong *)(local_b8 + 8);
FUN_1400d1800(plVar4);
if ((local_a8 != (undefined8 *)0x0) && (local_a0._4_4_ < 0)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
LAB_1400c9265:
puVar6 = (uint *)0x0;
param_3 = pIVar12;
if ((char)local_res10[0] != '\x01') {
if ((char)local_res10[0] == '\0') goto switchD_1400c8f57_caseD_3;
goto LAB_1400c9595;
}
break;
case 0x27:
FUN_1400c5820((longlong)param_1,param_2,(longlong *)param_3,param_4);
break;
case 0x28:
FUN_1400c1ca0((longlong)param_1,(uint *)param_2,(longlong)param_3,param_4);
}
if (*(longlong *)&param_2->e_cparhdr == 0) {
lVar15._0_2_ = param_2->e_sp;
lVar15._2_2_ = param_2->e_csum;
lVar15._4_2_ = param_2->e_ip;
lVar15._6_2_ = param_2->e_cs;
if (lVar15 == 0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(plVar4,pIVar10,param_3,param_4);
}
uVar16._0_2_ = param_2->e_lfarlc;
uVar16._2_2_ = param_2->e_ovno;
}
else {
uVar16 = *(uint *)(*(longlong *)&param_2->e_cparhdr + 0x18);
}
uVar9 = *(int *)param_2 >> 0x1f & 7;
uVar1 = (int)(*(int *)param_2 + uVar9) >> 3;
puVar6 = (uint *)(ulonglong)uVar1;
if (((uVar16 == uVar1) || (puVar6 = (uint *)(ulonglong)local_bc, local_bc == 0x24)) ||
(local_bc == 0x25)) goto LAB_1400c9595;
FUN_14006cb70((ulonglong)uVar16,(ulonglong)uVar9,param_3,param_4);
local_c8 = (uint *)PTR_DAT_1401ac010;
local_c0 = FUN_14006c9f0(L"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_ProudNetLayer");
uVar16 = 0;
uVar7 = 0;
if ((local_c8 != (uint *)0x0) && (uVar7 = 0, local_c8 != (uint *)PTR_DAT_1401ac010)) {
uVar7 = (ulonglong)local_c8[-2];
}
uVar1 = local_c0;
if ((((int)local_c0 <= (int)uVar7) && (uVar1 = uVar16, local_c8 != (uint *)0x0)) &&
(local_c8 != (uint *)PTR_DAT_1401ac010)) {
uVar1 = local_c8[-2];
}
uVar9 = 1;
if (1 < (int)uVar1) {
uVar9 = uVar1;
}
if ((local_c8 != (uint *)0x0) && (local_c8 != (uint *)PTR_DAT_1401ac010)) {
uVar16 = local_c8[-2];
}
if ((int)uVar16 < (int)uVar9) {
if (local_c8 == (uint *)0x0) {
local_c8 = (uint *)PTR_DAT_1401ac010;
}
if ((int)uVar9 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
if (uVar9 == 0) {
FUN_1400031e0((longlong *)&local_c8,PTR_DAT_1401ac010,uVar7,0);
}
else {
uVar16 = 0;
if ((local_c8 != (uint *)0x0) && (local_c8 != (uint *)PTR_DAT_1401ac010)) {
uVar16 = local_c8[-2];
}
if (uVar9 != uVar16) {
puVar6 = (uint *)FUN_14006cbf0((longlong)(int)uVar9 * 2 + 10);
uVar7 = 0;
uVar16 = 0;
if (puVar6 != (uint *)0x0) {
*puVar6 = 0;
puVar6[1] = 1;
}
*puVar6 = uVar9;
if ((local_c8 != (uint *)0x0) && (local_c8 != (uint *)PTR_DAT_1401ac010)) {
uVar16 = local_c8[-2];
}
puVar11 = (uint *)PTR_DAT_1401ac010;
if ((int)uVar9 < (int)uVar16) {
uVar13 = (ulonglong)uVar9;
LAB_1400c93e2:
if (local_c8 != (uint *)0x0) {
puVar11 = local_c8;
}
}
else {
uVar13 = uVar7;
if (local_c8 != (uint *)0x0) {
if (local_c8 != (uint *)PTR_DAT_1401ac010) {
uVar13 = (ulonglong)local_c8[-2];
}
goto LAB_1400c93e2;
}
}
FUN_14006ca20(puVar6 + 2,puVar11,(int)uVar13);
FUN_1400031e0((longlong *)&local_c8,puVar11,uVar13,uVar7);
local_c8 = puVar6 + 2;
}
}
}
FUN_140002e40((longlong *)&local_c8);
puVar6 = local_c8;
if (local_c8 == (uint *)0x0) {
puVar6 = (uint *)PTR_DAT_1401ac010;
}
FUN_14006ca20(puVar6,L"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_ProudNetLayer",
local_c0);
puVar6 = local_c8;
if (local_c8 == (uint *)0x0) {
puVar6 = (uint *)PTR_DAT_1401ac010;
}
uVar1 = FUN_14006c9f0((short *)puVar6);
puVar14 = PTR_DAT_1401ac010;
puVar6 = (uint *)0x0;
uVar16 = 0;
if (0 < (int)uVar1) {
uVar16 = uVar1;
}
puVar11 = puVar6;
if ((local_c8 != (uint *)0x0) && (puVar11 = (uint *)0x0, local_c8 != (uint *)PTR_DAT_1401ac010)) {
puVar11 = (uint *)(ulonglong)local_c8[-2];
}
if (((int)uVar16 < (int)puVar11) || (uVar16 = 0, local_c8 == (uint *)0x0)) {
LAB_1400c9479:
if (((local_c8 != (uint *)PTR_DAT_1401ac010) && (local_c8 != (uint *)0x0)) &&
(puVar11 = local_c8 + -2, puVar11 != (uint *)0x0)) {
*puVar11 = uVar16;
*(short *)((longlong)local_c8 + (longlong)(int)uVar16 * 2) = 0;
}
}
else if (local_c8 != (uint *)PTR_DAT_1401ac010) {
uVar16 = local_c8[-2];
goto LAB_1400c9479;
}
iVar2 = FUN_14007c120((longlong)param_2,puVar11,puVar14,0);
local_res10[0] = (undefined8 *)FUN_1400a1cc0((longlong)param_2,puVar11,puVar14,puVar6);
local_b8._0_8_ = Proud::CFastArray<unsigned_char,1>::vftable;
local_b8._8_2_ = 0;
local_b8._10_2_ = 0;
local_b8._12_2_ = 0;
local_b8._14_2_ = 0;
local_a8 = (undefined8 *)0x0;
local_a0._0_2_ = 0;
local_a0._2_2_ = 0;
local_a0._4_2_ = 0;
local_a0._6_2_ = 0;
local_98._0_2_ = 0;
local_98._2_2_ = 0;
local_98._4_2_ = 0;
local_98._6_2_ = 0;
if (iVar2 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
FUN_1400146f0((longlong)local_b8,iVar2,(SIZE_T)puVar14);
puVar8 = local_a8;
if ((int)local_a0 == 0) {
puVar8 = (undefined8 *)0x0;
}
FUN_140006500(puVar8,local_res10[0],(longlong)iVar2);
local_b8._0_8_ = Proud::ByteArray::vftable;
ppuVar17 = &local_c8;
plVar4 = FUN_140078c10((longlong *)local_res10,0x1f,(ulonglong)*(uint *)param_2->e_res2_10_,
(longlong *)ppuVar17,(longlong)local_b8);
lVar15 = *(longlong *)param_1[0x29];
(**(code **)(lVar15 + 0x80))();
puVar8 = (undefined8 *)local_b8;
FUN_140078360(puVar8);
puVar6 = local_c8;
if (((local_c8 != (uint *)0x0) && (local_c8 != (uint *)PTR_DAT_1401ac010)) &&
(puVar11 = local_c8 + -2, puVar11 != (uint *)0x0)) {
piVar5 = (int *)FUN_14006cb70(puVar8,plVar4,lVar15,ppuVar17);
local_68 = (undefined **)piVar5;
FUN_14006b350(piVar5);
local_60 = 1;
puVar6 = puVar6 + -1;
*puVar6 = *puVar6 - 1;
if (*puVar6 == 0) {
FUN_14006cc60(puVar11);
}
puVar6 = (uint *)FUN_14006b3e0((longlong)piVar5);
}
LAB_1400c9595:
return CONCAT71((int7)((ulonglong)puVar6 >> 8),1);
}