/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400bd710 FUN_1400bd710 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ ulonglong FUN_1400bd710(uint *param_1,LPCWSTR param_2,undefined8 param_3,undefined8 param_4) { LPCWSTR pWVar1; uint uVar2; LPCWSTR pWVar3; ulonglong uVar4; uint *puVar5; int *piVar6; uint uVar7; LPCWSTR *ppWVar8; char *pcVar9; uint uVar10; LPCWSTR pWVar11; char *pcVar12; int iVar13; int iVar14; undefined8 uVar15; undefined1 auStack_118 [32]; char local_f8 [8]; LPCWSTR local_f0; undefined8 *local_e8; LPCWSTR *local_e0; LPCWSTR local_d8; undefined8 local_d0; char *local_c8; char local_c0 [136]; ulonglong local_38; local_d0 = 0xfffffffffffffffe; local_38 = DAT_1401ac5a0 ^ (ulonglong)auStack_118; uVar10 = (int)*param_1 >> 0x1f & 7; uVar2 = *param_1 + uVar10; uVar7 = uVar2 & 0xfffffff8; *param_1 = uVar7; if (0 < (int)((uVar2 & 7) - uVar10)) { *param_1 = uVar7 + 8; } uVar15 = 1; pcVar9 = local_f8; pWVar3 = (LPCWSTR)FUN_1400bc6c0((int *)param_1,(undefined8 *)pcVar9,1,param_4); if ((char)pWVar3 == '\0') goto LAB_1400bda3a; FUN_1400bc8a0((int *)param_1,pcVar9,uVar15,param_4); ppWVar8 = &local_f0; puVar5 = param_1; pWVar3 = (LPCWSTR)FUN_1400bcfd0(param_1,ppWVar8,uVar15,param_4); pWVar11 = local_f0; if ((char)pWVar3 == '\0') goto LAB_1400bda3a; iVar13 = (int)local_f0; if ((iVar13 < 0) || (0x100000 < iVar13)) { FUN_14006ba50((exception *)&local_c8,L"CMessage.ReadString failed! length=%d", (ulonglong)local_f0 & 0xffffffff,param_4); /* WARNING: Subroutine does not return */ _CxxThrowException(&local_c8,(ThrowInfo *)&DAT_1401a93e8); } if (local_f8[0] == '\x01') { local_f0 = param_2; local_e8 = (undefined8 *)FUN_140053f20((longlong *)param_2,iVar13 + 1); *(undefined1 *)local_e8 = 0; *(undefined1 *)((longlong)iVar13 + (longlong)local_e8) = 0; uVar4 = FUN_1400bc930(param_1,local_e8,(ulonglong)pWVar11 & 0xffffffff); FUN_140054010((longlong *)param_2); return uVar4 & 0xff; } FUN_14006cb70(puVar5,ppWVar8,uVar15,param_4); local_f0 = (LPCWSTR)PTR_DAT_1401ac010; uVar2 = iVar13 + 1; local_e0 = &local_f0; if ((int)uVar2 < 1) { uVar2 = 0; } uVar7 = 1; if (1 < (int)uVar2) { uVar7 = uVar2; } if (0 < (int)uVar7) { local_f0 = (LPCWSTR)PTR_DAT_1401ac010; if ((int)uVar7 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } if (uVar7 == 0) { FUN_1400031e0((longlong *)&local_f0,ppWVar8,uVar15,param_4); } else { puVar5 = (uint *)FUN_14006cbf0((longlong)(int)uVar7 * 2 + 10); if (puVar5 != (uint *)0x0) { *puVar5 = 0; puVar5[1] = 1; } *puVar5 = uVar7; iVar14 = 0; if ((local_f0 != (LPCWSTR)0x0) && (iVar14 = 0, local_f0 != (LPCWSTR)PTR_DAT_1401ac010)) { iVar14 = *(int *)(local_f0 + -4); } pWVar3 = (LPCWSTR)PTR_DAT_1401ac010; if ((int)uVar7 < iVar14) { LAB_1400bd8ad: if (local_f0 != (LPCWSTR)0x0) { pWVar3 = local_f0; } } else { uVar7 = 0; if (local_f0 != (LPCWSTR)0x0) { if (local_f0 != (LPCWSTR)PTR_DAT_1401ac010) { uVar7 = *(uint *)(local_f0 + -4); } goto LAB_1400bd8ad; } } uVar4 = (ulonglong)uVar7; FUN_14006ca20(puVar5 + 2,pWVar3,uVar7); FUN_1400031e0((longlong *)&local_f0,pWVar3,uVar4,param_4); local_f0 = (LPCWSTR)(puVar5 + 2); } } FUN_140002e40((longlong *)&local_f0); pWVar11 = local_f0; if (local_f0 == (LPCWSTR)0x0) { pWVar11 = (LPCWSTR)PTR_DAT_1401ac010; } *pWVar11 = L'\0'; pWVar11[iVar13] = L'\0'; uVar4 = (ulonglong)(uint)(iVar13 * 2); local_d8 = pWVar11; uVar15 = FUN_1400bc930(param_1,(undefined8 *)pWVar11,uVar4); if ((char)uVar15 != '\0') { FUN_140003010((longlong *)&local_f0); pWVar3 = local_f0; if (local_f0 == (LPCWSTR)0x0) { pWVar3 = (LPCWSTR)PTR_DAT_1401ac010; } local_c8 = local_c0; uVar15 = 3; FUN_14006b570((longlong *)&local_c8,pWVar3,3); pcVar12 = local_c8; FUN_14006b850((longlong *)param_2,local_c8); pcVar9 = local_c8; if (local_c8 != local_c0) { free(local_c8); } pWVar3 = local_f0; if (((local_f0 != (LPCWSTR)0x0) && (local_f0 != (LPCWSTR)PTR_DAT_1401ac010)) && (pWVar11 = local_f0 + -4, pWVar11 != (LPCWSTR)0x0)) { piVar6 = (int *)FUN_14006cb70(pcVar9,pcVar12,uVar15,param_4); local_e0 = (LPCWSTR *)piVar6; FUN_14006b350(piVar6); local_d8 = (LPCWSTR)CONCAT71(local_d8._1_7_,1); pWVar3 = pWVar3 + -2; *(int *)pWVar3 = *(int *)pWVar3 + -1; if (*(int *)pWVar3 == 0) { FUN_14006cc60(pWVar11); } local_f0 = (LPCWSTR)FUN_14006b3e0((longlong)piVar6); } return CONCAT71((int7)((ulonglong)local_f0 >> 8),1); } ppWVar8 = &local_f0; FUN_140003010((longlong *)ppWVar8); pWVar3 = local_f0; if (((local_f0 != (LPCWSTR)0x0) && (local_f0 != (LPCWSTR)PTR_DAT_1401ac010)) && (pWVar1 = local_f0 + -4, pWVar1 != (LPCWSTR)0x0)) { piVar6 = (int *)FUN_14006cb70(ppWVar8,pWVar11,uVar4,param_4); local_e0 = (LPCWSTR *)piVar6; FUN_14006b350(piVar6); local_d8 = (LPCWSTR)CONCAT71(local_d8._1_7_,1); pWVar3 = pWVar3 + -2; *(int *)pWVar3 = *(int *)pWVar3 + -1; if (*(int *)pWVar3 == 0) { FUN_14006cc60(pWVar1); } pWVar3 = (LPCWSTR)FUN_14006b3e0((longlong)piVar6); } LAB_1400bda3a: return (ulonglong)pWVar3 & 0xffffffffffffff00; }