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,317 @@
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x14009dbc0 FUN_14009dbc0
* Pseudocode, not original source. */
ulonglong FUN_14009dbc0(SIZE_T *param_1,uint *param_2,SIZE_T param_3,undefined4 param_4,
longlong param_5,LPVOID param_6,undefined4 param_7)
{
ulonglong *puVar1;
int iVar2;
void *pvVar3;
uint *puVar4;
LPVOID pvVar5;
longlong *plVar6;
undefined8 uVar7;
longlong *plVar8;
ulonglong uVar9;
uint *puVar10;
ulonglong uVar11;
uint **ppuVar12;
uint uVar13;
int *piVar14;
SIZE_T SVar15;
TypeDescriptor *pTVar16;
ulonglong uVar17;
longlong *plVar18;
longlong lVar19;
uint *local_res10;
ulonglong *local_78;
undefined **local_68;
undefined8 local_60;
undefined8 local_58;
undefined8 local_50;
undefined8 local_48;
plVar18 = (longlong *)0x0;
local_res10 = param_2;
if (*(longlong *)(param_2 + 0x8a) == 0) {
pvVar3 = *(void **)(param_2 + 0x8a);
SVar15 = param_3;
if (pvVar3 != (void *)0x0) {
FUN_140078360((undefined8 *)((longlong)pvVar3 + 8));
operator_delete(pvVar3);
}
param_2[0x8a] = 0;
param_2[0x8b] = 0;
plVar6 = operator_new(0x40);
plVar8 = plVar18;
if (plVar6 != (longlong *)0x0) {
plVar6[2] = 0;
plVar6[3] = 0;
plVar6[4] = 0;
plVar6[5] = 0;
plVar6[1] = (longlong)Proud::ByteArray::vftable;
*(undefined4 *)plVar6 = 0;
*(undefined4 *)(plVar6 + 7) = 0;
plVar6[6] = 0;
plVar8 = plVar6;
}
*(longlong **)(param_2 + 0x8a) = plVar8;
*(int *)plVar8 = (int)param_3;
*(undefined4 *)(*(longlong *)(param_2 + 0x8a) + 4) = param_4;
lVar19 = *(longlong *)(param_2 + 0x8a);
iVar2 = *(int *)(param_5 + 0x18);
if (iVar2 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
FUN_1400146f0(lVar19 + 8,iVar2,SVar15);
plVar8 = plVar18;
if (*(int *)(param_5 + 0x18) != 0) {
plVar8 = *(longlong **)(param_5 + 0x10);
}
plVar6 = plVar18;
if (*(int *)(lVar19 + 0x20) != 0) {
plVar6 = *(longlong **)(lVar19 + 0x18);
}
FUN_140006500(plVar6,plVar8,(longlong)iVar2);
*(undefined4 *)(*(longlong *)(param_2 + 0x8a) + 0x38) = param_7;
if (param_1[0x2fe] != 0) {
FUN_1400cb990(param_1[0x2fe],L"Issuedispose %dclient in %s",(ulonglong)param_2[0x1be],param_6)
;
}
}
uVar13 = (uint)param_1[0x55];
uVar11 = ((ulonglong)param_2 & 0xffffffff) % (ulonglong)uVar13;
if (param_1[0x51] != 0) {
for (plVar8 = *(longlong **)(param_1[0x51] + uVar11 * 8);
(plVar8 != (longlong *)0x0 && ((uint)uVar11 == *(uint *)(plVar8 + 4) % uVar13));
plVar8 = (longlong *)plVar8[2]) {
if ((uint *)*plVar8 == param_2) {
return (ulonglong)*(uint *)(plVar8 + 4) / (ulonglong)uVar13;
}
}
}
if (*(longlong *)(param_2 + 0x8a) == 0) {
local_60 = 0;
local_58 = 0;
local_50 = 0;
local_48 = 0;
local_68 = Proud::ByteArray::vftable;
FUN_140095000((longlong)param_1,param_2,0xc,7,(longlong)&local_68);
FUN_140078360(&local_68);
}
else {
puVar4 = *(uint **)(param_2 + 0x8a);
FUN_140095000((longlong)param_1,param_2,(ulonglong)*puVar4,(ulonglong)puVar4[1],
(longlong)(puVar4 + 2));
}
lVar19 = (**(code **)(param_1[0x23] + 8))();
uVar17 = (ulonglong)(uint)param_1[0x55];
uVar9 = ((ulonglong)param_2 & 0xffffffff) % uVar17;
uVar11 = param_1[0x51];
uVar13 = (uint)uVar9;
if (uVar11 != 0) {
plVar8 = *(longlong **)(uVar11 + uVar9 * 8);
while ((plVar8 != (longlong *)0x0 &&
(ppuVar12 = (uint **)((ulonglong)*(uint *)(plVar8 + 4) % uVar17),
uVar13 == (uint)ppuVar12))) {
if ((uint *)*plVar8 == param_2) goto LAB_14009deba;
plVar8 = (longlong *)plVar8[2];
}
if (uVar11 != 0) {
plVar8 = *(longlong **)(uVar11 + uVar9 * 8);
while ((plVar8 != (longlong *)0x0 &&
(ppuVar12 = (uint **)((ulonglong)*(uint *)(plVar8 + 4) % uVar17),
uVar13 == (uint)ppuVar12))) {
if ((uint *)*plVar8 == param_2) goto LAB_14009deb5;
plVar8 = (longlong *)plVar8[2];
}
if (uVar11 != 0) goto LAB_14009de80;
}
}
uVar7 = FUN_1400a1910((longlong)(param_1 + 0x50),(uint)param_1[0x55],'\x01');
if ((char)uVar7 == '\0') {
/* WARNING: Subroutine does not return */
FUN_1400064e0(0x8007000e);
}
LAB_14009de80:
FUN_1400e94c0((char *)(param_1 + 0x50));
uVar17 = (ulonglong)param_2 & 0xffffffff;
ppuVar12 = &local_res10;
plVar8 = FUN_14007d680((char *)(param_1 + 0x50),ppuVar12,uVar13,(int)param_2);
FUN_1400e94c0((char *)(param_1 + 0x50));
uVar11 = uVar9;
LAB_14009deb5:
plVar8[1] = lVar19;
LAB_14009deba:
FUN_140071fc0(*(longlong **)(*(longlong *)(param_2 + 0x1d2) + 0x110),ppuVar12,uVar11,uVar17);
plVar8 = *(longlong **)(param_2 + 0x1d8);
if ((plVar8 != (longlong *)0x0) && (*plVar8 != 0)) {
plVar6 = plVar18;
if (plVar8 != (longlong *)0x0) {
plVar6 = (longlong *)*plVar8;
}
plVar8 = plVar18;
if ((undefined8 *)plVar6[0x2a] != (undefined8 *)0x0) {
plVar8 = *(longlong **)plVar6[0x2a];
}
FUN_140071fc0(plVar8,ppuVar12,uVar11,uVar17);
}
(**(code **)(*(longlong *)(param_2 + 0x28) + 0x40))();
puVar4 = param_2 + 0x12;
if (*(longlong *)(param_2 + 0x1a) != 0) {
plVar18 = *(longlong **)(param_2 + 0x16);
}
do {
if (plVar18 == (longlong *)0x0) {
FUN_140095de0((char *)puVar4,param_6,uVar11,uVar17);
uVar11 = FUN_140094470((char *)(param_1 + 0x5b),(longlong)param_2);
return uVar11;
}
if (plVar18 == (longlong *)0x0) {
/* WARNING: Subroutine does not return */
FUN_1400064e0(0x80004005);
}
local_78 = (ulonglong *)0x0;
if (plVar18[1] != 0) {
*(longlong *)(plVar18[1] + 8) = *(longlong *)(plVar18[1] + 8) + 1;
local_78 = (ulonglong *)plVar18[1];
param_2 = local_res10;
}
if (local_78 == (ulonglong *)0x0) {
puVar10 = (uint *)0x0;
}
else {
puVar10 = (uint *)*local_78;
}
FUN_140098220((longlong)param_1,puVar10,(ulonglong)param_2[0x1be],0xb);
if (local_78 == (ulonglong *)0x0) {
uVar11 = 0;
}
else {
uVar11 = *local_78;
}
if (*(longlong *)(uVar11 + 0x28) == 0) {
piVar14 = (int *)0x0;
}
else {
piVar14 = *(int **)(uVar11 + 0x18);
}
while( true ) {
if (local_78 == (ulonglong *)0x0) {
uVar9 = 0;
}
else {
uVar9 = *local_78;
}
if (piVar14 == (int *)0x0) break;
if (*piVar14 != 1) {
if (local_78 == (ulonglong *)0x0) {
uVar9 = 0;
}
else {
uVar9 = *local_78;
}
(**(code **)(param_1[0x95] + 0x80))
(param_1 + 0x95,*piVar14,&DAT_1401b6110,param_2 + 0x1be,uVar9);
}
piVar14 = *(int **)(piVar14 + 6);
}
if (uVar11 + 8 != uVar9 + 8) {
/* WARNING: Subroutine does not return */
FUN_1400064e0(0x80004005);
}
if (local_78 == (ulonglong *)0x0) {
uVar11 = 0;
}
else {
uVar11 = *local_78;
}
uVar9 = (ulonglong)param_2[0x1be];
pTVar16 = (TypeDescriptor *)(uVar9 % (ulonglong)*(uint *)(uVar11 + 0x30));
if (*(longlong *)(uVar11 + 0x10) != 0) {
puVar10 = *(uint **)(*(longlong *)(uVar11 + 0x10) + (longlong)pTVar16 * 8);
while( true ) {
if ((puVar10 == (uint *)0x0) || ((uint)pTVar16 != puVar10[10] % *(uint *)(uVar11 + 0x30)))
goto LAB_14009e07b;
if (*puVar10 == param_2[0x1be]) break;
puVar10 = *(uint **)(puVar10 + 6);
}
uVar9 = 0;
FUN_1400d4570((char *)(uVar11 + 8),puVar10,'\0');
}
LAB_14009e07b:
if (local_78 == (ulonglong *)0x0) {
uVar11 = 0;
}
else {
uVar11 = *local_78;
}
if ((*(longlong *)(uVar11 + 0x28) == 0) && ((char)param_1[0x300] == '\0')) {
if (local_78 == (ulonglong *)0x0) {
puVar10 = (uint *)0x0;
}
else {
puVar10 = (uint *)*local_78;
}
uVar13 = *puVar10;
uVar11 = (ulonglong)(uint)param_1[0x85];
if (param_1[0x81] != 0) {
puVar10 = *(uint **)(param_1[0x81] + ((ulonglong)uVar13 % uVar11) * 8);
while( true ) {
if ((puVar10 == (uint *)0x0) ||
((uint)((ulonglong)uVar13 % uVar11) != puVar10[8] % (uint)param_1[0x85]))
goto LAB_14009e152;
if (*puVar10 == uVar13) break;
puVar10 = *(uint **)(puVar10 + 4);
}
FUN_140094db0((char *)(param_1 + 0x80),puVar10,0);
plVar8 = (longlong *)param_1[0x8f];
lVar19 = *plVar8;
uVar7 = (**(code **)(param_1[0x23] + 8))();
SVar15 = (SIZE_T)uVar13;
(**(code **)(lVar19 + 0x10))(plVar8,uVar7);
FUN_14009b3c0(param_1,uVar13,SVar15,uVar11);
}
}
else {
if (local_78 == (ulonglong *)0x0) {
puVar10 = (uint *)0x0;
}
else {
puVar10 = (uint *)*local_78;
}
FUN_1400887b0((longlong)param_1,puVar10,uVar9,pTVar16);
}
LAB_14009e152:
if (local_78 == (ulonglong *)0x0) {
uVar11 = 0;
}
else {
uVar11 = *local_78;
}
uVar17 = 1;
param_6 = (LPVOID)(ulonglong)param_2[0x96];
FUN_140063e90((longlong)(param_2 + 0x90),param_2[0x96],uVar11,1);
if (local_78 != (ulonglong *)0x0) {
puVar1 = local_78 + 1;
*puVar1 = *puVar1 - 1;
param_2 = local_res10;
if (*puVar1 == 0) {
pvVar5 = (LPVOID)*local_78;
if (pvVar5 != (LPVOID)0x0) {
FUN_1400807c0((longlong)pvVar5,param_6,uVar11,uVar17);
FUN_14006cc60(pvVar5);
}
FUN_14006cc60(local_78);
param_2 = local_res10;
}
}
if (plVar18 != (longlong *)0x0) {
plVar18 = (longlong *)plVar18[2];
}
} while( true );
}