/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400c4810 FUN_1400c4810 * 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,0x0001400c4e3e) */ void FUN_1400c4810(longlong param_1,uint *param_2,wchar_t *param_3,uint **param_4) { uint uVar1; longlong *plVar2; code *pcVar3; int iVar4; undefined8 uVar5; ulonglong uVar6; ulonglong uVar7; ulonglong uVar8; undefined4 *puVar9; int *piVar10; wchar_t *pwVar11; char *pcVar12; longlong lVar13; longlong *plVar14; uint uVar15; wchar_t *pwVar16; longlong lVar17; undefined1 *puVar18; int *piVar19; undefined1 *puVar20; longlong lVar21; wchar_t *pwVar22; longlong **pplVar23; undefined1 *puVar24; longlong *plVar25; longlong lVar26; longlong *plVar27; uint uVar28; undefined1 auStack_1b18 [32]; undefined4 local_1af8; uint local_1af4; undefined8 local_1af0; ulonglong local_1ae8; longlong *local_1ae0; bool local_1ad8; uint local_1ad0 [2]; undefined8 local_1ac8; undefined1 local_1ac0; undefined4 local_1abc; undefined1 local_1ab8; undefined1 local_1ab7; uint local_1ab0 [2]; undefined **local_1aa8; longlong *local_1aa0; longlong *local_1a98; ulonglong local_1a90; undefined8 local_1a88; int local_1a80 [2]; longlong local_1a78; longlong local_1a70; undefined4 local_1a68; int local_1a64; longlong local_1a58; wchar_t *local_1a50; undefined8 local_1a48; int *local_1a40; undefined1 local_1a38; undefined8 local_1a30; longlong local_1a28 [2]; undefined4 local_1a18 [2]; longlong local_1a10; 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 = 0x1400c4826; puVar20 = auStack_1b18; local_1a30 = 0xfffffffffffffffe; local_48 = DAT_1401ac5a0 ^ (ulonglong)&local_1af8; pwVar22 = param_3; local_1a58 = param_1; uVar5 = FUN_1400bd160(param_2,local_1ab0,param_3,param_4); puVar18 = auStack_1b18; if (((char)uVar5 == '\0') || (uVar6 = FUN_1400bcfd0(param_2,&local_1a48,pwVar22,param_4), puVar18 = auStack_1b18, (char)uVar6 == '\0')) goto LAB_1400c4f4f; plVar25 = (longlong *)0x0; local_1aa0 = (longlong *)0x0; local_1a98 = (longlong *)0x0; local_1a90 = 0; local_1a88 = 0; local_1aa8 = Proud::HostIDArray::vftable; uVar6 = FUN_1400bcfd0(param_2,&local_1ae8,pwVar22,param_4); plVar14 = plVar25; plVar27 = plVar25; if (((char)uVar6 == '\0') || ((iVar4 = (int)local_1ae8, plVar27 = (longlong *)0x0, iVar4 < 0 || (DAT_1401ac140 < iVar4)))) { LAB_1400c4f2f: puVar18 = auStack_1b18; if (plVar27 == (longlong *)0x0) goto LAB_1400c4f4f; puVar18 = auStack_1b18; if (plVar14 == (longlong *)0x0) { LAB_1400c4f47: *(undefined8 *)(puVar18 + -8) = 0x1400c4f4f; FUN_14006cc60(plVar27); goto LAB_1400c4f4f; } lVar17 = *plVar14; puVar18 = auStack_1b18; } else { FUN_14007b600((longlong)&local_1aa8,iVar4,(longlong)pwVar22); plVar27 = local_1a98; plVar14 = local_1a98; if ((int)local_1a90 == 0) { plVar14 = plVar25; } uVar6 = (ulonglong)(uint)(iVar4 * 4); uVar5 = FUN_1400bc930(param_2,plVar14,uVar6); plVar14 = local_1aa0; if ((char)uVar5 == '\0') goto LAB_1400c4f2f; uVar7 = FUN_1400bcfd0(param_2,&local_1ae8,uVar6,param_4); uVar8 = local_1ae8; puVar18 = auStack_1b18; if ((char)uVar7 != '\0') { uVar28 = (uint)local_1ae8; if (((int)uVar28 < 0) || (DAT_1401ac140 <= (int)uVar28)) { FUN_14009b0d0(*(longlong **)(param_1 + 0x148),param_3, "Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_UnreliableRelay1",2); puVar18 = auStack_1b18; } else { uVar1 = *param_2; uVar15 = (int)uVar1 >> 0x1f & 7; iVar4 = FUN_14007c120((longlong)param_2,(ulonglong)uVar15,uVar6,param_4); if (((int)(uVar15 + uVar1) >> 3) + uVar28 != iVar4) { param_4 = (uint **)0x2; FUN_14009b0d0(*(longlong **)(param_1 + 0x148),param_3, "msg.GetReadOffset() + payloadLength == msg.GetLength()",2); } FUN_1400bca00(local_1a80); pplVar23 = (longlong **)(uVar8 & 0xffffffff); uVar5 = FUN_1400bcc60(param_2,local_1a80,uVar28,param_4); if ((char)uVar5 == '\0') { FUN_14009b0d0(*(longlong **)(param_1 + 0x148),param_3, "Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_UnreliableRelay1",2); local_1ae0 = &local_1a78; FUN_1400d1800(&local_1a78); puVar18 = auStack_1b18; if (local_1a70 != 0) { if (local_1a64 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_1a68 = 0; puVar18 = auStack_1b18; } } else { iVar4 = (int)local_1a90; piVar19 = (int *)(longlong)(int)local_1a90; if ((int)local_1a90 < 1) { local_1ae0 = &local_1a78; FUN_1400d1800(&local_1a78); puVar18 = auStack_1b18; if (local_1a70 != 0) { if (local_1a64 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_1a68 = 0; puVar18 = auStack_1b18; } } else { uVar6 = ((longlong)piVar19 + 1) * 0x10; local_1ae0 = (longlong *)piVar19; if (uVar6 < 0x401) { uVar8 = uVar6 + 0xf; if (uVar8 <= uVar6) { uVar8 = 0xffffffffffffff0; } lVar17 = -(uVar8 & 0xfffffffffffffff0); puVar20 = auStack_1b18 + lVar17; puVar9 = (undefined4 *)((longlong)&local_1af8 + lVar17); pwVar22 = (wchar_t *)0x0; if (puVar9 != (undefined4 *)0x0) { *puVar9 = 0xcccc; puVar20 = auStack_1b18 + lVar17; LAB_1400c4aa2: pwVar22 = (wchar_t *)(puVar9 + 4); } } else { puVar9 = malloc(uVar6); pwVar22 = (wchar_t *)0x0; if (puVar9 != (undefined4 *)0x0) { *puVar9 = 0xdddd; puVar20 = auStack_1b18; goto LAB_1400c4aa2; } } pwVar16 = (wchar_t *)**(longlong **)(param_1 + 0x148); pcVar3 = *(code **)(pwVar16 + 0x2c); *(undefined8 *)(puVar20 + -8) = 0x1400c4ab3; piVar10 = (int *)(*pcVar3)(); local_1a40 = piVar10; *(undefined8 *)(puVar20 + -8) = 0x1400c4ac2; FUN_14006b350(piVar10); local_1a38 = 1; if (DAT_1401b42cf != '\0') { pplVar23 = (longlong **)**(ulonglong **)(param_1 + 0x148); pwVar16 = L"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_UnreliableRelay1"; pcVar3 = (code *)pplVar23[0x19]; *(undefined8 *)(puVar20 + -8) = 0x1400c4aea; (*pcVar3)(); } pcVar3 = *(code **)(*(longlong *)param_3 + 0x10); *(undefined8 *)(puVar20 + -8) = 0x1400c4af4; local_1af4 = (*pcVar3)(); local_1af0 = (ulonglong)local_1af0._4_4_ << 0x20; plVar14 = plVar25; pwVar11 = pwVar22; if (0 < iVar4) { do { local_1a50 = pwVar11; if (((longlong)plVar25 < 0) || ((int)piVar19 <= (int)plVar14)) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar20 + -8) = &UNK_1400c4b97; FUN_14006be30(param_3,pwVar16,pplVar23,param_4); } uVar28 = *(uint *)((longlong)plVar27 + (longlong)plVar25 * 4); pwVar16 = (wchar_t *)(ulonglong)uVar28; param_3 = *(wchar_t **)(param_1 + 0x148); *(undefined8 *)(puVar20 + -8) = 0x1400c4b2d; pwVar11 = (wchar_t *)FUN_14007dea0((longlong)param_3,uVar28); local_1ac8 = CONCAT44(local_1ac8._4_4_,uVar28); if (pwVar11 != (wchar_t *)0x0) { *(undefined8 *)(puVar20 + -8) = 0x1400c4b44; FUN_1400d8960((longlong)(pwVar11 + 0x60)); plVar2 = *(longlong **)(local_1a58 + 0x148); *(undefined8 *)(puVar20 + -8) = 0x1400c4b5a; pwVar16 = pwVar11; FUN_140091140(plVar2,(longlong *)pwVar11,pplVar23,param_4); *(wchar_t **)local_1a50 = pwVar11; *(undefined8 *)(local_1a50 + 4) = local_1ac8; local_1af0 = CONCAT44(local_1af0._4_4_,(int)local_1af0 + 1); param_3 = local_1a50 + 8; local_1a50 = param_3; } plVar25 = (longlong *)((longlong)plVar25 + 1); piVar19 = (int *)(local_1a90 & 0xffffffff); param_1 = local_1a58; plVar14 = (longlong *)(ulonglong)((int)plVar14 + 1); pwVar11 = local_1a50; } while ((longlong)plVar25 < (longlong)local_1ae0); } piVar19 = local_1a40; *(undefined8 *)(puVar20 + -8) = 0x1400c4ba4; FUN_14006b3e0((longlong)piVar19); local_1a38 = 0; *(undefined8 *)(puVar20 + -8) = 0x1400c4bb7; FUN_1400bca00(local_1a18); puVar24 = (undefined1 *)0x80; puVar18 = local_19f0; *(undefined8 *)(puVar20 + -8) = 0x1400c4bd1; FUN_1400bc680((longlong)local_1a18,(longlong)puVar18,0x80,param_4); *(undefined8 *)(puVar20 + -8) = 0x1400c4be0; FUN_140054a10((longlong)local_1a18,CONCAT71((int7)((ulonglong)puVar18 >> 8),0x18), (SIZE_T)puVar24,param_4); uVar6 = (ulonglong)local_1af4; *(undefined8 *)(puVar20 + -8) = 0x1400c4bef; FUN_140014500((longlong)local_1a18,uVar6,(SIZE_T)puVar24,param_4); *(undefined8 *)(puVar20 + -8) = 0x1400c4c02; FUN_1400bc450(local_1a28,(longlong)local_1a18); lVar17 = (longlong)(int)(uint)local_1ae8; *(undefined8 *)(puVar20 + -8) = 0x1400c4c13; FUN_1400bddd0((longlong)local_1a18,lVar17,(SIZE_T)puVar24,param_4); local_cdc = 200; local_ce0 = 0; local_ce8 = local_1968; *(undefined8 *)(puVar20 + -8) = 0x1400c4c44; FUN_14007db50((longlong)local_cd8,(longlong)local_1a18,puVar24); puVar18 = local_cd8; *(undefined8 *)(puVar20 + -8) = 0x1400c4c58; FUN_14007cb60((longlong)local_1968,(longlong)puVar18,puVar24,param_4); *(undefined8 *)(puVar20 + -8) = 0x1400c4c65; FUN_14007ca50((longlong)local_cd8,puVar18,puVar24,param_4); *(undefined8 *)(puVar20 + -8) = 0x1400c4c75; FUN_14007db50((longlong)local_cd8,(longlong)local_1a80,puVar24); puVar18 = local_cd8; *(undefined8 *)(puVar20 + -8) = 0x1400c4c89; FUN_14007cb60((longlong)local_1968,(longlong)puVar18,puVar24,param_4); *(undefined8 *)(puVar20 + -8) = 0x1400c4c96; FUN_14007ca50((longlong)local_cd8,puVar18,puVar24,param_4); local_1af8._1_1_ = DAT_1401b61a0; local_1af8._0_1_ = DAT_1401b61c0; local_1af4 = local_1ab0[0]; lVar17 = (longlong)(int)local_1af0; while ((0 < lVar17 && (lVar26 = 0, plVar27 = local_1a98, 0 < lVar17))) { lVar21 = lVar17 * 0x10 + -0x10; do { lVar13 = *(longlong *)(pwVar22 + lVar26 * 8); local_1af0 = lVar13; local_1ae8 = *(ulonglong *)(pwVar22 + lVar26 * 8 + 4); pcVar3 = *(code **)(*(longlong *)(lVar13 + 0x108) + 0x10); *(undefined8 *)(puVar20 + -8) = 0x1400c4d04; piVar19 = (int *)(*pcVar3)(); local_1ad8 = false; local_1ae0 = (longlong *)piVar19; if (lVar26 == 0) { local_1ad8 = true; *(undefined8 *)(puVar20 + -8) = 0x1400c4dbb; FUN_14006b350(piVar19); 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; param_4 = (uint **)local_1ad0; puVar24 = local_1968; uVar28 = (uint)local_1ae8; puVar18 = (undefined1 *)(local_1ae8 & 0xffffffff); *(undefined8 *)(puVar20 + -8) = 0x1400c4dff; FUN_1400da140((char *)(lVar13 + 0x700),uVar28,(longlong)puVar24,(uint *)param_4); *(undefined8 *)(puVar20 + -8) = 0x1400c4e07; FUN_14006b3e0((longlong)piVar19); local_1ad8 = false; lVar13 = local_1af0 + 0xc0; *(undefined8 *)(puVar20 + -8) = 0x1400c4e1c; FUN_1400d8970(lVar13); pwVar22[0] = L'\0'; pwVar22[1] = L'\0'; pwVar22[2] = L'\0'; pwVar22[3] = L'\0'; *(undefined8 *)pwVar22 = *(undefined8 *)(lVar21 + (longlong)pwVar22); *(undefined8 *)(pwVar22 + 4) = *(undefined8 *)(lVar21 + 8 + (longlong)pwVar22); LAB_1400c4e33: lVar17 = lVar17 + -1; lVar21 = lVar21 + -0x10; } else { *(undefined8 *)(puVar20 + -8) = 0x1400c4d20; local_1ad8 = FUN_14006b3a0(piVar19); if (local_1ad8) { 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; pcVar12 = (char *)(local_1af0 + 0x700); param_4 = (uint **)local_1ad0; puVar24 = local_1968; uVar28 = (uint)local_1ae8; puVar18 = (undefined1 *)(local_1ae8 & 0xffffffff); *(undefined8 *)(puVar20 + -8) = 0x1400c4d76; FUN_1400da140(pcVar12,uVar28,(longlong)puVar24,(uint *)param_4); *(undefined8 *)(puVar20 + -8) = 0x1400c4d7e; FUN_14006b3e0((longlong)piVar19); local_1ad8 = false; lVar13 = local_1af0 + 0xc0; *(undefined8 *)(puVar20 + -8) = 0x1400c4d93; FUN_1400d8970(lVar13); pwVar16 = pwVar22 + lVar26 * 8; pwVar16[0] = L'\0'; pwVar16[1] = L'\0'; pwVar16[2] = L'\0'; pwVar16[3] = L'\0'; *(undefined8 *)(pwVar22 + lVar26 * 8) = *(undefined8 *)(lVar21 + (longlong)pwVar22); *(undefined8 *)(pwVar22 + lVar26 * 8 + 4) = *(undefined8 *)(lVar21 + 8 + (longlong)pwVar22); goto LAB_1400c4e33; } } lVar26 = lVar26 + 1; plVar27 = local_1a98; } while (lVar26 < lVar17); } if ((pwVar22 != (wchar_t *)0x0) && (*(int *)(pwVar22 + -8) == 0xdddd)) { *(undefined8 *)(puVar20 + -8) = 0x1400c4e7f; free(pwVar22 + -8); } *(undefined8 *)(puVar20 + -8) = 0x1400c4e8c; FUN_14007ca50((longlong)local_1968,puVar18,puVar24,param_4); *(undefined8 *)(puVar20 + -8) = 0x1400c4e99; FUN_1400bc470(local_1a28); local_1ae0 = &local_1a10; *(undefined8 *)(puVar20 + -8) = 0x1400c4eb1; FUN_1400d1800(&local_1a10); if (local_1a08 != 0) { if (local_19fc < 0) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar20 + -8) = &UNK_1400c4eca; FUN_14006be00(); } local_1a00 = 0; } local_1ae0 = &local_1a78; *(undefined8 *)(puVar20 + -8) = 0x1400c4ee8; FUN_1400d1800(&local_1a78); puVar18 = puVar20; if (local_1a70 != 0) { if (local_1a64 < 0) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar20 + -8) = &UNK_1400c4f01; FUN_14006be00(); } local_1a68 = 0; } } } } } if (plVar27 == (longlong *)0x0) goto LAB_1400c4f4f; if (local_1aa0 == (longlong *)0x0) goto LAB_1400c4f47; lVar17 = *local_1aa0; plVar14 = local_1aa0; } pcVar3 = *(code **)(lVar17 + 0x18); *(undefined8 *)(puVar18 + -8) = 0x1400c4f45; (*pcVar3)(plVar14,plVar27); LAB_1400c4f4f: *(undefined8 *)(puVar18 + -8) = 0x1400c4f5e; return; }