404 lines
15 KiB
C
404 lines
15 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x1401a6a40 FUN_1401a6a40
|
|
* 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,0x0001401a706e) */
|
|
|
|
void FUN_1401a6a40(longlong param_1,int *param_2,longlong *param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
code *pcVar3;
|
|
longlong *plVar4;
|
|
char cVar5;
|
|
int iVar6;
|
|
ulonglong uVar7;
|
|
undefined4 *puVar8;
|
|
undefined8 uVar9;
|
|
longlong lVar10;
|
|
ulonglong uVar11;
|
|
longlong lVar12;
|
|
longlong *plVar13;
|
|
int iVar14;
|
|
ulonglong uVar15;
|
|
undefined1 *puVar16;
|
|
undefined1 *puVar17;
|
|
longlong lVar18;
|
|
longlong *plVar19;
|
|
longlong lVar20;
|
|
longlong *plVar21;
|
|
longlong *plVar22;
|
|
undefined1 auStack_1b18 [32];
|
|
undefined4 local_1af8;
|
|
undefined4 local_1af4;
|
|
undefined8 local_1af0;
|
|
ulonglong local_1ae8;
|
|
undefined1 *local_1ae0;
|
|
char local_1ad8;
|
|
undefined4 local_1ad0 [2];
|
|
longlong local_1ac8;
|
|
undefined1 local_1ac0;
|
|
undefined4 local_1abc;
|
|
undefined1 local_1ab8;
|
|
undefined1 local_1ab7;
|
|
undefined4 local_1ab0 [2];
|
|
undefined **local_1aa8;
|
|
longlong *local_1aa0;
|
|
longlong *local_1a98;
|
|
ulonglong local_1a90;
|
|
undefined8 local_1a88;
|
|
undefined1 local_1a80 [8];
|
|
undefined1 local_1a78 [8];
|
|
longlong local_1a70;
|
|
undefined4 local_1a68;
|
|
int local_1a64;
|
|
longlong local_1a58;
|
|
longlong *local_1a50;
|
|
longlong local_1a48;
|
|
undefined8 local_1a40;
|
|
undefined1 local_1a38;
|
|
undefined8 local_1a30;
|
|
undefined1 local_1a28 [16];
|
|
undefined1 local_1a18 [8];
|
|
undefined1 local_1a10 [8];
|
|
longlong local_1a08;
|
|
undefined4 local_1a00;
|
|
int local_19fc;
|
|
undefined1 local_19f0 [136];
|
|
undefined1 local_1968 [3200];
|
|
undefined1 *local_ce8;
|
|
undefined4 local_ce0;
|
|
undefined4 local_cdc;
|
|
undefined1 local_cd8 [3216];
|
|
ulonglong local_48;
|
|
undefined8 uStack_40;
|
|
|
|
uStack_40 = 0x1401a6a56;
|
|
puVar17 = auStack_1b18;
|
|
local_1a30 = 0xfffffffffffffffe;
|
|
local_48 = DAT_1403463c0 ^ (ulonglong)&local_1af8;
|
|
local_1a58 = param_1;
|
|
cVar5 = FUN_14016bc20(param_2,local_1ab0);
|
|
puVar16 = auStack_1b18;
|
|
if ((cVar5 == '\0') ||
|
|
(cVar5 = FUN_14016ba10(param_2,&local_1a48), puVar16 = auStack_1b18, cVar5 == '\0'))
|
|
goto LAB_1401a717f;
|
|
plVar19 = (longlong *)0x0;
|
|
local_1aa0 = (longlong *)0x0;
|
|
local_1a98 = (longlong *)0x0;
|
|
local_1a90 = 0;
|
|
local_1a88 = 0;
|
|
local_1aa8 = Proud::HostIDArray::vftable;
|
|
cVar5 = FUN_14016ba10(param_2,&local_1ae8);
|
|
plVar13 = plVar19;
|
|
plVar21 = plVar19;
|
|
if ((cVar5 == '\0') ||
|
|
((iVar14 = (int)local_1ae8, plVar21 = (longlong *)0x0, iVar14 < 0 || (DAT_140344d70 < iVar14)))
|
|
) {
|
|
LAB_1401a715f:
|
|
puVar16 = auStack_1b18;
|
|
if (plVar21 == (longlong *)0x0) goto LAB_1401a717f;
|
|
puVar16 = auStack_1b18;
|
|
if (plVar13 == (longlong *)0x0) {
|
|
LAB_1401a7177:
|
|
*(undefined8 *)(puVar16 + -8) = 0x1401a717f;
|
|
FUN_14016d970(plVar21);
|
|
goto LAB_1401a717f;
|
|
}
|
|
lVar10 = *plVar13;
|
|
puVar16 = auStack_1b18;
|
|
}
|
|
else {
|
|
FUN_1401738d0(&local_1aa8,local_1ae8 & 0xffffffff);
|
|
plVar21 = local_1a98;
|
|
plVar13 = local_1a98;
|
|
if ((int)local_1a90 == 0) {
|
|
plVar13 = plVar19;
|
|
}
|
|
cVar5 = FUN_14016b370(param_2,plVar13,iVar14 * 4);
|
|
plVar13 = local_1aa0;
|
|
if (cVar5 == '\0') goto LAB_1401a715f;
|
|
cVar5 = FUN_14016ba10(param_2,&local_1ae8);
|
|
uVar15 = local_1ae8;
|
|
puVar16 = auStack_1b18;
|
|
if (cVar5 != '\0') {
|
|
iVar14 = (int)local_1ae8;
|
|
if ((iVar14 < 0) || (DAT_140344d70 <= iVar14)) {
|
|
FUN_140193740(*(undefined8 *)(param_1 + 0x148),param_3,
|
|
"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_UnreliableRelay1",2);
|
|
puVar16 = auStack_1b18;
|
|
}
|
|
else {
|
|
iVar1 = *param_2;
|
|
iVar6 = FUN_14016afd0(param_2);
|
|
if (((int)((iVar1 >> 0x1f & 7U) + iVar1) >> 3) + iVar14 != iVar6) {
|
|
FUN_140193740(*(undefined8 *)(param_1 + 0x148),param_3,
|
|
"msg.GetReadOffset() + payloadLength == msg.GetLength()",2);
|
|
}
|
|
FUN_14016b440(local_1a80);
|
|
cVar5 = FUN_14016b6a0(param_2,local_1a80,uVar15 & 0xffffffff);
|
|
if (cVar5 == '\0') {
|
|
FUN_140193740(*(undefined8 *)(param_1 + 0x148),param_3,
|
|
"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_UnreliableRelay1",2);
|
|
local_1ae0 = local_1a78;
|
|
FUN_14016d0e0(local_1a78);
|
|
puVar16 = auStack_1b18;
|
|
if (local_1a70 != 0) {
|
|
if (local_1a64 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
local_1a68 = 0;
|
|
puVar16 = auStack_1b18;
|
|
}
|
|
}
|
|
else {
|
|
iVar14 = (int)local_1a90;
|
|
uVar15 = (ulonglong)(int)local_1a90;
|
|
if ((int)local_1a90 < 1) {
|
|
local_1ae0 = local_1a78;
|
|
FUN_14016d0e0(local_1a78);
|
|
puVar16 = auStack_1b18;
|
|
if (local_1a70 != 0) {
|
|
if (local_1a64 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
local_1a68 = 0;
|
|
puVar16 = auStack_1b18;
|
|
}
|
|
}
|
|
else {
|
|
uVar11 = (uVar15 + 1) * 0x10;
|
|
local_1ae0 = (undefined1 *)uVar15;
|
|
if (uVar11 < 0x401) {
|
|
uVar7 = uVar11 + 0xf;
|
|
if (uVar7 <= uVar11) {
|
|
uVar7 = 0xffffffffffffff0;
|
|
}
|
|
lVar10 = -(uVar7 & 0xfffffffffffffff0);
|
|
puVar17 = auStack_1b18 + lVar10;
|
|
puVar8 = (undefined4 *)((longlong)&local_1af8 + lVar10);
|
|
plVar13 = (longlong *)0x0;
|
|
if (puVar8 != (undefined4 *)0x0) {
|
|
*puVar8 = 0xcccc;
|
|
puVar17 = auStack_1b18 + lVar10;
|
|
LAB_1401a6cd2:
|
|
plVar13 = (longlong *)(puVar8 + 4);
|
|
}
|
|
}
|
|
else {
|
|
puVar8 = malloc(uVar11);
|
|
plVar13 = (longlong *)0x0;
|
|
if (puVar8 != (undefined4 *)0x0) {
|
|
*puVar8 = 0xdddd;
|
|
puVar17 = auStack_1b18;
|
|
goto LAB_1401a6cd2;
|
|
}
|
|
}
|
|
pcVar3 = *(code **)(**(longlong **)(param_1 + 0x148) + 0x58);
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6ce3;
|
|
uVar9 = (*pcVar3)();
|
|
local_1a40 = uVar9;
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6cf2;
|
|
FUN_14016db50(uVar9);
|
|
local_1a38 = 1;
|
|
plVar22 = *(longlong **)(param_1 + 0x148);
|
|
if (DAT_14034c86f != '\0') {
|
|
pcVar3 = *(code **)(*plVar22 + 200);
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6d1a;
|
|
(*pcVar3)(plVar22,
|
|
L"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_UnreliableRelay1");
|
|
}
|
|
pcVar3 = *(code **)(*param_3 + 0x10);
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6d24;
|
|
local_1af4 = (*pcVar3)(param_3);
|
|
local_1af0 = (ulonglong)local_1af0._4_4_ << 0x20;
|
|
plVar22 = plVar19;
|
|
plVar4 = plVar13;
|
|
if (0 < iVar14) {
|
|
do {
|
|
local_1a50 = plVar4;
|
|
if (((longlong)plVar19 < 0) || ((int)uVar15 <= (int)plVar22)) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar17 + -8) = &UNK_1401a6dc7;
|
|
FUN_14016d6e0();
|
|
}
|
|
uVar2 = *(undefined4 *)((longlong)plVar21 + (longlong)plVar19 * 4);
|
|
uVar9 = *(undefined8 *)(param_1 + 0x148);
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6d5d;
|
|
lVar10 = FUN_1401763d0(uVar9,uVar2);
|
|
local_1ac8 = CONCAT44(local_1ac8._4_4_,uVar2);
|
|
if (lVar10 != 0) {
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6d74;
|
|
FUN_1401baa10(lVar10 + 0xc0);
|
|
uVar9 = *(undefined8 *)(local_1a58 + 0x148);
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6d8a;
|
|
FUN_140189800(uVar9,lVar10);
|
|
*local_1a50 = lVar10;
|
|
local_1a50[1] = local_1ac8;
|
|
local_1af0 = CONCAT44(local_1af0._4_4_,(int)local_1af0 + 1);
|
|
local_1a50 = local_1a50 + 2;
|
|
}
|
|
plVar19 = (longlong *)((longlong)plVar19 + 1);
|
|
uVar15 = local_1a90 & 0xffffffff;
|
|
param_1 = local_1a58;
|
|
plVar22 = (longlong *)(ulonglong)((int)plVar22 + 1);
|
|
plVar4 = local_1a50;
|
|
} while ((longlong)plVar19 < (longlong)local_1ae0);
|
|
}
|
|
uVar9 = local_1a40;
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6dd4;
|
|
FUN_14016dbe0(uVar9);
|
|
local_1a38 = 0;
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6de7;
|
|
FUN_14016b440(local_1a18);
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6e01;
|
|
FUN_14016b0c0(local_1a18,local_19f0,0x80);
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6e10;
|
|
FUN_14004eef0(local_1a18,0x18);
|
|
uVar2 = local_1af4;
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6e1f;
|
|
FUN_140153c40(local_1a18,uVar2);
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6e32;
|
|
FUN_14016aaa0(local_1a28,local_1a18);
|
|
lVar10 = (longlong)(int)local_1ae8;
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6e43;
|
|
FUN_14016cac0(local_1a18,lVar10);
|
|
local_cdc = 200;
|
|
local_ce0 = 0;
|
|
local_ce8 = local_1968;
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6e74;
|
|
FUN_14016e080(local_cd8,local_1a18);
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6e88;
|
|
FUN_14016ded0(local_1968,local_cd8);
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6e95;
|
|
FUN_14016ddc0(local_cd8);
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6ea5;
|
|
FUN_14016e080(local_cd8,local_1a80);
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6eb9;
|
|
FUN_14016ded0(local_1968,local_cd8);
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6ec6;
|
|
FUN_14016ddc0(local_cd8);
|
|
local_1af8._1_1_ = DAT_14034c540;
|
|
local_1af8._0_1_ = DAT_14034c560;
|
|
local_1af4 = local_1ab0[0];
|
|
lVar10 = (longlong)(int)local_1af0;
|
|
while ((0 < lVar10 && (lVar20 = 0, plVar21 = local_1a98, 0 < lVar10))) {
|
|
lVar18 = lVar10 * 0x10 + -0x10;
|
|
do {
|
|
lVar12 = plVar13[lVar20 * 2];
|
|
local_1af0 = lVar12;
|
|
local_1ae8 = plVar13[lVar20 * 2 + 1];
|
|
pcVar3 = *(code **)(*(longlong *)(lVar12 + 0x108) + 0x10);
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6f34;
|
|
uVar15 = (*pcVar3)();
|
|
local_1ad8 = 0;
|
|
local_1ae0 = (undefined1 *)uVar15;
|
|
if (lVar20 == 0) {
|
|
local_1ad8 = 1;
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6feb;
|
|
FUN_14016db50(uVar15);
|
|
local_1ad0[0] = local_1af4;
|
|
local_1ac8 = local_1a48;
|
|
local_1ac0 = local_1af8._1_1_;
|
|
local_1abc = 0xffffffff;
|
|
local_1ab8 = (undefined1)local_1af8;
|
|
local_1ab7 = 0;
|
|
uVar11 = local_1ae8 & 0xffffffff;
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a702f;
|
|
FUN_1401bbe20(lVar12 + 0x700,uVar11,local_1968,local_1ad0);
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a7037;
|
|
FUN_14016dbe0(uVar15);
|
|
local_1ad8 = '\0';
|
|
lVar12 = local_1af0 + 0xc0;
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a704c;
|
|
FUN_1401baa20(lVar12);
|
|
*plVar13 = 0;
|
|
*plVar13 = *(longlong *)(lVar18 + (longlong)plVar13);
|
|
plVar13[1] = *(longlong *)(lVar18 + 8 + (longlong)plVar13);
|
|
LAB_1401a7063:
|
|
lVar10 = lVar10 + -1;
|
|
lVar18 = lVar18 + -0x10;
|
|
}
|
|
else {
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6f50;
|
|
local_1ad8 = FUN_14016dba0();
|
|
if (local_1ad8 != '\0') {
|
|
local_1ad0[0] = local_1af4;
|
|
local_1ac8 = local_1a48;
|
|
local_1ac0 = local_1af8._1_1_;
|
|
local_1abc = 0xffffffff;
|
|
local_1ab8 = (undefined1)local_1af8;
|
|
local_1ab7 = 0;
|
|
lVar12 = local_1af0 + 0x700;
|
|
uVar11 = local_1ae8 & 0xffffffff;
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6fa6;
|
|
FUN_1401bbe20(lVar12,uVar11,local_1968,local_1ad0);
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6fae;
|
|
FUN_14016dbe0(uVar15);
|
|
local_1ad8 = '\0';
|
|
lVar12 = local_1af0 + 0xc0;
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a6fc3;
|
|
FUN_1401baa20(lVar12);
|
|
plVar13[lVar20 * 2] = 0;
|
|
plVar13[lVar20 * 2] = *(longlong *)(lVar18 + (longlong)plVar13);
|
|
plVar13[lVar20 * 2 + 1] = *(longlong *)(lVar18 + 8 + (longlong)plVar13);
|
|
goto LAB_1401a7063;
|
|
}
|
|
}
|
|
lVar20 = lVar20 + 1;
|
|
plVar21 = local_1a98;
|
|
} while (lVar20 < lVar10);
|
|
}
|
|
if ((plVar13 != (longlong *)0x0) && ((int)plVar13[-2] == 0xdddd)) {
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a70af;
|
|
free(plVar13 + -2);
|
|
}
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a70bc;
|
|
FUN_14016ddc0(local_1968);
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a70c9;
|
|
FUN_14016aac0(local_1a28);
|
|
local_1ae0 = local_1a10;
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a70e1;
|
|
FUN_14016d0e0(local_1a10);
|
|
if (local_1a08 != 0) {
|
|
if (local_19fc < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar17 + -8) = &UNK_1401a70fa;
|
|
FUN_14016d6b0();
|
|
}
|
|
local_1a00 = 0;
|
|
}
|
|
local_1ae0 = local_1a78;
|
|
*(undefined8 *)(puVar17 + -8) = 0x1401a7118;
|
|
FUN_14016d0e0(local_1a78);
|
|
puVar16 = puVar17;
|
|
if (local_1a70 != 0) {
|
|
if (local_1a64 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar17 + -8) = &UNK_1401a7131;
|
|
FUN_14016d6b0();
|
|
}
|
|
local_1a68 = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (plVar21 == (longlong *)0x0) goto LAB_1401a717f;
|
|
if (local_1aa0 == (longlong *)0x0) goto LAB_1401a7177;
|
|
lVar10 = *local_1aa0;
|
|
plVar13 = local_1aa0;
|
|
}
|
|
pcVar3 = *(code **)(lVar10 + 0x18);
|
|
*(undefined8 *)(puVar16 + -8) = 0x1401a7175;
|
|
(*pcVar3)(plVar13,plVar21);
|
|
LAB_1401a717f:
|
|
*(undefined8 *)(puVar16 + -8) = 0x1401a718e;
|
|
return;
|
|
}
|
|
|