/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400e33a0 FUN_1400e33a0 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_1400e33a0(longlong *param_1,uint *param_2,undefined8 param_3,undefined8 param_4) { longlong *plVar1; uint uVar2; longlong *plVar3; undefined8 uVar4; int *piVar5; ulonglong uVar6; int *piVar7; longlong lVar8; uint *puVar9; longlong *plVar10; uint uVar11; undefined8 *puVar12; longlong **pplVar13; undefined ***pppuVar14; undefined8 uVar15; int iVar16; longlong **pplVar17; SIZE_T SVar18; uint *puVar19; SIZE_T *pSVar20; longlong lVar21; undefined1 auStack_ec8 [32]; undefined1 local_ea8 [8]; longlong *local_ea0; int local_e98 [2]; longlong local_e90; longlong local_e88; undefined4 local_e80; int local_e7c; longlong *local_e70; longlong *local_e68; longlong *local_e60; undefined **local_e58; undefined8 local_e50; longlong **local_e48; undefined8 local_e40; undefined8 local_e38; undefined **local_e30; undefined8 local_e28; longlong **local_e20; undefined8 local_e18; undefined8 local_e10; undefined **local_e08; undefined8 local_e00; longlong **local_df8; undefined8 local_df0; undefined8 local_de8; longlong *local_dd0; undefined **local_dc8; undefined8 local_dc0; longlong **local_db8; ulonglong local_db0; undefined8 local_da8; undefined **local_da0; undefined8 local_d98; longlong **local_d90; ulonglong local_d88; undefined8 local_d80; int *local_d78; undefined1 local_d70; int *local_d68; undefined1 local_d60; SIZE_T local_d58; undefined1 local_d50; uint local_d48; int iStack_d44; undefined8 local_d40; undefined8 local_d38; undefined8 local_d30; undefined8 local_d28; undefined8 local_d20; int *local_d18; undefined1 local_d10; int *local_d08; undefined1 local_d00; undefined8 local_ce0; undefined1 local_cb8 [3216]; ulonglong local_28; local_ce0 = 0xfffffffffffffffe; local_28 = DAT_1401ac5a0 ^ (ulonglong)auStack_ec8; local_ea0 = param_1; (**(code **)(*(longlong *)(param_1[0x21] + 0x78) + 0x10))(); SVar18 = 1; puVar12 = (undefined8 *)local_ea8; puVar19 = param_2; uVar4 = FUN_1400bc930(param_2,puVar12,1); if ((char)uVar4 == '\0') { FUN_14006cb70(puVar19,puVar12,SVar18,param_4); local_e70 = (longlong *)PTR_DAT_1401ac010; pplVar13 = &local_e70; uVar4 = 8; uVar15 = 3; plVar10 = (longlong *)param_1[0x21]; FUN_1400b9fd0(plVar10,8,(undefined *)0x3,pplVar13); plVar3 = local_e70; if (((local_e70 != (longlong *)0x0) && (local_e70 != (longlong *)PTR_DAT_1401ac010)) && (plVar1 = local_e70 + -1, plVar1 != (longlong *)0x0)) { piVar5 = (int *)FUN_14006cb70(plVar10,uVar4,uVar15,pplVar13); local_d68 = piVar5; FUN_14006b350(piVar5); local_d60 = 1; piVar7 = (int *)((longlong)plVar3 + -4); *piVar7 = *piVar7 + -1; if (*piVar7 == 0) { FUN_14006cc60(plVar1); } FUN_14006b3e0((longlong)piVar5); local_d60 = 0; } local_e70 = (longlong *)PTR_DAT_1401ac010; LAB_1400e349e: if ((int)param_1[0x20] < 4) { *(undefined4 *)(param_1 + 8) = 0; *(undefined4 *)(param_1 + 0x20) = 4; lVar21 = (**(code **)(*(longlong *)(param_1[0x21] + 0x70) + 0x1c0))(); param_1[0x10] = lVar21; *(undefined1 *)(param_1 + 0x18) = 0; } return; } FUN_1400defb0(&local_d48); puVar19 = &local_d48; puVar9 = param_2; uVar4 = FUN_1400bd440(param_2,puVar19,SVar18,param_4); if ((char)uVar4 == '\0') { FUN_14006cb70(puVar9,puVar19,SVar18,param_4); local_e60 = (longlong *)PTR_DAT_1401ac010; pplVar13 = &local_e60; uVar4 = 8; uVar15 = 3; plVar10 = (longlong *)param_1[0x21]; FUN_1400b9fd0(plVar10,8,(undefined *)0x3,pplVar13); plVar3 = local_e60; if (((local_e60 != (longlong *)0x0) && (local_e60 != (longlong *)PTR_DAT_1401ac010)) && (plVar1 = local_e60 + -1, plVar1 != (longlong *)0x0)) { piVar5 = (int *)FUN_14006cb70(plVar10,uVar4,uVar15,pplVar13); local_d78 = piVar5; FUN_14006b350(piVar5); local_d70 = 1; piVar7 = (int *)((longlong)plVar3 + -4); *piVar7 = *piVar7 + -1; if (*piVar7 == 0) { FUN_14006cc60(plVar1); } FUN_14006b3e0((longlong)piVar5); local_d70 = 0; } local_e60 = (longlong *)PTR_DAT_1401ac010; goto LAB_1400e349e; } lVar21 = param_1[0x21]; *(ulonglong *)(lVar21 + 0x6a0) = CONCAT44(iStack_d44,local_d48); *(undefined8 *)(lVar21 + 0x6a8) = local_d40; *(undefined8 *)(lVar21 + 0x6b0) = local_d38; *(undefined8 *)(lVar21 + 0x6b8) = local_d30; *(undefined8 *)(lVar21 + 0x6c0) = local_d28; *(undefined8 *)(lVar21 + 0x6c8) = local_d20; if (*(char *)(param_1[0x21] + 0x6cc) != '\0') { uVar4 = (**(code **)(*(longlong *)(param_1[0x21] + 0x70) + 0x1c0))(); *(undefined8 *)(param_1[0x21] + 0x638) = uVar4; } pplVar17 = (longlong **)0x0; local_e00 = 0; local_df8 = (longlong **)0x0; local_df0 = 0; local_de8 = 0; local_e08 = Proud::ByteArray::vftable; pplVar13 = &local_dd0; puVar19 = param_2; uVar6 = FUN_1400bcfd0(param_2,pplVar13,SVar18,param_4); plVar10 = local_dd0; if ((((char)uVar6 != '\0') && (iVar16 = (int)local_dd0, -1 < iVar16)) && (iVar16 <= DAT_1401ac140) ) { FUN_1400146f0((longlong)&local_e08,iVar16,SVar18); pplVar13 = local_df8; if ((int)local_df0 == 0) { pplVar13 = pplVar17; } SVar18 = (ulonglong)plVar10 & 0xffffffff; puVar19 = param_2; uVar4 = FUN_1400bc930(param_2,pplVar13,SVar18); if ((char)uVar4 != '\0') { local_e50 = 0; local_e48 = (longlong **)0x0; local_e40 = 0; local_e38 = 0; local_e58 = Proud::ByteArray::vftable; local_e28 = 0; local_e20 = (longlong **)0x0; local_e18 = 0; local_e10 = 0; local_e30 = Proud::ByteArray::vftable; FUN_1400dd5d0((longlong)&local_e58,*(int *)(param_1[0x21] + 0x6bc),SVar18,param_4); pplVar13 = local_e48; if ((int)local_e40 == 0) { pplVar13 = pplVar17; } SVar18 = (SIZE_T)(*(uint *)(param_1[0x21] + 0x6bc) >> 3); uVar4 = 0x10; FUN_1400cd030((void *)(param_1[0x21] + 0xd8),(byte *)pplVar13,SVar18,0x10); FUN_1400dd5d0((longlong)&local_e30,*(int *)(param_1[0x21] + 0x6c0),SVar18,uVar4); pplVar13 = local_e20; if ((int)local_e18 == 0) { pplVar13 = pplVar17; } SVar18 = (SIZE_T)(*(uint *)(param_1[0x21] + 0x6c0) >> 3); FUN_1400dccc0(param_1[0x21] + 0x4a8,(longlong)pplVar13,SVar18,uVar4); piVar7 = (int *)FUN_14006cd40(); FUN_14006b350(piVar7); if (iStack_d44 < DAT_1401ac140) { iStack_d44 = DAT_1401ac140; } DAT_1401ac140 = iStack_d44; FUN_14006b3e0((longlong)piVar7); uVar11 = (int)*param_2 >> 0x1f & 7; if (*(longlong *)(param_2 + 2) == 0) { if (*(longlong *)(param_2 + 4) == 0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(0,(ulonglong)uVar11,SVar18,uVar4); } uVar2 = param_2[6]; } else { uVar2 = *(uint *)(*(longlong *)(param_2 + 2) + 0x18); } if ((int)(*param_2 + uVar11) >> 3 != uVar2) { FUN_14006cb70((ulonglong)uVar2,(ulonglong)uVar11,SVar18,uVar4); local_ea0 = (longlong *)PTR_DAT_1401ac010; pplVar13 = &local_ea0; uVar4 = 8; uVar15 = 3; plVar10 = (longlong *)param_1[0x21]; FUN_1400b9fd0(plVar10,8,(undefined *)0x3,pplVar13); plVar3 = local_ea0; if (((local_ea0 != (longlong *)0x0) && (local_ea0 != (longlong *)PTR_DAT_1401ac010)) && (plVar1 = local_ea0 + -1, plVar1 != (longlong *)0x0)) { piVar5 = (int *)FUN_14006cb70(plVar10,uVar4,uVar15,pplVar13); local_d08 = piVar5; FUN_14006b350(piVar5); local_d00 = 1; piVar7 = (int *)((longlong)plVar3 + -4); *piVar7 = *piVar7 + -1; if (*piVar7 == 0) { FUN_14006cc60(plVar1); } FUN_14006b3e0((longlong)piVar5); } FUN_1400dfd60((longlong)param_1,4); FUN_140078360(&local_e30); FUN_140078360(&local_e58); goto LAB_1400e3d37; } *(undefined1 *)(param_1[0x21] + 0x1790) = local_ea8[0]; lVar21 = param_1[0x21]; lVar8 = FUN_1400a0f10(lVar21); FUN_1400ef560(lVar8,*(char *)(lVar21 + 0x6b8)); local_dc0 = 0; local_db8 = (longlong **)0x0; local_db0 = 0; local_da8 = 0; local_dc8 = Proud::ByteArray::vftable; local_d98 = 0; local_d90 = (longlong **)0x0; local_d88 = 0; local_d80 = 0; local_da0 = Proud::ByteArray::vftable; FUN_1400dd5d0((longlong)&local_e58,*(int *)(param_1[0x21] + 0x6bc),SVar18,uVar4); pplVar13 = local_e48; if ((int)local_e40 == 0) { pplVar13 = pplVar17; } uVar4 = 0x10; FUN_1400cd030((void *)(param_1[0x21] + 0x708),(byte *)pplVar13, (ulonglong)(*(uint *)(param_1[0x21] + 0x6bc) >> 3),0x10); pppuVar14 = &local_e08; FUN_1400dd790((longlong)&local_dc8,(longlong)&local_e58,(longlong)pppuVar14); FUN_1400dd5d0((longlong)&local_e30,*(int *)(param_1[0x21] + 0x6c0),(SIZE_T)pppuVar14,uVar4); pplVar13 = local_e20; if ((int)local_e18 == 0) { pplVar13 = pplVar17; } FUN_1400dccc0(param_1[0x21] + 0xad8,(longlong)pplVar13, (ulonglong)(*(uint *)(param_1[0x21] + 0x6c0) >> 3),uVar4); puVar19 = (uint *)(param_1[0x21] + 0x708); pppuVar14 = &local_da0; FUN_1400cf0f0((longlong)&local_e30,(longlong)pppuVar14,puVar19,uVar4); FUN_1400bca00(local_e98); FUN_1400bc4d0((longlong)local_e98,pppuVar14,(SIZE_T)puVar19,uVar4); FUN_1400bcb60(local_e98,0x800,(SIZE_T)puVar19,uVar4); uVar15 = 0; FUN_1400bcb60(local_e98,0,(SIZE_T)puVar19,uVar4); FUN_140054a10((longlong)local_e98,CONCAT71((int7)((ulonglong)uVar15 >> 8),5),(SIZE_T)puVar19, uVar4); uVar6 = local_db0; iVar16 = (int)local_db0; FUN_1400bddd0((longlong)local_e98,(longlong)(int)local_db0,(SIZE_T)puVar19,uVar4); pplVar13 = local_db8; if ((int)local_db0 == 0) { pplVar13 = pplVar17; } if (iVar16 != 0) { local_e98[1] = 0; if (local_e90 == 0) { if (local_e88 == 0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(0,pplVar13,puVar19,uVar4); } LAB_1400e3aa2: puVar19 = (uint *)(uVar6 & 0xffffffff); FUN_1400145e0(&local_e88,pplVar13,puVar19,uVar4); } else { if (local_e88 != 0) goto LAB_1400e3aa2; if (local_e90 == 0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(0,pplVar13,puVar19,uVar4); } puVar19 = (uint *)(uVar6 & 0xffffffff); FUN_1400147b0(local_e90,pplVar13,(SIZE_T)puVar19); } FUN_140014820((longlong)local_e98,pplVar13,(SIZE_T)puVar19,uVar4); } uVar6 = local_d88; iVar16 = (int)local_d88; FUN_1400bddd0((longlong)local_e98,(longlong)(int)local_d88,(SIZE_T)puVar19,uVar4); pplVar13 = local_d90; if ((int)local_d88 == 0) { pplVar13 = pplVar17; } if (iVar16 != 0) { local_e98[1] = 0; if (local_e90 == 0) { if (local_e88 == 0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(0,pplVar13,puVar19,uVar4); } LAB_1400e3b20: puVar19 = (uint *)(uVar6 & 0xffffffff); FUN_1400145e0(&local_e88,pplVar13,puVar19,uVar4); } else { if (local_e88 != 0) goto LAB_1400e3b20; if (local_e90 == 0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(0,pplVar13,puVar19,uVar4); } puVar19 = (uint *)(uVar6 & 0xffffffff); FUN_1400147b0(local_e90,pplVar13,(SIZE_T)puVar19); } FUN_140014820((longlong)local_e98,pplVar13,(SIZE_T)puVar19,uVar4); } lVar21 = FUN_14007db50((longlong)local_cb8,(longlong)local_e98,puVar19); local_d58 = 0; local_d50 = 1; lVar8 = FUN_1400a0f10(param_1[0x21]); pSVar20 = &local_d58; FUN_1400ef790(lVar8,lVar21,pSVar20,uVar4); FUN_14007ca50((longlong)local_cb8,lVar21,pSVar20,uVar4); local_dd0 = &local_e90; FUN_1400d1800(&local_e90); if (local_e88 != 0) { if (local_e7c < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_e80 = 0; } FUN_140078360(&local_da0); FUN_140078360(&local_dc8); FUN_140078360(&local_e30); FUN_140078360(&local_e58); goto LAB_1400e3d37; } } FUN_14006cb70(puVar19,pplVar13,SVar18,param_4); local_e68 = (longlong *)PTR_DAT_1401ac010; pplVar13 = &local_e68; uVar4 = 8; uVar15 = 3; plVar10 = (longlong *)param_1[0x21]; FUN_1400b9fd0(plVar10,8,(undefined *)0x3,pplVar13); plVar3 = local_e68; if (((local_e68 != (longlong *)0x0) && (local_e68 != (longlong *)PTR_DAT_1401ac010)) && (plVar1 = local_e68 + -1, plVar1 != (longlong *)0x0)) { piVar5 = (int *)FUN_14006cb70(plVar10,uVar4,uVar15,pplVar13); local_d18 = piVar5; FUN_14006b350(piVar5); local_d10 = 1; piVar7 = (int *)((longlong)plVar3 + -4); *piVar7 = *piVar7 + -1; if (*piVar7 == 0) { FUN_14006cc60(plVar1); } FUN_14006b3e0((longlong)piVar5); local_d10 = 0; } local_e68 = (longlong *)PTR_DAT_1401ac010; if ((int)param_1[0x20] < 4) { *(undefined4 *)(param_1 + 8) = 0; *(undefined4 *)(param_1 + 0x20) = 4; lVar21 = (**(code **)(*(longlong *)(param_1[0x21] + 0x70) + 0x1c0))(); param_1[0x10] = lVar21; *(undefined1 *)(param_1 + 0x18) = 0; } LAB_1400e3d37: FUN_140078360(&local_e08); return; }