/* 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; }