/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x14016d300 FUN_14016d300 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ exception * FUN_14016d300(exception *param_1,wchar_t *param_2,undefined8 param_3,undefined8 param_4) { int *piVar1; undefined *puVar2; int iVar3; int iVar4; int iVar5; undefined *puVar6; undefined8 local_res18; undefined8 local_res20; undefined1 auStack_928 [32]; undefined *local_908; undefined1 local_900; exception *local_8f8; undefined8 local_8f0; undefined1 *local_8e8; undefined1 local_8e0 [136]; wchar_t local_858 [1040]; ulonglong local_38; local_8f0 = 0xfffffffffffffffe; local_38 = DAT_1403463c0 ^ (ulonglong)auStack_928; local_res18 = param_3; local_res20 = param_4; local_8f8 = param_1; std::exception::exception(param_1); *(undefined ***)param_1 = Proud::Exception::vftable; FUN_14016d8c0(); *(undefined **)(param_1 + 0x40) = PTR_DAT_140344098; FUN_14016d8c0(); puVar2 = PTR_DAT_1403440a0; local_908 = PTR_DAT_1403440a0; if (param_2 == (wchar_t *)0x0) { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x80070057); } iVar3 = vswprintf_s(local_858,0x400,param_2,(va_list)&local_res18); iVar4 = 0; if ((puVar2 != (undefined *)0x0) && (puVar2 != PTR_DAT_1403440a0)) { iVar4 = *(int *)(puVar2 + -8); } iVar5 = iVar3; if (((iVar3 <= iVar4) && (iVar5 = 0, puVar2 != (undefined *)0x0)) && (puVar2 != PTR_DAT_1403440a0) ) { iVar5 = *(int *)(puVar2 + -8); } iVar4 = 1; if (1 < iVar5) { iVar4 = iVar5; } iVar5 = 0; if ((puVar2 != (undefined *)0x0) && (iVar5 = 0, puVar2 != PTR_DAT_1403440a0)) { iVar5 = *(int *)(puVar2 + -8); } if (iVar5 < iVar4) { FUN_14004e770(&local_908); } FUN_14004e850(&local_908); puVar2 = local_908; puVar6 = local_908; if (local_908 == (undefined *)0x0) { puVar6 = PTR_DAT_1403440a0; } FUN_14016d770(puVar6,local_858,iVar3); puVar6 = puVar2; if (puVar2 == (undefined *)0x0) { puVar6 = PTR_DAT_1403440a0; } iVar3 = FUN_14016d740(puVar6); iVar4 = 0; if (0 < iVar3) { iVar4 = iVar3; } iVar3 = 0; if ((puVar2 != (undefined *)0x0) && (iVar3 = 0, puVar2 != PTR_DAT_1403440a0)) { iVar3 = *(int *)(puVar2 + -8); } if ((iVar4 < iVar3) || (iVar4 = 0, puVar2 == (undefined *)0x0)) { LAB_14016d472: if (puVar2 != PTR_DAT_1403440a0) { puVar6 = PTR_DAT_1403440a0; if (puVar2 == (undefined *)0x0) goto LAB_14016d4a0; if ((int *)(puVar2 + -8) != (int *)0x0) { *(int *)(puVar2 + -8) = iVar4; *(undefined2 *)(puVar2 + (longlong)iVar4 * 2) = 0; } } } else if (puVar2 != PTR_DAT_1403440a0) { iVar4 = *(int *)(puVar2 + -8); goto LAB_14016d472; } puVar6 = PTR_DAT_1403440a0; if (puVar2 != (undefined *)0x0) { puVar6 = puVar2; } LAB_14016d4a0: local_8e8 = local_8e0; FUN_14016ac90(&local_8e8,puVar6,3); FUN_14016bfb0(param_1 + 0x40,local_8e8); if (local_8e8 != local_8e0) { free(local_8e8); } *(undefined4 *)(param_1 + 0x18) = 0; *(undefined4 *)(param_1 + 0x38) = 1; if (((puVar2 != (undefined *)0x0) && (puVar2 != PTR_DAT_1403440a0)) && (puVar2 + -8 != (undefined *)0x0)) { puVar6 = (undefined *)FUN_14016d8c0(); local_908 = puVar6; FUN_14016db50(puVar6); local_900 = 1; piVar1 = (int *)(puVar2 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(puVar2 + -8); } FUN_14016dbe0(puVar6); } return param_1; }