/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400bda70 FUN_1400bda70 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ ulonglong FUN_1400bda70(uint *param_1,longlong *param_2,undefined8 param_3,undefined8 param_4) { longlong *plVar1; uint uVar2; int iVar3; longlong *plVar4; ulonglong uVar5; int *piVar6; int *piVar7; uint uVar8; uint *puVar9; longlong **pplVar10; short *psVar11; uint uVar12; char *pcVar13; longlong *plVar14; short *psVar15; int iVar16; int iVar17; undefined8 uVar18; undefined1 auStack_1e8 [32]; char local_1c8 [8]; longlong *local_1c0; undefined8 *local_1b8; longlong **local_1b0; longlong *local_1a8; undefined8 local_1a0; exception local_198 [80]; short *local_148; short local_140 [132]; ulonglong local_38; local_1a0 = 0xfffffffffffffffe; local_38 = DAT_1401ac5a0 ^ (ulonglong)auStack_1e8; uVar12 = (int)*param_1 >> 0x1f & 7; uVar2 = *param_1 + uVar12; uVar8 = uVar2 & 0xfffffff8; *param_1 = uVar8; if (0 < (int)((uVar2 & 7) - uVar12)) { *param_1 = uVar8 + 8; } uVar18 = 1; pcVar13 = local_1c8; plVar4 = (longlong *)FUN_1400bc6c0((int *)param_1,(undefined8 *)pcVar13,1,param_4); if ((char)plVar4 == '\0') goto LAB_1400bdd9f; FUN_1400bc8a0((int *)param_1,pcVar13,uVar18,param_4); pplVar10 = &local_1c0; puVar9 = param_1; plVar4 = (longlong *)FUN_1400bcfd0(param_1,pplVar10,uVar18,param_4); plVar1 = local_1c0; if ((char)plVar4 == '\0') goto LAB_1400bdd9f; iVar16 = (int)local_1c0; if ((iVar16 < 0) || (0x100000 < iVar16)) { FUN_14006ba50(local_198,L"CMessage.ReadString failed! length=%d", (ulonglong)local_1c0 & 0xffffffff,param_4); /* WARNING: Subroutine does not return */ _CxxThrowException(local_198,(ThrowInfo *)&DAT_1401a93e8); } if (local_1c8[0] == '\x02') { local_1c0 = param_2; local_1b8 = (undefined8 *)FUN_140002f30(param_2,iVar16 + 1); *(undefined2 *)local_1b8 = 0; *(undefined2 *)((longlong)local_1b8 + (longlong)iVar16 * 2) = 0; uVar5 = FUN_1400bc930(param_1,local_1b8,(ulonglong)(uint)(iVar16 * 2)); FUN_140003010(param_2); return uVar5 & 0xff; } FUN_14006cb70(puVar9,pplVar10,uVar18,param_4); local_1c0 = (longlong *)PTR_DAT_1401ac008; iVar3 = iVar16 + 1; local_1b0 = &local_1c0; if (iVar3 < 1) { iVar3 = 0; } iVar17 = 1; if (1 < iVar3) { iVar17 = iVar3; } if (0 < iVar17) { local_1c0 = (longlong *)PTR_DAT_1401ac008; if (iVar17 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } if (iVar17 == 0) { FUN_140008440((longlong *)&local_1c0); } else { piVar6 = (int *)FUN_14006cbf0((longlong)iVar17 + 9); if (piVar6 != (int *)0x0) { *piVar6 = 0; piVar6[1] = 1; } *piVar6 = iVar17; iVar3 = 0; if ((local_1c0 != (longlong *)0x0) && (iVar3 = 0, local_1c0 != (longlong *)PTR_DAT_1401ac008)) { iVar3 = (int)local_1c0[-1]; } plVar4 = (longlong *)PTR_DAT_1401ac008; if (iVar17 < iVar3) { LAB_1400bdc10: if (local_1c0 != (longlong *)0x0) { plVar4 = local_1c0; } } else { iVar17 = 0; if (local_1c0 != (longlong *)0x0) { if (local_1c0 != (longlong *)PTR_DAT_1401ac008) { iVar17 = (int)local_1c0[-1]; } goto LAB_1400bdc10; } } FUN_14006cac0(piVar6 + 2,plVar4,iVar17); FUN_140008440((longlong *)&local_1c0); local_1c0 = (longlong *)(piVar6 + 2); } } FUN_140053e30((longlong *)&local_1c0); plVar14 = local_1c0; if (local_1c0 == (longlong *)0x0) { plVar14 = (longlong *)PTR_DAT_1401ac008; } *(undefined1 *)plVar14 = 0; *(undefined1 *)((longlong)iVar16 + (longlong)plVar14) = 0; uVar5 = (ulonglong)plVar1 & 0xffffffff; local_1a8 = plVar14; uVar18 = FUN_1400bc930(param_1,plVar14,uVar5); if ((char)uVar18 != '\0') { FUN_140054010((longlong *)&local_1c0); plVar4 = local_1c0; if (local_1c0 == (longlong *)0x0) { plVar4 = (longlong *)PTR_DAT_1401ac008; } local_148 = local_140; uVar18 = 3; FUN_1400626b0((longlong *)&local_148,(LPCSTR)plVar4,3); psVar15 = local_148; FUN_140008030(param_2,local_148,uVar18,param_4); psVar11 = local_148; if (local_148 != local_140) { free(local_148); } plVar4 = local_1c0; if (((local_1c0 != (longlong *)0x0) && (local_1c0 != (longlong *)PTR_DAT_1401ac008)) && (plVar1 = local_1c0 + -1, plVar1 != (longlong *)0x0)) { piVar7 = (int *)FUN_14006cb70(psVar11,psVar15,uVar18,param_4); local_1b0 = (longlong **)piVar7; FUN_14006b350(piVar7); local_1a8 = (longlong *)CONCAT71(local_1a8._1_7_,1); piVar6 = (int *)((longlong)plVar4 + -4); *piVar6 = *piVar6 + -1; if (*piVar6 == 0) { FUN_14006cc60(plVar1); } local_1c0 = (longlong *)FUN_14006b3e0((longlong)piVar7); } return CONCAT71((int7)((ulonglong)local_1c0 >> 8),1); } pplVar10 = &local_1c0; FUN_140054010((longlong *)pplVar10); plVar4 = local_1c0; if (((local_1c0 != (longlong *)0x0) && (local_1c0 != (longlong *)PTR_DAT_1401ac008)) && (plVar1 = local_1c0 + -1, plVar1 != (longlong *)0x0)) { piVar7 = (int *)FUN_14006cb70(pplVar10,plVar14,uVar5,param_4); local_1b0 = (longlong **)piVar7; FUN_14006b350(piVar7); local_1a8 = (longlong *)CONCAT71(local_1a8._1_7_,1); piVar6 = (int *)((longlong)plVar4 + -4); *piVar6 = *piVar6 + -1; if (*piVar6 == 0) { FUN_14006cc60(plVar1); } plVar4 = (longlong *)FUN_14006b3e0((longlong)piVar7); } LAB_1400bdd9f: return (ulonglong)plVar4 & 0xffffffffffffff00; }