308 lines
10 KiB
C
308 lines
10 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x14017fb20 FUN_14017fb20
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
|
|
/* WARNING: Removing unreachable block (ram,0x00014017ff80) */
|
|
|
|
void FUN_14017fb20(longlong *param_1)
|
|
|
|
{
|
|
ulonglong _Size;
|
|
undefined4 uVar1;
|
|
longlong lVar2;
|
|
code *pcVar3;
|
|
undefined8 uVar4;
|
|
double dVar5;
|
|
undefined8 uVar6;
|
|
ulonglong uVar7;
|
|
undefined4 *puVar8;
|
|
longlong lVar9;
|
|
undefined1 *puVar10;
|
|
undefined1 *puVar11;
|
|
longlong lVar12;
|
|
longlong lVar13;
|
|
undefined8 *puVar14;
|
|
undefined1 auStack_dd8 [32];
|
|
undefined4 local_db8 [2];
|
|
longlong local_db0;
|
|
longlong local_da8;
|
|
undefined4 local_da0;
|
|
int local_d9c;
|
|
undefined8 local_d90;
|
|
char local_d88;
|
|
longlong *local_d80;
|
|
undefined8 local_d78;
|
|
undefined1 local_d70;
|
|
undefined8 local_d68;
|
|
undefined1 local_d60;
|
|
undefined8 local_d58;
|
|
undefined4 uStack_d50;
|
|
undefined4 uStack_d4c;
|
|
undefined8 local_d48;
|
|
undefined1 local_d40;
|
|
undefined8 local_d38;
|
|
undefined4 uStack_d30;
|
|
undefined4 uStack_d2c;
|
|
undefined8 local_d28;
|
|
undefined1 local_d20 [72];
|
|
undefined4 local_cd8;
|
|
undefined4 uStack_cd4;
|
|
undefined4 uStack_cd0;
|
|
undefined4 uStack_ccc;
|
|
undefined4 *local_58;
|
|
undefined4 local_50;
|
|
int local_4c;
|
|
ulonglong local_48;
|
|
|
|
puVar10 = auStack_dd8;
|
|
puVar11 = auStack_dd8;
|
|
local_d28 = 0xfffffffffffffffe;
|
|
local_48 = DAT_1403463c0 ^ (ulonglong)local_db8;
|
|
uVar6 = (**(code **)(*param_1 + 0x58))();
|
|
local_d48 = uVar6;
|
|
FUN_14016db50(uVar6);
|
|
local_d40 = 1;
|
|
if (DAT_14034c86f != '\0') {
|
|
(**(code **)(*param_1 + 200))(param_1,L"Proud::CNetServerImpl::PurgeTooOldUnmatureClient");
|
|
}
|
|
if ((int)param_1[0x2e1] < 1) {
|
|
FUN_14016dbe0(uVar6);
|
|
goto LAB_140180038;
|
|
}
|
|
lVar13 = (longlong)(int)param_1[0x2e1] * 8;
|
|
_Size = lVar13 + 0x10;
|
|
if (_Size < 0x401) {
|
|
uVar7 = lVar13 + 0x1f;
|
|
if (uVar7 <= _Size) {
|
|
uVar7 = 0xffffffffffffff0;
|
|
}
|
|
lVar13 = -(uVar7 & 0xfffffffffffffff0);
|
|
puVar10 = auStack_dd8 + lVar13;
|
|
puVar8 = (undefined4 *)((longlong)local_db8 + lVar13);
|
|
puVar14 = (undefined8 *)0x0;
|
|
puVar11 = auStack_dd8 + lVar13;
|
|
if (puVar8 != (undefined4 *)0x0) {
|
|
*puVar8 = 0xcccc;
|
|
LAB_14017fc18:
|
|
puVar14 = (undefined8 *)(puVar8 + 4);
|
|
puVar11 = puVar10;
|
|
}
|
|
}
|
|
else {
|
|
puVar8 = malloc(_Size);
|
|
puVar14 = (undefined8 *)0x0;
|
|
puVar11 = auStack_dd8;
|
|
if (puVar8 != (undefined4 *)0x0) {
|
|
*puVar8 = 0xdddd;
|
|
goto LAB_14017fc18;
|
|
}
|
|
}
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017fc28;
|
|
dVar5 = (double)FUN_1401a1eb0(param_1 + 0xec);
|
|
lVar12 = 0;
|
|
lVar13 = lVar12;
|
|
if (param_1[0x2e1] != 0) {
|
|
lVar13 = param_1[0x2df];
|
|
}
|
|
for (; lVar13 != 0; lVar13 = *(longlong *)(lVar13 + 0x18)) {
|
|
lVar2 = *(longlong *)(lVar13 + 0x10);
|
|
if ((DAT_14034c8a8 < dVar5 - *(double *)(lVar2 + 0x690)) && (*(char *)(lVar2 + 0x698) == '\0'))
|
|
{
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017fc7c;
|
|
FUN_1401baa10(lVar2 + 0xc0);
|
|
puVar14[lVar12] = lVar2;
|
|
lVar12 = lVar12 + 1;
|
|
}
|
|
}
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017fc94;
|
|
FUN_14016dbe0(uVar6);
|
|
local_d40 = 0;
|
|
while ((0 < lVar12 && (lVar13 = 0, 0 < lVar12))) {
|
|
do {
|
|
lVar2 = puVar14[lVar13];
|
|
pcVar3 = *(code **)(*(longlong *)(lVar2 + 0x108) + 0x10);
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017fcc2;
|
|
uVar6 = (*pcVar3)();
|
|
local_d88 = 0;
|
|
local_d90 = uVar6;
|
|
if (lVar13 == 0) {
|
|
local_d88 = 1;
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017fe3d;
|
|
FUN_14016db50(uVar6);
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017fe46;
|
|
FUN_14016b440(local_db8);
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017fe50;
|
|
FUN_14016abe0(local_db8);
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017fe5e;
|
|
FUN_14016b5a0(local_db8,0x800);
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017fe69;
|
|
FUN_14016b5a0(local_db8,0);
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017fe75;
|
|
FUN_14004eef0(local_db8,3);
|
|
local_4c = 200;
|
|
local_50 = 0;
|
|
local_58 = &local_cd8;
|
|
if (local_db0 == 0) {
|
|
uVar1 = local_da0;
|
|
if (local_da8 == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined8 *)(puVar11 + -8) = 0x14018001f;
|
|
FUN_14016d1e0();
|
|
}
|
|
}
|
|
else {
|
|
uVar1 = *(undefined4 *)(local_db0 + 0x18);
|
|
}
|
|
lVar9 = local_da8;
|
|
if (local_da8 == 0) {
|
|
if (local_db0 == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar11 + -8) = &UNK_140180019;
|
|
FUN_14016d1e0();
|
|
}
|
|
lVar9 = 0;
|
|
if (*(int *)(local_db0 + 0x18) != 0) {
|
|
lVar9 = *(longlong *)(local_db0 + 0x10);
|
|
}
|
|
}
|
|
local_50 = 1;
|
|
local_d38._0_4_ = (undefined4)lVar9;
|
|
local_d38._4_4_ = (undefined4)((ulonglong)lVar9 >> 0x20);
|
|
local_cd8 = (undefined4)local_d38;
|
|
uStack_cd4 = local_d38._4_4_;
|
|
uStack_ccc = uStack_d2c;
|
|
local_d68 = 0;
|
|
local_d60 = 1;
|
|
uVar4 = *(undefined8 *)(lVar2 + 0x748);
|
|
local_d38 = lVar9;
|
|
uStack_d30 = uVar1;
|
|
uStack_cd0 = uVar1;
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017ff10;
|
|
FUN_1401ba860(uVar4,&local_cd8);
|
|
if (local_58 == (undefined4 *)0x0) {
|
|
*(undefined8 *)(puVar11 + -8) = 0x140180000;
|
|
FUN_14016d300(local_d20,PTR_u_ArrayWithExternalBuffer_is_unini_1403440d0);
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar11 + -8) = &UNK_140180013;
|
|
_CxxThrowException(local_d20,(ThrowInfo *)&DAT_1403417f8);
|
|
}
|
|
if (local_4c < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar11 + -8) = &UNK_14017ffec;
|
|
FUN_14016d6b0();
|
|
}
|
|
*(undefined1 *)(lVar2 + 0x698) = 1;
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017ff3d;
|
|
FUN_14016dbe0(uVar6);
|
|
local_d88 = '\0';
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017ff4f;
|
|
FUN_1401baa20(lVar2 + 0xc0);
|
|
*puVar14 = puVar14[lVar12 + -1];
|
|
lVar12 = lVar12 + -1;
|
|
local_d80 = &local_db0;
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017ff6e;
|
|
FUN_14016d0e0(&local_db0);
|
|
if ((local_da8 != 0) && (local_d9c < 0)) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017ffe6;
|
|
FUN_14016d6b0();
|
|
}
|
|
}
|
|
else {
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017fcde;
|
|
local_d88 = FUN_14016dba0();
|
|
if (local_d88 != '\0') {
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017fcf5;
|
|
FUN_14016b440(local_db8);
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017fcff;
|
|
FUN_14016abe0(local_db8);
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017fd0d;
|
|
FUN_14016b5a0(local_db8,0x800);
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017fd18;
|
|
FUN_14016b5a0(local_db8,0);
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017fd24;
|
|
FUN_14004eef0(local_db8,3);
|
|
local_4c = 200;
|
|
local_50 = 0;
|
|
local_58 = &local_cd8;
|
|
if (local_db0 == 0) {
|
|
uVar1 = local_da0;
|
|
if (local_da8 == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017ffe0;
|
|
FUN_14016d1e0();
|
|
}
|
|
}
|
|
else {
|
|
uVar1 = *(undefined4 *)(local_db0 + 0x18);
|
|
}
|
|
lVar9 = local_da8;
|
|
if (local_da8 == 0) {
|
|
if (local_db0 == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar11 + -8) = &UNK_14017ffda;
|
|
FUN_14016d1e0();
|
|
}
|
|
lVar9 = 0;
|
|
if (*(int *)(local_db0 + 0x18) != 0) {
|
|
lVar9 = *(longlong *)(local_db0 + 0x10);
|
|
}
|
|
}
|
|
local_50 = 1;
|
|
local_d58._0_4_ = (undefined4)lVar9;
|
|
local_d58._4_4_ = (undefined4)((ulonglong)lVar9 >> 0x20);
|
|
local_cd8 = (undefined4)local_d58;
|
|
uStack_cd4 = local_d58._4_4_;
|
|
uStack_ccc = uStack_d4c;
|
|
local_d78 = 0;
|
|
local_d70 = 1;
|
|
uVar4 = *(undefined8 *)(lVar2 + 0x748);
|
|
local_d58 = lVar9;
|
|
uStack_d50 = uVar1;
|
|
uStack_cd0 = uVar1;
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017fdba;
|
|
FUN_1401ba860(uVar4,&local_cd8);
|
|
if (local_58 == (undefined4 *)0x0) {
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017ffc1;
|
|
FUN_14016d300(local_d20,PTR_u_ArrayWithExternalBuffer_is_unini_1403440d0);
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar11 + -8) = &UNK_14017ffd4;
|
|
_CxxThrowException(local_d20,(ThrowInfo *)&DAT_1403417f8);
|
|
}
|
|
if (local_4c < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar11 + -8) = &UNK_14017ffad;
|
|
FUN_14016d6b0();
|
|
}
|
|
*(undefined1 *)(lVar2 + 0x698) = 1;
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017fde7;
|
|
FUN_14016dbe0(uVar6);
|
|
local_d88 = '\0';
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017fdf9;
|
|
FUN_1401baa20(lVar2 + 0xc0);
|
|
puVar14[lVar13] = puVar14[lVar12 + -1];
|
|
lVar12 = lVar12 + -1;
|
|
local_d80 = &local_db0;
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017fe19;
|
|
FUN_14016d0e0(&local_db0);
|
|
if ((local_da8 != 0) && (local_d9c < 0)) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined8 *)(puVar11 + -8) = 0x14017ffa7;
|
|
FUN_14016d6b0();
|
|
}
|
|
}
|
|
}
|
|
lVar13 = lVar13 + 1;
|
|
} while (lVar13 < lVar12);
|
|
}
|
|
if ((puVar14 != (undefined8 *)0x0) && (*(int *)(puVar14 + -2) == 0xdddd)) {
|
|
*(undefined8 *)(puVar11 + -8) = 0x140180037;
|
|
free(puVar14 + -2);
|
|
}
|
|
LAB_140180038:
|
|
*(undefined8 *)(puVar11 + -8) = 0x140180047;
|
|
return;
|
|
}
|
|
|