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,485 @@
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x1401a61e0 FUN_1401a61e0
* Pseudocode, not original source. */
/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Removing unreachable block (ram,0x0001401a688c) */
void FUN_1401a61e0(longlong param_1,int *param_2,longlong *param_3)
{
int iVar1;
undefined4 uVar2;
longlong *plVar3;
undefined8 uVar4;
code *pcVar5;
char cVar6;
int iVar7;
longlong lVar8;
ulonglong uVar9;
undefined4 *puVar10;
undefined8 uVar11;
longlong lVar12;
longlong lVar13;
ulonglong uVar14;
undefined1 *puVar15;
undefined1 *puVar16;
undefined1 *puVar17;
int iVar18;
undefined8 *puVar19;
longlong lVar20;
undefined8 *puVar21;
ulonglong uVar22;
undefined1 auStack_1b88 [32];
int local_1b68 [2];
longlong *local_1b60;
longlong *local_1b58;
undefined **local_1b50;
longlong *local_1b48;
longlong local_1b40;
undefined8 local_1b38;
undefined8 local_1b30;
undefined4 local_1b28;
undefined1 local_1b20 [8];
longlong local_1b18;
longlong local_1b10;
undefined4 local_1b08;
int local_1b04;
undefined8 local_1af8;
char local_1af0;
undefined4 local_1ae8;
undefined4 uStack_1ae4;
undefined4 local_1ad8;
undefined4 uStack_1ad4;
undefined8 local_1ad0;
undefined1 local_1ac8;
undefined8 local_1ac0;
undefined1 local_1ab8;
undefined8 local_1ab0;
undefined4 uStack_1aa8;
undefined4 uStack_1aa4;
undefined8 local_1aa0;
undefined1 local_1a98;
undefined8 local_1a90;
undefined4 uStack_1a88;
undefined4 uStack_1a84;
undefined8 local_1a80;
undefined1 local_1a78 [88];
undefined8 local_1a20;
undefined1 local_1a18 [8];
longlong local_1a10;
longlong local_1a08;
undefined4 local_1a00;
int local_19fc;
undefined1 local_19f0 [136];
undefined4 local_1968;
undefined4 uStack_1964;
undefined4 uStack_1960;
undefined4 uStack_195c;
undefined4 *local_ce8;
undefined4 local_ce0;
int local_cdc;
undefined1 local_cd8 [3200];
undefined1 *local_58;
undefined4 local_50;
int local_4c;
ulonglong local_48;
undefined8 uStack_40;
uStack_40 = 0x1401a61f6;
puVar15 = auStack_1b88;
puVar17 = auStack_1b88;
local_1a80 = 0xfffffffffffffffe;
local_48 = DAT_1403463c0 ^ (ulonglong)local_1b68;
uVar14 = 0;
local_1b48 = (longlong *)0x0;
local_1b40 = 0;
local_1b38 = 0;
local_1b30 = 0;
local_1b50 = Proud::BypassDestList::vftable;
cVar6 = thunk_FUN_14016c260(param_2,&local_1b50);
puVar16 = auStack_1b88;
if ((cVar6 == '\0') ||
(cVar6 = FUN_14016ba10(param_2,&local_1b58), plVar3 = local_1b58, puVar16 = auStack_1b88,
cVar6 == '\0')) {
LAB_1401a69db:
lVar8 = local_1b40;
plVar3 = local_1b48;
local_1b50 = Proud::CFastArray<Proud::BypassDest,0>::vftable;
if (local_1b40 == 0) goto LAB_1401a6a0b;
puVar17 = puVar16;
if (local_1b48 != (longlong *)0x0) {
pcVar5 = *(code **)(*local_1b48 + 0x18);
*(undefined8 *)(puVar16 + -8) = 0x1401a6a04;
(*pcVar5)(plVar3,lVar8);
goto LAB_1401a6a0b;
}
}
else {
iVar18 = (int)local_1b58;
if ((-1 < iVar18) && (iVar18 < DAT_140344d70)) {
iVar1 = *param_2;
iVar7 = FUN_14016afd0(param_2);
if (((int)((iVar1 >> 0x1f & 7U) + iVar1) >> 3) + iVar18 != iVar7) {
FUN_140193740(*(undefined8 *)(param_1 + 0x148),param_3,
"msg.GetReadOffset() + payloadLength == msg.GetLength()",2);
}
FUN_14016b440(local_1b20);
cVar6 = FUN_14016b6a0(param_2,local_1b20,(ulonglong)plVar3 & 0xffffffff);
if (cVar6 == '\0') {
FUN_140193740(*(undefined8 *)(param_1 + 0x148),param_3,&DAT_140282298,2);
local_1b58 = &local_1b18;
FUN_14016d0e0(&local_1b18);
puVar16 = auStack_1b88;
if (local_1b10 != 0) {
if (local_1b04 < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
local_1b08 = 0;
puVar16 = auStack_1b88;
}
}
else {
lVar8 = (longlong)(int)local_1b38;
local_1b60 = (longlong *)CONCAT44(local_1b60._4_4_,(int)local_1b38);
if ((int)local_1b38 < 1) {
local_1b58 = &local_1b18;
FUN_14016d0e0(&local_1b18);
puVar16 = auStack_1b88;
if (local_1b10 != 0) {
if (local_1b04 < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
local_1b08 = 0;
puVar16 = auStack_1b88;
}
}
else {
lVar12 = lVar8 * 0x18;
uVar22 = lVar12 + 0x10;
if (uVar22 < 0x401) {
uVar9 = lVar12 + 0x1f;
if (uVar9 <= uVar22) {
uVar9 = 0xffffffffffffff0;
}
lVar12 = -(uVar9 & 0xfffffffffffffff0);
puVar15 = auStack_1b88 + lVar12;
puVar10 = (undefined4 *)((longlong)local_1b68 + lVar12);
puVar21 = (undefined8 *)0x0;
if (puVar10 != (undefined4 *)0x0) {
*puVar10 = 0xcccc;
puVar15 = auStack_1b88 + lVar12;
LAB_1401a63bb:
puVar21 = (undefined8 *)(puVar10 + 4);
}
}
else {
puVar10 = malloc(uVar22);
puVar21 = (undefined8 *)0x0;
if (puVar10 != (undefined4 *)0x0) {
*puVar10 = 0xdddd;
puVar15 = auStack_1b88;
goto LAB_1401a63bb;
}
}
pcVar5 = *(code **)(**(longlong **)(param_1 + 0x148) + 0x58);
*(undefined8 *)(puVar15 + -8) = 0x1401a63cc;
uVar11 = (*pcVar5)();
local_1ad0 = uVar11;
*(undefined8 *)(puVar15 + -8) = 0x1401a63db;
FUN_14016db50(uVar11);
local_1ac8 = 1;
plVar3 = *(longlong **)(param_1 + 0x148);
if (DAT_14034c86f != '\0') {
pcVar5 = *(code **)(*plVar3 + 200);
*(undefined8 *)(puVar15 + -8) = 0x1401a6403;
(*pcVar5)(plVar3,L"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_ReliableRelay1")
;
}
pcVar5 = *(code **)(*param_3 + 0x10);
*(undefined8 *)(puVar15 + -8) = 0x1401a640d;
local_1b28 = (*pcVar5)(param_3);
local_1b68[0] = 0;
puVar19 = puVar21;
uVar22 = uVar14;
if (0 < lVar8) {
do {
lVar8 = local_1b40;
if ((longlong)uVar14 < 0) {
LAB_1401a64ae:
/* WARNING: Subroutine does not return */
*(undefined **)(puVar15 + -8) = &UNK_1401a64b3;
FUN_14016d6e0();
}
if ((int)local_1b38 <= (int)uVar22) goto LAB_1401a64ae;
uVar2 = *(undefined4 *)(local_1b40 + uVar14 * 8);
uVar11 = *(undefined8 *)(param_1 + 0x148);
*(undefined8 *)(puVar15 + -8) = 0x1401a644f;
lVar12 = FUN_1401763d0(uVar11,uVar2);
if (lVar12 != 0) {
*(undefined8 *)(puVar15 + -8) = 0x1401a6463;
FUN_1401baa10(lVar12 + 0xc0);
local_1ae8 = *(undefined4 *)(lVar8 + 4 + uVar14 * 8);
local_1ad8 = *(undefined4 *)(lVar8 + uVar14 * 8);
*puVar19 = CONCAT44(uStack_1ae4,local_1ae8);
puVar19[1] = lVar12;
puVar19[2] = CONCAT44(uStack_1ad4,local_1ad8);
local_1b68[0] = local_1b68[0] + 1;
puVar19 = puVar19 + 3;
}
uVar14 = uVar14 + 1;
uVar22 = (ulonglong)((int)uVar22 + 1);
} while ((longlong)uVar14 < (longlong)(int)local_1b60);
}
uVar11 = local_1ad0;
iVar18 = local_1b68[0];
*(undefined8 *)(puVar15 + -8) = 0x1401a64c0;
FUN_14016dbe0(uVar11);
local_1ac8 = 0;
lVar8 = (longlong)iVar18;
while ((0 < lVar8 && (lVar12 = 0, 0 < lVar8))) {
lVar20 = lVar8 * 0x18 + -0x18;
do {
uVar14 = puVar21[lVar12 * 3];
local_1b60 = (longlong *)puVar21[lVar12 * 3 + 1];
local_1a20 = puVar21[lVar12 * 3 + 2];
pcVar5 = *(code **)(*(longlong *)(puVar21[lVar12 * 3 + 1] + 0x108) + 0x10);
*(undefined8 *)(puVar15 + -8) = 0x1401a651b;
uVar11 = (*pcVar5)();
local_1af0 = 0;
local_1af8 = uVar11;
*(undefined8 *)(puVar15 + -8) = 0x1401a6532;
FUN_14016b440(local_1a18);
*(undefined8 *)(puVar15 + -8) = 0x1401a654c;
FUN_14016b0c0(local_1a18,local_19f0,0x80);
*(undefined8 *)(puVar15 + -8) = 0x1401a655b;
FUN_14004eef0(local_1a18,0x17);
uVar2 = local_1b28;
*(undefined8 *)(puVar15 + -8) = 0x1401a656a;
FUN_140153c40(local_1a18,uVar2);
*(undefined8 *)(puVar15 + -8) = 0x1401a6578;
FUN_140153c40(local_1a18,uVar14 & 0xffffffff);
*(undefined8 *)(puVar15 + -8) = 0x1401a658b;
FUN_14016aaa0(&local_1ae8,local_1a18);
lVar13 = (longlong)(int)local_1b58;
*(undefined8 *)(puVar15 + -8) = 0x1401a659c;
FUN_14016cac0(local_1a18,lVar13);
local_4c = 200;
local_50 = 0;
local_58 = local_cd8;
local_cdc = 200;
local_ce0 = 0;
local_ce8 = &local_1968;
if (local_1a10 == 0) {
uVar2 = local_1a00;
if (local_1a08 == 0) {
/* WARNING: Subroutine does not return */
*(undefined8 *)(puVar15 + -8) = 0x1401a694d;
FUN_14016d1e0();
}
}
else {
uVar2 = *(undefined4 *)(local_1a10 + 0x18);
}
lVar13 = local_1a08;
if (local_1a08 == 0) {
if (local_1a10 == 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar15 + -8) = &UNK_1401a6947;
FUN_14016d1e0();
}
lVar13 = 0;
if (*(int *)(local_1a10 + 0x18) != 0) {
lVar13 = *(longlong *)(local_1a10 + 0x10);
}
}
local_ce0 = 1;
local_1ab0._0_4_ = (undefined4)lVar13;
local_1ab0._4_4_ = (undefined4)((ulonglong)lVar13 >> 0x20);
local_1968 = (undefined4)local_1ab0;
uStack_1964 = local_1ab0._4_4_;
uStack_195c = uStack_1aa4;
local_1ab0 = lVar13;
uStack_1aa8 = uVar2;
uStack_1960 = uVar2;
*(undefined8 *)(puVar15 + -8) = 0x1401a6653;
FUN_14016ded0(local_cd8,&local_1968);
if (local_ce8 == (undefined4 *)0x0) {
*(undefined8 *)(puVar15 + -8) = 0x1401a692e;
FUN_14016d300(local_1a78,PTR_u_ArrayWithExternalBuffer_is_unini_1403440d0);
/* WARNING: Subroutine does not return */
*(undefined **)(puVar15 + -8) = &UNK_1401a6941;
_CxxThrowException(local_1a78,(ThrowInfo *)&DAT_1403417f8);
}
if (local_cdc < 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar15 + -8) = &UNK_1401a691a;
FUN_14016d6b0();
}
local_cdc = 200;
local_ce0 = 0;
local_ce8 = &local_1968;
if (local_1b18 == 0) {
uVar2 = local_1b08;
if (local_1b10 == 0) {
/* WARNING: Subroutine does not return */
*(undefined8 *)(puVar15 + -8) = 0x1401a6914;
FUN_14016d1e0();
}
}
else {
uVar2 = *(undefined4 *)(local_1b18 + 0x18);
}
lVar13 = local_1b10;
if (local_1b10 == 0) {
if (local_1b18 == 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar15 + -8) = &UNK_1401a690e;
FUN_14016d1e0();
}
lVar13 = 0;
if (*(int *)(local_1b18 + 0x18) != 0) {
lVar13 = *(longlong *)(local_1b18 + 0x10);
}
}
local_ce0 = 1;
local_1a90._0_4_ = (undefined4)lVar13;
local_1a90._4_4_ = (undefined4)((ulonglong)lVar13 >> 0x20);
local_1968 = (undefined4)local_1a90;
uStack_1964 = local_1a90._4_4_;
uStack_195c = uStack_1a84;
local_1a90 = lVar13;
uStack_1a88 = uVar2;
uStack_1960 = uVar2;
*(undefined8 *)(puVar15 + -8) = 0x1401a66fd;
FUN_14016ded0(local_cd8,&local_1968);
if (local_ce8 == (undefined4 *)0x0) {
*(undefined8 *)(puVar15 + -8) = 0x1401a68f5;
FUN_14016d300(local_1a78,PTR_u_ArrayWithExternalBuffer_is_unini_1403440d0);
/* WARNING: Subroutine does not return */
*(undefined **)(puVar15 + -8) = &UNK_1401a6908;
_CxxThrowException(local_1a78,(ThrowInfo *)&DAT_1403417f8);
}
if (local_cdc < 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar15 + -8) = &UNK_1401a68e1;
FUN_14016d6b0();
}
if (lVar12 == 0) {
local_1af0 = 1;
*(undefined8 *)(puVar15 + -8) = 0x1401a67b5;
FUN_14016db50(uVar11);
plVar3 = local_1b60;
local_1aa0 = 0;
local_1a98 = 1;
uVar4 = *(undefined8 *)((longlong)local_1b60 + 0x748);
*(undefined8 *)(puVar15 + -8) = 0x1401a67e1;
FUN_1401ba860(uVar4,local_cd8,&local_1aa0);
*(undefined8 *)(puVar15 + -8) = 0x1401a67e9;
FUN_14016dbe0(uVar11);
local_1af0 = '\0';
*(undefined8 *)(puVar15 + -8) = 0x1401a67fa;
FUN_1401baa20((longlong)plVar3 + 0xc0);
puVar21[1] = 0;
*puVar21 = *(undefined8 *)(lVar20 + (longlong)puVar21);
puVar21[1] = *(undefined8 *)(lVar20 + 8 + (longlong)puVar21);
puVar21[2] = *(undefined8 *)(lVar20 + 0x10 + (longlong)puVar21);
LAB_1401a681b:
local_1b68[0] = local_1b68[0] + -1;
lVar8 = lVar8 + -1;
lVar20 = lVar20 + -0x18;
}
else {
*(undefined8 *)(puVar15 + -8) = 0x1401a672a;
local_1af0 = FUN_14016dba0();
if (local_1af0 != '\0') {
local_1ac0 = 0;
local_1ab8 = 1;
uVar4 = *(undefined8 *)((longlong)local_1b60 + 0x748);
*(undefined8 *)(puVar15 + -8) = 0x1401a6768;
FUN_1401ba860(uVar4,local_cd8,&local_1ac0);
*(undefined8 *)(puVar15 + -8) = 0x1401a6770;
FUN_14016dbe0(uVar11);
local_1af0 = '\0';
lVar13 = (longlong)local_1b60 + 0xc0;
*(undefined8 *)(puVar15 + -8) = 0x1401a6785;
FUN_1401baa20(lVar13);
puVar21[lVar12 * 3 + 1] = 0;
puVar21[lVar12 * 3] = *(undefined8 *)(lVar20 + (longlong)puVar21);
puVar21[lVar12 * 3 + 1] = *(undefined8 *)(lVar20 + 8 + (longlong)puVar21);
puVar21[lVar12 * 3 + 2] = *(undefined8 *)(lVar20 + 0x10 + (longlong)puVar21);
goto LAB_1401a681b;
}
}
if (local_58 == (undefined1 *)0x0) {
*(undefined8 *)(puVar15 + -8) = 0x1401a68c8;
FUN_14016d300(local_1a78,PTR_u_ArrayWithExternalBuffer_is_unini_1403440d0);
/* WARNING: Subroutine does not return */
*(undefined **)(puVar15 + -8) = &UNK_1401a68db;
_CxxThrowException(local_1a78,(ThrowInfo *)&DAT_1403417f8);
}
if (local_4c < 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar15 + -8) = &UNK_1401a68b4;
FUN_14016d6b0();
}
local_50 = 0;
*(undefined8 *)(puVar15 + -8) = 0x1401a6852;
FUN_14016aac0(&local_1ae8);
local_1b60 = &local_1a10;
*(undefined8 *)(puVar15 + -8) = 0x1401a686a;
FUN_14016d0e0(&local_1a10);
if (local_1a08 != 0) {
if (local_19fc < 0) {
/* WARNING: Subroutine does not return */
*(undefined8 *)(puVar15 + -8) = 0x1401a68ae;
FUN_14016d6b0();
}
local_1a00 = 0;
}
lVar12 = lVar12 + 1;
} while (lVar12 < lVar8);
}
if ((puVar21 != (undefined8 *)0x0) && (*(int *)(puVar21 + -2) == 0xdddd)) {
*(undefined8 *)(puVar15 + -8) = 0x1401a6965;
free(puVar21 + -2);
}
local_1b58 = &local_1b18;
*(undefined8 *)(puVar15 + -8) = 0x1401a6977;
FUN_14016d0e0(&local_1b18);
puVar16 = puVar15;
if (local_1b10 != 0) {
if (local_1b04 < 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar15 + -8) = &UNK_1401a698a;
FUN_14016d6b0();
}
local_1b08 = 0;
}
}
}
goto LAB_1401a69db;
}
FUN_140193740(*(undefined8 *)(param_1 + 0x148),param_3,&DAT_140282298,2);
local_1b50 = Proud::CFastArray<Proud::BypassDest,0>::vftable;
puVar16 = auStack_1b88;
if (local_1b40 == 0) goto LAB_1401a6a0b;
if (local_1b48 != (longlong *)0x0) {
(**(code **)(*local_1b48 + 0x18))();
puVar16 = auStack_1b88;
goto LAB_1401a6a0b;
}
}
lVar8 = local_1b40;
local_1b50 = Proud::CFastArray<Proud::BypassDest,0>::vftable;
*(undefined8 *)(puVar17 + -8) = 0x1401a6a0b;
FUN_14016d970(lVar8);
puVar16 = puVar17;
LAB_1401a6a0b:
*(undefined8 *)(puVar16 + -8) = 0x1401a6a1a;
return;
}