/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400c3fb0 FUN_1400c3fb0 * 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,0x0001400c465c) */ void FUN_1400c3fb0(longlong param_1,uint *param_2,wchar_t *param_3,longlong param_4) { uint uVar1; char *pcVar2; code *pcVar3; LPVOID pvVar4; int iVar5; ulonglong uVar6; undefined8 uVar7; longlong lVar8; ulonglong uVar9; undefined4 *puVar10; int *piVar11; uint uVar12; wchar_t *pwVar13; undefined1 *puVar14; longlong lVar15; longlong *plVar16; ulonglong uVar17; undefined1 *puVar18; undefined1 *puVar19; uint uVar20; undefined8 *puVar21; longlong lVar22; undefined8 *puVar23; SIZE_T *pSVar24; longlong lVar25; ulonglong uVar26; undefined1 auStack_1b88 [32]; int local_1b68 [2]; longlong *local_1b60; longlong *local_1b58; undefined **local_1b50; longlong *local_1b48; LPVOID local_1b40; undefined8 local_1b38; undefined8 local_1b30; uint local_1b28; int local_1b20 [2]; longlong local_1b18; longlong local_1b10; uint local_1b08; int local_1b04; int *local_1af8; undefined1 local_1af0; undefined4 local_1ae8; undefined4 uStack_1ae4; undefined4 local_1ad8; undefined4 uStack_1ad4; int *local_1ad0; undefined1 local_1ac8; SIZE_T local_1ac0; undefined1 local_1ab8; longlong local_1ab0; uint uStack_1aa8; undefined4 uStack_1aa4; SIZE_T local_1aa0; undefined1 local_1a98; longlong local_1a90; uint uStack_1a88; undefined4 uStack_1a84; undefined8 local_1a80; exception local_1a78 [88]; undefined8 local_1a20; undefined4 local_1a18 [2]; longlong local_1a10; longlong local_1a08; uint local_1a00; int local_19fc; undefined1 local_19f0 [136]; longlong local_1968; undefined8 uStack_1960; longlong *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 = 0x1400c3fc6; puVar18 = auStack_1b88; puVar19 = auStack_1b88; local_1a80 = 0xfffffffffffffffe; local_48 = DAT_1401ac5a0 ^ (ulonglong)local_1b68; uVar17 = 0; local_1b48 = (longlong *)0x0; local_1b40 = (LPVOID)0x0; local_1b38 = 0; local_1b30 = 0; local_1b50 = Proud::BypassDestList::vftable; pwVar13 = param_3; uVar6 = thunk_FUN_1400bd570(param_2,(longlong)&local_1b50,param_3,param_4); puVar14 = auStack_1b88; if (((char)uVar6 == '\0') || (uVar6 = FUN_1400bcfd0(param_2,&local_1b58,pwVar13,param_4), plVar16 = local_1b58, puVar14 = auStack_1b88, (char)uVar6 == '\0')) { LAB_1400c47ab: pvVar4 = local_1b40; plVar16 = local_1b48; local_1b50 = Proud::CFastArray::vftable; if (local_1b40 == (LPVOID)0x0) goto LAB_1400c47db; puVar19 = puVar14; if (local_1b48 != (longlong *)0x0) { pcVar3 = *(code **)(*local_1b48 + 0x18); *(undefined8 *)(puVar14 + -8) = 0x1400c47d4; (*pcVar3)(plVar16,pvVar4); goto LAB_1400c47db; } } else { uVar20 = (uint)local_1b58; if ((-1 < (int)uVar20) && ((int)uVar20 < DAT_1401ac140)) { uVar1 = *param_2; uVar12 = (int)uVar1 >> 0x1f & 7; iVar5 = FUN_14007c120((longlong)param_2,(ulonglong)uVar12,pwVar13,param_4); if (((int)(uVar12 + uVar1) >> 3) + uVar20 != iVar5) { param_4 = 2; FUN_14009b0d0(*(longlong **)(param_1 + 0x148),param_3, "msg.GetReadOffset() + payloadLength == msg.GetLength()",2); } FUN_1400bca00(local_1b20); uVar6 = (ulonglong)plVar16 & 0xffffffff; uVar7 = FUN_1400bcc60(param_2,local_1b20,uVar20,param_4); if ((char)uVar7 == '\0') { FUN_14009b0d0(*(longlong **)(param_1 + 0x148),param_3,"0",2); local_1b58 = &local_1b18; FUN_1400d1800(&local_1b18); puVar14 = auStack_1b88; if (local_1b10 != 0) { if (local_1b04 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_1b08 = 0; puVar14 = 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_1400d1800(&local_1b18); puVar14 = auStack_1b88; if (local_1b10 != 0) { if (local_1b04 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_1b08 = 0; puVar14 = auStack_1b88; } } else { lVar25 = lVar8 * 0x18; uVar26 = lVar25 + 0x10; if (uVar26 < 0x401) { uVar9 = lVar25 + 0x1f; if (uVar9 <= uVar26) { uVar9 = 0xffffffffffffff0; } lVar25 = -(uVar9 & 0xfffffffffffffff0); puVar18 = auStack_1b88 + lVar25; puVar10 = (undefined4 *)((longlong)local_1b68 + lVar25); puVar23 = (undefined8 *)0x0; if (puVar10 != (undefined4 *)0x0) { *puVar10 = 0xcccc; puVar18 = auStack_1b88 + lVar25; LAB_1400c418b: puVar23 = (undefined8 *)(puVar10 + 4); } } else { puVar10 = malloc(uVar26); puVar23 = (undefined8 *)0x0; if (puVar10 != (undefined4 *)0x0) { *puVar10 = 0xdddd; puVar18 = auStack_1b88; goto LAB_1400c418b; } } pwVar13 = (wchar_t *)**(longlong **)(param_1 + 0x148); pcVar3 = *(code **)(pwVar13 + 0x2c); *(undefined8 *)(puVar18 + -8) = 0x1400c419c; piVar11 = (int *)(*pcVar3)(); local_1ad0 = piVar11; *(undefined8 *)(puVar18 + -8) = 0x1400c41ab; FUN_14006b350(piVar11); local_1ac8 = 1; if (DAT_1401b42cf != '\0') { uVar6 = **(ulonglong **)(param_1 + 0x148); pwVar13 = L"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_ReliableRelay1"; pcVar3 = *(code **)(uVar6 + 200); *(undefined8 *)(puVar18 + -8) = 0x1400c41d3; (*pcVar3)(); } pcVar3 = *(code **)(*(longlong *)param_3 + 0x10); *(undefined8 *)(puVar18 + -8) = 0x1400c41dd; local_1b28 = (*pcVar3)(); local_1b68[0] = 0; puVar21 = puVar23; uVar26 = uVar17; if (0 < lVar8) { do { pvVar4 = local_1b40; if ((longlong)uVar17 < 0) { LAB_1400c427e: /* WARNING: Subroutine does not return */ *(undefined **)(puVar18 + -8) = &UNK_1400c4283; FUN_14006be30(param_3,pwVar13,uVar6,param_4); } if ((int)local_1b38 <= (int)uVar26) goto LAB_1400c427e; uVar20 = *(uint *)((longlong)local_1b40 + uVar17 * 8); pwVar13 = (wchar_t *)(ulonglong)uVar20; lVar8 = *(longlong *)(param_1 + 0x148); *(undefined8 *)(puVar18 + -8) = 0x1400c421f; lVar8 = FUN_14007dea0(lVar8,uVar20); if (lVar8 != 0) { *(undefined8 *)(puVar18 + -8) = 0x1400c4233; FUN_1400d8960(lVar8 + 0xc0); local_1ae8 = *(undefined4 *)((longlong)pvVar4 + uVar17 * 8 + 4); local_1ad8 = *(undefined4 *)((longlong)pvVar4 + uVar17 * 8); *puVar21 = CONCAT44(uStack_1ae4,local_1ae8); puVar21[1] = lVar8; puVar21[2] = CONCAT44(uStack_1ad4,local_1ad8); local_1b68[0] = local_1b68[0] + 1; puVar21 = puVar21 + 3; } uVar17 = uVar17 + 1; param_3 = (wchar_t *)(longlong)(int)local_1b60; uVar26 = (ulonglong)((int)uVar26 + 1); } while ((longlong)uVar17 < (longlong)param_3); } piVar11 = local_1ad0; iVar5 = local_1b68[0]; *(undefined8 *)(puVar18 + -8) = 0x1400c4290; FUN_14006b3e0((longlong)piVar11); local_1ac8 = 0; lVar8 = (longlong)iVar5; while ((0 < lVar8 && (lVar25 = 0, 0 < lVar8))) { lVar22 = lVar8 * 0x18 + -0x18; do { uVar6 = puVar23[lVar25 * 3]; local_1b60 = (longlong *)puVar23[lVar25 * 3 + 1]; local_1a20 = puVar23[lVar25 * 3 + 2]; pcVar3 = *(code **)(*(longlong *)(puVar23[lVar25 * 3 + 1] + 0x108) + 0x10); *(undefined8 *)(puVar18 + -8) = 0x1400c42eb; piVar11 = (int *)(*pcVar3)(); local_1af0 = 0; local_1af8 = piVar11; *(undefined8 *)(puVar18 + -8) = 0x1400c4302; FUN_1400bca00(local_1a18); pSVar24 = (SIZE_T *)0x80; puVar14 = local_19f0; *(undefined8 *)(puVar18 + -8) = 0x1400c431c; FUN_1400bc680((longlong)local_1a18,(longlong)puVar14,0x80,param_4); *(undefined8 *)(puVar18 + -8) = 0x1400c432b; FUN_140054a10((longlong)local_1a18,CONCAT71((int7)((ulonglong)puVar14 >> 8),0x17), (SIZE_T)pSVar24,param_4); uVar17 = (ulonglong)local_1b28; *(undefined8 *)(puVar18 + -8) = 0x1400c433a; FUN_140014500((longlong)local_1a18,uVar17,(SIZE_T)pSVar24,param_4); *(undefined8 *)(puVar18 + -8) = 0x1400c4348; FUN_140014500((longlong)local_1a18,uVar6 & 0xffffffff,(SIZE_T)pSVar24,param_4); *(undefined8 *)(puVar18 + -8) = 0x1400c435b; FUN_1400bc450((longlong *)&local_1ae8,(longlong)local_1a18); lVar15 = (longlong)(int)local_1b58; *(undefined8 *)(puVar18 + -8) = 0x1400c436c; FUN_1400bddd0((longlong)local_1a18,lVar15,(SIZE_T)pSVar24,param_4); local_4c = 200; local_50 = 0; local_58 = local_cd8; local_cdc = 200; local_ce0 = 0; local_ce8 = &local_1968; if (local_1a10 == 0) { uVar20 = local_1a00; if (local_1a08 == 0) { /* WARNING: Subroutine does not return */ *(undefined8 *)(puVar18 + -8) = 0x1400c471d; FUN_1400d1900(0,lVar15,pSVar24,param_4); } } else { uVar20 = *(uint *)(local_1a10 + 0x18); } lVar15 = local_1a08; if (local_1a08 == 0) { if (local_1a10 == 0) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar18 + -8) = &UNK_1400c4717; FUN_1400d1900(0,(ulonglong)uVar20,pSVar24,param_4); } lVar15 = 0; if (*(int *)(local_1a10 + 0x18) != 0) { lVar15 = *(longlong *)(local_1a10 + 0x10); } } local_ce0 = 1; uStack_1960 = CONCAT44(uStack_1aa4,uVar20); plVar16 = &local_1968; local_1ab0 = lVar15; uStack_1aa8 = uVar20; local_1968 = lVar15; *(undefined8 *)(puVar18 + -8) = 0x1400c4423; FUN_14007cb60((longlong)local_cd8,(longlong)plVar16,pSVar24,param_4); if (local_ce8 == (longlong *)0x0) { *(undefined8 *)(puVar18 + -8) = 0x1400c46fe; FUN_14006ba50(local_1a78,(wchar_t *)PTR_u_ArrayWithExternalBuffer_is_unini_1401ad9a0 ,pSVar24,param_4); /* WARNING: Subroutine does not return */ *(undefined **)(puVar18 + -8) = &UNK_1400c4711; _CxxThrowException(local_1a78,(ThrowInfo *)&DAT_1401a93e8); } if (local_cdc < 0) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar18 + -8) = &UNK_1400c46ea; FUN_14006be00(); } local_cdc = 200; local_ce0 = 0; local_ce8 = &local_1968; if (local_1b18 == 0) { uVar20 = local_1b08; if (local_1b10 == 0) { /* WARNING: Subroutine does not return */ *(undefined8 *)(puVar18 + -8) = 0x1400c46e4; FUN_1400d1900(0,plVar16,pSVar24,param_4); } } else { uVar20 = *(uint *)(local_1b18 + 0x18); } lVar15 = local_1b10; if (local_1b10 == 0) { if (local_1b18 == 0) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar18 + -8) = &UNK_1400c46de; FUN_1400d1900(0,(ulonglong)uVar20,pSVar24,param_4); } lVar15 = 0; if (*(int *)(local_1b18 + 0x18) != 0) { lVar15 = *(longlong *)(local_1b18 + 0x10); } } local_ce0 = 1; uStack_1960 = CONCAT44(uStack_1a84,uVar20); local_1a90 = lVar15; uStack_1a88 = uVar20; local_1968 = lVar15; *(undefined8 *)(puVar18 + -8) = 0x1400c44cd; FUN_14007cb60((longlong)local_cd8,(longlong)&local_1968,pSVar24,param_4); if (local_ce8 == (longlong *)0x0) { *(undefined8 *)(puVar18 + -8) = 0x1400c46c5; FUN_14006ba50(local_1a78,(wchar_t *)PTR_u_ArrayWithExternalBuffer_is_unini_1401ad9a0 ,pSVar24,param_4); /* WARNING: Subroutine does not return */ *(undefined **)(puVar18 + -8) = &UNK_1400c46d8; _CxxThrowException(local_1a78,(ThrowInfo *)&DAT_1401a93e8); } if (local_cdc < 0) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar18 + -8) = &UNK_1400c46b1; FUN_14006be00(); } if (lVar25 == 0) { local_1af0 = 1; *(undefined8 *)(puVar18 + -8) = 0x1400c4585; FUN_14006b350(piVar11); plVar16 = local_1b60; local_1aa0 = 0; local_1a98 = 1; pSVar24 = &local_1aa0; pcVar2 = *(char **)((longlong)local_1b60 + 0x748); *(undefined8 *)(puVar18 + -8) = 0x1400c45b1; FUN_1400d87b0(pcVar2,(longlong)local_cd8,pSVar24,param_4); *(undefined8 *)(puVar18 + -8) = 0x1400c45b9; FUN_14006b3e0((longlong)piVar11); local_1af0 = 0; *(undefined8 *)(puVar18 + -8) = 0x1400c45ca; FUN_1400d8970((longlong)plVar16 + 0xc0); puVar23[1] = 0; *puVar23 = *(undefined8 *)(lVar22 + (longlong)puVar23); puVar23[1] = *(undefined8 *)(lVar22 + 8 + (longlong)puVar23); puVar23[2] = *(undefined8 *)(lVar22 + 0x10 + (longlong)puVar23); LAB_1400c45eb: local_1b68[0] = local_1b68[0] + -1; lVar8 = lVar8 + -1; lVar22 = lVar22 + -0x18; } else { *(undefined8 *)(puVar18 + -8) = 0x1400c44fa; local_1af0 = FUN_14006b3a0(piVar11); if ((bool)local_1af0) { local_1ac0 = 0; local_1ab8 = 1; pSVar24 = &local_1ac0; pcVar2 = *(char **)((longlong)local_1b60 + 0x748); *(undefined8 *)(puVar18 + -8) = 0x1400c4538; FUN_1400d87b0(pcVar2,(longlong)local_cd8,pSVar24,param_4); *(undefined8 *)(puVar18 + -8) = 0x1400c4540; FUN_14006b3e0((longlong)piVar11); local_1af0 = 0; lVar15 = (longlong)local_1b60 + 0xc0; *(undefined8 *)(puVar18 + -8) = 0x1400c4555; FUN_1400d8970(lVar15); puVar23[lVar25 * 3 + 1] = 0; puVar23[lVar25 * 3] = *(undefined8 *)(lVar22 + (longlong)puVar23); puVar23[lVar25 * 3 + 1] = *(undefined8 *)(lVar22 + 8 + (longlong)puVar23); puVar23[lVar25 * 3 + 2] = *(undefined8 *)(lVar22 + 0x10 + (longlong)puVar23); goto LAB_1400c45eb; } } if (local_58 == (undefined1 *)0x0) { *(undefined8 *)(puVar18 + -8) = 0x1400c4698; FUN_14006ba50(local_1a78,(wchar_t *)PTR_u_ArrayWithExternalBuffer_is_unini_1401ad9a0 ,pSVar24,param_4); /* WARNING: Subroutine does not return */ *(undefined **)(puVar18 + -8) = &UNK_1400c46ab; _CxxThrowException(local_1a78,(ThrowInfo *)&DAT_1401a93e8); } if (local_4c < 0) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar18 + -8) = &UNK_1400c4684; FUN_14006be00(); } local_50 = 0; *(undefined8 *)(puVar18 + -8) = 0x1400c4622; FUN_1400bc470((longlong *)&local_1ae8); local_1b60 = &local_1a10; *(undefined8 *)(puVar18 + -8) = 0x1400c463a; FUN_1400d1800(&local_1a10); if (local_1a08 != 0) { if (local_19fc < 0) { /* WARNING: Subroutine does not return */ *(undefined8 *)(puVar18 + -8) = 0x1400c467e; FUN_14006be00(); } local_1a00 = 0; } lVar25 = lVar25 + 1; } while (lVar25 < lVar8); } if ((puVar23 != (undefined8 *)0x0) && (*(int *)(puVar23 + -2) == 0xdddd)) { *(undefined8 *)(puVar18 + -8) = 0x1400c4735; free(puVar23 + -2); } local_1b58 = &local_1b18; *(undefined8 *)(puVar18 + -8) = 0x1400c4747; FUN_1400d1800(&local_1b18); puVar14 = puVar18; if (local_1b10 != 0) { if (local_1b04 < 0) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar18 + -8) = &UNK_1400c475a; FUN_14006be00(); } local_1b08 = 0; } } } goto LAB_1400c47ab; } FUN_14009b0d0(*(longlong **)(param_1 + 0x148),param_3,"0",2); local_1b50 = Proud::CFastArray::vftable; puVar14 = auStack_1b88; if (local_1b40 == (LPVOID)0x0) goto LAB_1400c47db; if (local_1b48 != (longlong *)0x0) { (**(code **)(*local_1b48 + 0x18))(); puVar14 = auStack_1b88; goto LAB_1400c47db; } } pvVar4 = local_1b40; local_1b50 = Proud::CFastArray::vftable; *(undefined8 *)(puVar19 + -8) = 0x1400c47db; FUN_14006cc60(pvVar4); puVar14 = puVar19; LAB_1400c47db: *(undefined8 *)(puVar14 + -8) = 0x1400c47ea; return; }