/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x14004fb10 FUN_14004fb10 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_14004fb10(longlong param_1,longlong param_2,undefined8 param_3) { int *piVar1; short sVar2; uint *puVar3; undefined8 *puVar4; undefined8 uVar5; ulonglong uVar6; short *psVar7; undefined2 *puVar8; longlong lVar9; undefined4 *puVar10; short *psVar11; undefined *puVar12; undefined1 auStack_f8 [32]; undefined8 *local_d8; undefined2 local_d0; undefined2 local_ce; undefined8 local_cc; undefined2 local_c4; undefined4 local_c2; undefined2 local_be; undefined *local_b8; undefined *local_b0 [2]; longlong local_a0; undefined1 local_98; undefined8 local_90; undefined1 local_88; undefined8 local_80; undefined1 local_78; undefined8 local_70; undefined2 local_68; undefined6 uStack_66; undefined8 local_58; ulonglong local_50; ulonglong local_40; local_70 = 0xfffffffffffffffe; local_40 = DAT_1403463c0 ^ (ulonglong)auStack_f8; lVar9 = param_1 + 0x150; local_a0 = lVar9; FUN_14016db50(lVar9); local_98 = 1; puVar4 = (undefined8 *)FUN_14004f780(param_1,&local_d8,*(undefined4 *)(param_2 + 0x30)); puVar10 = (undefined4 *)0x0; if ((undefined8 *)*puVar4 != (undefined8 *)0x0) { puVar10 = *(undefined4 **)*puVar4; } if ((local_d8 != (undefined8 *)0x0) && (local_d8[1] = local_d8[1] + -1, lVar9 = local_a0, local_d8[1] == 0)) { if ((void *)*local_d8 != (void *)0x0) { operator_delete((void *)*local_d8); } FUN_14016d970(local_d8); lVar9 = local_a0; } if (puVar10 != (undefined4 *)0x0) { local_be = *(undefined2 *)(puVar10 + 1); local_c2 = *puVar10; local_c4 = 0; local_ce = 0x465; local_d0 = 0x14; local_cc = 0; FUN_140130d00(*(undefined8 *)(param_1 + 0xe0)); } uVar6 = (ulonglong)*(uint *)(param_2 + 0x30) % (ulonglong)*(uint *)(param_1 + 0x120); if (*(longlong *)(param_1 + 0x100) != 0) { puVar3 = *(uint **)(*(longlong *)(param_1 + 0x100) + uVar6 * 8); while( true ) { if ((puVar3 == (uint *)0x0) || ((uint)uVar6 != puVar3[8] % *(uint *)(param_1 + 0x120))) goto LAB_14004fc5c; if (*puVar3 == *(uint *)(param_2 + 0x30)) break; puVar3 = *(uint **)(puVar3 + 4); } FUN_140044ee0(param_1 + 0xf8,puVar3); } LAB_14004fc5c: FUN_140170990(local_b0,param_2); puVar4 = (undefined8 *)FUN_1401990a0(param_3,&local_b8); psVar7 = (short *)*puVar4; if ((short *)*puVar4 == (short *)0x0) { psVar7 = (short *)PTR_DAT_1403440a0; } local_50 = 7; local_58 = 0; local_68 = 0; uVar6 = 0xffffffffffffffff; psVar11 = psVar7; do { if (uVar6 == 0) break; uVar6 = uVar6 - 1; sVar2 = *psVar11; psVar11 = psVar11 + 1; } while (sVar2 != 0); FUN_140056040(&local_68,psVar7,~uVar6 - 1); if (((local_b8 != (undefined *)0x0) && (local_b8 != PTR_DAT_1403440a0)) && (local_b8 + -8 != (undefined *)0x0)) { uVar5 = FUN_14016d8c0(); local_80 = uVar5; FUN_14016db50(uVar5); local_78 = 1; piVar1 = (int *)(local_b8 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(local_b8 + -8); } FUN_14016dbe0(uVar5); } local_b8 = PTR_DAT_1403440a0; puVar12 = local_b0[0]; if (local_b0[0] == (undefined *)0x0) { puVar12 = PTR_DAT_140344098; } FUN_1400a6b90("Server Leave [%d][%s] ",*(undefined4 *)(param_2 + 0x30),puVar12); puVar8 = &local_68; if (7 < local_50) { puVar8 = (undefined2 *)CONCAT62(uStack_66,local_68); } FUN_1400a6c00(L"[%s]\n",puVar8); if (7 < local_50) { operator_delete((void *)CONCAT62(uStack_66,local_68)); } local_50 = 7; local_58 = 0; local_68 = 0; if (((local_b0[0] != (undefined *)0x0) && (local_b0[0] != PTR_DAT_140344098)) && (local_b0[0] + -8 != (undefined *)0x0)) { uVar5 = FUN_14016d8c0(); local_90 = uVar5; FUN_14016db50(uVar5); local_88 = 1; piVar1 = (int *)(local_b0[0] + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(local_b0[0] + -8); } FUN_14016dbe0(uVar5); } local_b0[0] = PTR_DAT_140344098; FUN_14016dbe0(lVar9); return; }