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,478 @@
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x1401d7b70 FUN_1401d7b70
* Pseudocode, not original source. */
void FUN_1401d7b70(longlong *param_1,int *param_2,byte *param_3,byte *param_4,int *param_5,
int *param_6)
{
char cVar1;
byte bVar2;
int iVar3;
undefined8 uVar4;
longlong lVar5;
undefined8 uVar6;
int *piVar7;
longlong *plVar8;
int iVar9;
undefined4 *puVar10;
undefined8 uVar11;
undefined4 *puVar12;
undefined4 *puVar13;
int *piVar14;
int iVar15;
int iVar16;
int iVar17;
ulonglong local_res10;
byte *local_res18;
byte *local_res20;
undefined8 in_stack_fffffffffffffdd8;
undefined4 uVar18;
int *local_218;
int *local_210;
int local_208;
undefined8 local_200;
int local_1f8;
undefined8 local_1e8;
undefined8 local_1e0;
undefined8 local_1d8;
undefined8 local_1d0;
undefined8 local_1c8;
undefined8 local_1b0;
longlong local_188;
undefined1 local_180;
int *local_178;
undefined8 local_170;
undefined1 local_168 [8];
undefined1 local_160 [8];
undefined1 local_158 [8];
undefined **local_150;
undefined8 local_148;
undefined8 local_140;
undefined8 local_138;
undefined8 local_130;
undefined **local_128;
undefined8 local_120;
undefined8 local_118;
undefined8 local_110;
undefined8 local_108;
undefined **local_100;
undefined8 local_f8;
undefined8 local_f0;
undefined8 local_e8;
undefined8 local_e0;
undefined8 local_c8;
uVar18 = (undefined4)((ulonglong)in_stack_fffffffffffffdd8 >> 0x20);
local_c8 = 0xfffffffffffffffe;
iVar15 = *param_2;
local_res18 = param_3;
local_res20 = param_4;
if (iVar15 != 0) {
if (iVar15 == 1) {
piVar7 = param_2 + 2;
local_1f8 = (int)(*piVar7 + (*piVar7 >> 0x1f & 7U)) >> 3;
local_res10 = local_res10 & 0xffffffffffffff00;
local_218 = piVar7;
local_188 = FUN_1401d3b20(param_1,param_2[0xc]);
(**(code **)(param_1[0xf] + 0x18))();
iVar15 = 0;
local_200 = (int *)((ulonglong)local_200._4_4_ << 0x20);
local_178 = piVar7;
cVar1 = FUN_14016bd20(piVar7,&local_200);
if (cVar1 != '\0') {
for (; local_208 = iVar15, iVar15 < (int)param_1[9]; iVar15 = iVar15 + 1) {
if ((iVar15 < 0) || ((int)param_1[9] <= iVar15)) {
/* WARNING: Subroutine does not return */
FUN_14016d6e0();
}
plVar8 = *(longlong **)(param_1[8] + (longlong)iVar15 * 8);
FUN_14016b040(local_178,local_1f8);
*(undefined2 *)(plVar8 + 1) = 0;
bVar2 = (**(code **)(*plVar8 + 0x10))(plVar8,piVar7,local_188);
local_res10 = CONCAT71(local_res10._1_7_,(byte)local_res10 | bVar2);
*param_3 = *param_3 | *(byte *)(plVar8 + 1);
*param_4 = *param_4 | *(byte *)((longlong)plVar8 + 9);
if (((bVar2 != 0) && (plVar8 != param_1 + 0x307)) && (plVar8 != param_1 + 0x2fe)) {
*param_5 = *param_5 + 1;
}
}
if ((byte)local_res10 != '\0') {
return;
}
}
FUN_14016b040(local_178,local_1f8);
if (param_1[0x2b0] == 0) {
return;
}
*param_6 = *param_6 + 1;
(**(code **)(*(longlong *)param_1[0x2b0] + 0x28))
((longlong *)param_1[0x2b0],(ulonglong)local_200 & 0xffffffff);
return;
}
if (iVar15 != 2) {
return;
}
piVar7 = param_2 + 2;
local_218 = piVar7;
uVar4 = FUN_1401d3b20(param_1,param_2[0xc]);
(**(code **)(param_1[0xf] + 0x18))();
if (param_1[0x2b0] == 0) {
return;
}
cVar1 = FUN_14016ba10(piVar7,&local_res10);
if (cVar1 != '\0') {
iVar15 = *piVar7;
iVar3 = FUN_14016afd0(piVar7);
if ((int)local_res10 == iVar3 - ((int)((iVar15 >> 0x1f & 7U) + iVar15) >> 3)) {
*(undefined1 *)(param_1[0x2b0] + 8) = 0;
*(undefined1 *)(param_1[0x2b0] + 9) = 0;
FUN_14016ec40(&local_1e8);
local_1e8 = (undefined **)CONCAT44(param_2[0xc],(undefined4)local_1e8);
local_1e8 = (undefined **)CONCAT71(local_1e8._1_7_,(char)param_2[0x12]);
iVar15 = *piVar7;
local_1b0 = uVar4;
lVar5 = FUN_14016b000(piVar7);
(**(code **)(*(longlong *)param_1[0x2b0] + 0x30))
((longlong *)param_1[0x2b0],param_2[0xc],&local_1e8,
lVar5 + ((int)(iVar15 + (iVar15 >> 0x1f & 7U)) >> 3),
CONCAT44(uVar18,(int)local_res10));
*param_3 = *param_3 | *(byte *)(param_1[0x2b0] + 8);
*param_4 = *param_4 | *(byte *)(param_1[0x2b0] + 9);
*param_5 = *param_5 + 1;
return;
}
}
local_188 = FUN_14016d940(0x60);
if (local_188 == 0) {
uVar4 = 0;
}
else {
uVar4 = FUN_140198ee0(local_188);
}
puVar10 = (undefined4 *)0x0;
FUN_140154b80(&local_res10,uVar4);
puVar12 = puVar10;
if (local_res10 != 0) {
puVar12 = *(undefined4 **)(local_res10 + 0x38);
}
*puVar12 = 0x1f;
if (local_res10 != 0) {
puVar10 = *(undefined4 **)(local_res10 + 0x38);
}
FUN_14004c050(puVar10 + 4,L"Invalid payload size in User Message!");
local_170 = 0;
FUN_140184b90(&local_170,&local_res10);
(**(code **)(*param_1 + 0x80))(param_1,&local_170);
FUN_140154b00(&local_res10);
return;
}
(**(code **)(param_1[0xf] + 0x18))();
if (param_1[0x2b0] == 0) {
return;
}
local_200 = param_2 + 0x14;
*(undefined1 *)(param_1[0x2b0] + 8) = 0;
*(undefined1 *)(param_1[0x2b0] + 9) = 0;
switch(*local_200) {
case 1:
iVar15 = FUN_14016af20(param_2 + 0x28);
uVar6 = FUN_14016dd50(param_2 + 0x28);
local_1e8 = Proud::CFastArray<unsigned_char,1>::vftable;
uVar4 = 0;
local_1e0 = 0;
local_1d8 = 0;
local_1d0 = 0;
local_1c8 = 0;
if (iVar15 < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
FUN_14004f0e0(&local_1e8,iVar15);
uVar11 = local_1d8;
if ((int)local_1d0 == 0) {
uVar11 = uVar4;
}
FUN_14004f1a0(uVar11,uVar6,(longlong)iVar15);
local_1e8 = Proud::ByteArray::vftable;
local_res10 = FUN_14016d940(0x60);
uVar6 = uVar4;
if (local_res10 != 0) {
uVar6 = FUN_140198ee0(local_res10);
}
plVar8 = (longlong *)FUN_140154b80(local_158,uVar6);
if (*plVar8 != 0) {
uVar4 = *(undefined8 *)(*plVar8 + 0x38);
}
(**(code **)(*(longlong *)param_1[0x2b0] + 0x38))((longlong *)param_1[0x2b0],uVar4,&local_1e8);
FUN_140154b00(local_158);
FUN_14019a9e0(&local_1e8);
break;
case 2:
FUN_14016d8c0();
local_210 = (int *)PTR_DAT_1403440a0;
iVar3 = FUN_14016d740(&DAT_1402a4aa0);
local_res10 = CONCAT44(local_res10._4_4_,iVar3);
puVar10 = (undefined4 *)0x0;
iVar16 = 0;
iVar15 = iVar16;
if ((local_210 != (int *)0x0) && (local_210 != (int *)PTR_DAT_1403440a0)) {
iVar15 = local_210[-2];
}
iVar17 = 0;
iVar9 = iVar3;
if (((iVar3 <= iVar15) && (iVar9 = iVar17, local_210 != (int *)0x0)) &&
(local_210 != (int *)PTR_DAT_1403440a0)) {
iVar9 = local_210[-2];
}
iVar15 = 1;
if (1 < iVar9) {
iVar15 = iVar9;
}
puVar12 = puVar10;
if ((local_210 != (int *)0x0) &&
(puVar12 = (undefined4 *)0x0, local_210 != (int *)PTR_DAT_1403440a0)) {
puVar12 = (undefined4 *)(ulonglong)(uint)local_210[-2];
}
if ((int)puVar12 < iVar15) {
if (local_210 == (int *)0x0) {
local_210 = (int *)PTR_DAT_1403440a0;
}
if (iVar15 < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
if (iVar15 == 0) {
FUN_14004eb70(&local_210);
}
else {
iVar9 = iVar17;
if ((local_210 != (int *)0x0) && (local_210 != (int *)PTR_DAT_1403440a0)) {
iVar9 = local_210[-2];
}
if (iVar15 != iVar9) {
piVar7 = (int *)FUN_14016d940((longlong)iVar15 * 2 + 10);
if (piVar7 != (int *)0x0) {
*piVar7 = 0;
piVar7[1] = 1;
}
*piVar7 = iVar15;
iVar3 = iVar17;
if ((local_210 != (int *)0x0) && (local_210 != (int *)PTR_DAT_1403440a0)) {
iVar3 = local_210[-2];
}
piVar14 = (int *)PTR_DAT_1403440a0;
if (iVar15 < iVar3) {
LAB_1401d8164:
if (local_210 != (int *)0x0) {
piVar14 = local_210;
}
}
else {
iVar15 = iVar16;
if (local_210 != (int *)0x0) {
if (local_210 != (int *)PTR_DAT_1403440a0) {
iVar15 = local_210[-2];
}
goto LAB_1401d8164;
}
}
FUN_14016d770(piVar7 + 2,piVar14,iVar15);
FUN_14004eb70(&local_210);
local_210 = piVar7 + 2;
iVar3 = (int)local_res10;
}
}
}
FUN_14004e850(&local_210);
piVar7 = local_210;
if (local_210 == (int *)0x0) {
piVar7 = (int *)PTR_DAT_1403440a0;
}
FUN_14016d770(piVar7,&DAT_1402a4aa0,iVar3);
piVar7 = local_210;
if (local_210 == (int *)0x0) {
piVar7 = (int *)PTR_DAT_1403440a0;
}
iVar3 = FUN_14016d740(piVar7);
iVar15 = 0;
if (0 < iVar3) {
iVar15 = iVar3;
}
if ((local_210 != (int *)0x0) && (local_210 != (int *)PTR_DAT_1403440a0)) {
iVar17 = local_210[-2];
}
if ((iVar15 < iVar17) || (iVar15 = iVar16, local_210 == (int *)0x0)) {
LAB_1401d8208:
if (((local_210 != (int *)PTR_DAT_1403440a0) && (local_210 != (int *)0x0)) &&
(local_210 + -2 != (int *)0x0)) {
local_210[-2] = iVar15;
*(undefined2 *)((longlong)local_210 + (longlong)iVar15 * 2) = 0;
}
}
else if (local_210 != (int *)PTR_DAT_1403440a0) {
iVar15 = local_210[-2];
goto LAB_1401d8208;
}
local_120 = 0;
local_118 = 0;
local_110 = 0;
local_108 = 0;
local_128 = Proud::ByteArray::vftable;
puVar12 = puVar10;
if (*(longlong *)(param_2 + 0x16) != 0) {
puVar12 = *(undefined4 **)(*(longlong *)(param_2 + 0x16) + 0x38);
}
FUN_140198f80(&local_218,*puVar12,1,&local_210,&local_128);
FUN_14019a9e0(&local_128);
piVar7 = local_210;
if (((local_210 != (int *)0x0) && (local_210 != (int *)PTR_DAT_1403440a0)) &&
(piVar14 = local_210 + -2, piVar14 != (int *)0x0)) {
uVar4 = FUN_14016d8c0();
local_180 = 0;
local_188 = uVar4;
FUN_14016db50(uVar4);
local_180 = 1;
piVar7 = piVar7 + -1;
*piVar7 = *piVar7 + -1;
if (*piVar7 == 0) {
FUN_14016d970(piVar14);
}
FUN_14016dbe0(uVar4);
param_3 = local_res18;
}
local_210 = (int *)PTR_DAT_1403440a0;
puVar12 = puVar10;
if (local_218 != (int *)0x0) {
puVar12 = *(undefined4 **)(local_218 + 0xe);
}
puVar12[8] = param_2[0x40];
*(short *)(puVar12 + 9) = (short)param_2[0x41];
puVar12 = puVar10;
if (local_218 != (int *)0x0) {
puVar12 = *(undefined4 **)(local_218 + 0xe);
}
puVar12[2] = param_2[0x42];
local_1e0 = 0;
local_1d8 = 0;
local_1d0 = 0;
local_1c8 = 0;
local_1e8 = Proud::ByteArray::vftable;
if (*(longlong *)(param_2 + 0x28) != 0) {
iVar15 = *(int *)(*(longlong *)(param_2 + 0x28) + 0x18);
LAB_1401d83db:
if (iVar15 < 1) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
/* WARNING: Subroutine does not return */
FUN_14016d6e0();
}
if (*(longlong *)(param_2 + 0x2a) != 0) {
if (*(longlong *)(param_2 + 0x2a) == 0) {
/* WARNING: Subroutine does not return */
FUN_14016d1e0();
}
iVar15 = param_2[0x2c];
goto LAB_1401d83db;
}
if (local_218 != (int *)0x0) {
puVar10 = *(undefined4 **)(local_218 + 0xe);
}
(**(code **)(*(longlong *)param_1[0x2b0] + 0x38))((longlong *)param_1[0x2b0],puVar10,&local_1e8)
;
FUN_14019a9e0(&local_1e8);
FUN_140154b00(&local_218);
break;
case 3:
uVar4 = 0;
if (*(longlong *)(param_2 + 0x16) != 0) {
uVar4 = *(undefined8 *)(*(longlong *)(param_2 + 0x16) + 0x38);
}
(**(code **)(*(longlong *)param_1[0x2b0] + 0x40))((longlong *)param_1[0x2b0],uVar4);
break;
default:
goto switchD_1401d7f5b_caseD_4;
case 8:
(**(code **)(*(longlong *)param_1[0x2b0] + 0x48))
((longlong *)param_1[0x2b0],param_2[0x2f],param_2[0x2e],param_2[0x3c],param_2 + 0x32);
break;
case 9:
(**(code **)(*(longlong *)param_1[0x2b0] + 0x50))
((longlong *)param_1[0x2b0],param_2[0x2f],param_2[0x2e],param_2[0x3c]);
FUN_1401d3910(param_1,param_2[0x2f]);
break;
case 10:
(**(code **)(*(longlong *)param_1[0x2b0] + 0x58))((longlong *)param_1[0x2b0],param_2[0x30],0);
break;
case 0xb:
puVar10 = (undefined4 *)0x0;
if (*(longlong *)(param_2 + 0x16) != 0) {
puVar10 = *(undefined4 **)(*(longlong *)(param_2 + 0x16) + 0x38);
}
(**(code **)(*(longlong *)param_1[0x2b0] + 0x58))
((longlong *)param_1[0x2b0],param_2[0x30],*puVar10);
break;
case 0xd:
if (param_1[0x2b0] != 0) {
puVar10 = (undefined4 *)0x0;
if (*(longlong *)(param_2 + 0x16) != 0) {
puVar10 = *(undefined4 **)(*(longlong *)(param_2 + 0x16) + 0x38);
}
(**(code **)(*(longlong *)param_1[0x2b0] + 0x60))((longlong *)param_1[0x2b0],*puVar10);
}
break;
case 0xe:
(**(code **)(*(longlong *)param_1[0x2b0] + 0x68))();
break;
case 0x14:
puVar10 = (undefined4 *)0x0;
local_f8 = 0;
local_f0 = 0;
local_e8 = 0;
local_e0 = 0;
local_100 = Proud::ByteArray::vftable;
lVar5 = *(longlong *)(param_2 + 0x16);
puVar13 = puVar10;
puVar12 = puVar10;
if (lVar5 != 0) {
puVar13 = *(undefined4 **)(lVar5 + 0x38);
puVar12 = *(undefined4 **)(lVar5 + 0x38);
}
plVar8 = (longlong *)FUN_140198f80(local_160,*puVar13,param_2[0x30],puVar12 + 4,&local_100);
if (*plVar8 != 0) {
puVar10 = *(undefined4 **)(*plVar8 + 0x38);
}
(**(code **)(*(longlong *)param_1[0x2b0] + 8))((longlong *)param_1[0x2b0],puVar10);
FUN_140154b00(local_160);
FUN_14019a9e0(&local_100);
break;
case 0x15:
puVar10 = (undefined4 *)0x0;
local_148 = 0;
local_140 = 0;
local_138 = 0;
local_130 = 0;
local_150 = Proud::ByteArray::vftable;
lVar5 = *(longlong *)(param_2 + 0x16);
puVar13 = puVar10;
puVar12 = puVar10;
if (lVar5 != 0) {
puVar13 = *(undefined4 **)(lVar5 + 0x38);
puVar12 = *(undefined4 **)(lVar5 + 0x38);
}
plVar8 = (longlong *)FUN_140198f80(local_168,*puVar13,param_2[0x30],puVar12 + 4,&local_150);
if (*plVar8 != 0) {
puVar10 = *(undefined4 **)(*plVar8 + 0x38);
}
(**(code **)(*(longlong *)param_1[0x2b0] + 0x10))((longlong *)param_1[0x2b0],puVar10);
FUN_140154b00(local_168);
FUN_14019a9e0(&local_150);
}
*param_3 = *(byte *)(param_1[0x2b0] + 8);
*param_4 = *(byte *)(param_1[0x2b0] + 9);
*param_6 = *param_6 + 1;
switchD_1401d7f5b_caseD_4:
return;
}