/* 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::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::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::vftable; *(undefined8 *)(puVar17 + -8) = 0x1401a6a0b; FUN_14016d970(lVar8); puVar16 = puVar17; LAB_1401a6a0b: *(undefined8 *)(puVar16 + -8) = 0x1401a6a1a; return; }