/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400db8b0 FUN_1400db8b0 * Pseudocode, not original source. */ undefined8 * FUN_1400db8b0(longlong *param_1,undefined4 *param_2,undefined8 param_3,undefined8 param_4) { ulonglong uVar1; undefined4 uVar2; undefined8 uVar3; ulonglong uVar4; undefined2 *puVar5; undefined8 *puVar6; uint *puVar7; undefined2 *puVar8; longlong **pplVar9; ulonglong *puVar10; undefined8 *puVar11; uint uVar12; undefined4 uVar13; SIZE_T SVar14; undefined8 *puVar15; longlong *local_res8; ulonglong local_res10; longlong *local_res18; undefined2 *local_138; undefined8 *local_130; uint local_128; int iStack_124; uint local_120 [2]; longlong local_118; longlong local_110; undefined4 local_108; int local_104; undefined2 *local_f8; undefined8 *local_f0; undefined8 local_e8; undefined4 local_d8 [2]; longlong local_d0; longlong local_c8; undefined4 local_c0; int local_bc; undefined4 local_b0; undefined **local_a8; undefined4 local_a0; undefined2 local_9c; undefined1 local_98; undefined8 local_88; exception local_80 [72]; local_88 = 0xfffffffffffffffe; puVar6 = (undefined8 *)0x0; *param_2 = 0; if ((int)param_1[1] == 0) { puVar6 = (undefined8 *)0x0; } else { FUN_1400bca00(local_120); SVar14 = (SIZE_T)*(uint *)(param_1 + 1); FUN_1400bc680((longlong)local_120,*param_1,SVar14,param_4); FUN_1400bcb60((int *)local_120,(ulonglong)*(uint *)(param_1 + 1),SVar14,param_4); FUN_1400bc600((int *)local_120,0,SVar14,param_4); puVar11 = puVar6; puVar15 = puVar6; while( true ) { local_128 = 0; iStack_124 = 0; local_130 = (undefined8 *)0x0; local_138 = (undefined2 *)0x0; SVar14 = 2; pplVar9 = &local_res8; puVar7 = local_120; uVar3 = FUN_1400bc930(puVar7,pplVar9,2); uVar13 = SUB84(puVar11,0); if ((char)uVar3 == '\0') { *(undefined4 *)(param_1 + 4) = uVar13; FUN_1400d1800((longlong *)&local_138); if (local_130 != (undefined8 *)0x0) { if (iStack_124 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_128 = 0; } local_res8 = &local_118; FUN_1400d1800(&local_118); if (local_110 == 0) { return puVar15; } if (-1 < local_104) { return puVar15; } /* WARNING: Subroutine does not return */ FUN_14006be00(); } if ((short)local_res8 != 0x5713) break; puVar10 = &local_res10; puVar7 = local_120; uVar4 = FUN_1400bcfd0(puVar7,puVar10,SVar14,param_4); uVar1 = local_res10; if ((char)uVar4 == '\0') { *(undefined4 *)(param_1 + 4) = uVar13; FUN_1400d1800((longlong *)&local_138); if (local_130 != (undefined8 *)0x0) { if (iStack_124 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_128 = 0; } local_res8 = &local_118; FUN_1400d1800(&local_118); if (local_110 == 0) { return puVar15; } if (-1 < local_104) { return puVar15; } /* WARNING: Subroutine does not return */ FUN_14006be00(); } uVar12 = (uint)local_res10; if ((int)uVar12 < 0) { if (local_118 == 0) { if (local_110 == 0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(puVar7,puVar10,SVar14,param_4); } } else { local_108 = *(undefined4 *)(local_118 + 0x18); } *(undefined4 *)(param_1 + 4) = local_108; *param_2 = 0x1f; FUN_1400d1800((longlong *)&local_138); if (local_130 != (undefined8 *)0x0) { if (iStack_124 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_128 = 0; } local_res8 = &local_118; FUN_1400d1800(&local_118); if ((local_110 != 0) && (local_104 < 0)) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } goto LAB_1400dbe0b; } if (*(int *)((longlong)param_1 + 0x1c) < (int)uVar12) { if (local_118 == 0) { if (local_110 == 0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(puVar7,puVar10,SVar14,param_4); } } else { local_108 = *(undefined4 *)(local_118 + 0x18); } *(undefined4 *)(param_1 + 4) = local_108; *param_2 = 0x20; FUN_1400d1800((longlong *)&local_138); if (local_130 != (undefined8 *)0x0) { if (iStack_124 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_128 = 0; } local_res8 = &local_118; FUN_1400d1800(&local_118); if ((local_110 != 0) && (local_104 < 0)) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } goto LAB_1400dbe0b; } uVar4 = local_res10 & 0xffffffff; uVar2 = FUN_1400bc990(local_120,uVar12,SVar14,param_4); if ((char)uVar2 == '\0') { *(undefined4 *)(param_1 + 4) = uVar13; FUN_1400d1800((longlong *)&local_138); if (local_130 != (undefined8 *)0x0) { if (iStack_124 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_128 = 0; } local_res8 = &local_118; FUN_1400d1800(&local_118); if (local_110 == 0) { return puVar15; } if (-1 < local_104) { return puVar15; } /* WARNING: Subroutine does not return */ FUN_14006be00(); } if (local_130 != (undefined8 *)0x0) { FUN_14006ba50(local_80,(wchar_t *)PTR_u_Cannot_use_internal_buffer_becau_1401adba0,SVar14, param_4); /* WARNING: Subroutine does not return */ _CxxThrowException(local_80,(ThrowInfo *)&DAT_1401a93e8); } if (local_138 == (undefined2 *)0x0) { puVar5 = FUN_1400d1840(0,uVar4,SVar14); *(undefined8 *)(puVar5 + 0x14) = 1; if (local_130 == (undefined8 *)0x0) { uVar4 = 0; local_138 = puVar5; goto LAB_1400db9fc; } puVar8 = local_138; local_138 = puVar5; if (iStack_124 < (int)uVar12) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } } else { LAB_1400db9fc: puVar8 = local_138; if ((int)uVar12 < 1) { if (local_138 == (undefined2 *)0x0) goto LAB_1400dbbba; uVar12 = 0; } else if (local_138 == (undefined2 *)0x0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(0,uVar4,SVar14,param_4); } FUN_1400146f0((longlong)local_138,uVar12,SVar14); uVar12 = local_128; } local_128 = uVar12; puVar11 = local_130; if (local_130 == (undefined8 *)0x0) { uVar4 = 0; if (local_138 == (undefined2 *)0x0) { LAB_1400dbbba: /* WARNING: Subroutine does not return */ FUN_1400d1900(puVar8,uVar4,SVar14,param_4); } puVar11 = puVar6; if (*(int *)(local_138 + 0xc) != 0) { puVar11 = *(undefined8 **)(local_138 + 8); } } uVar3 = FUN_1400bc930(local_120,puVar11,uVar1 & 0xffffffff); if ((char)uVar3 == '\0') { *(undefined4 *)(param_1 + 4) = uVar13; FUN_1400d1800((longlong *)&local_138); if (local_130 != (undefined8 *)0x0) { if (iStack_124 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_128 = 0; } local_res8 = &local_118; FUN_1400d1800(&local_118); if (local_110 == 0) { return puVar15; } if (-1 < local_104) { return puVar15; } /* WARNING: Subroutine does not return */ FUN_14006be00(); } FUN_1400bca00(local_d8); local_a8 = Proud::AddrPort::vftable; local_98 = 0; local_a0 = DAT_1401ac3d0; local_9c = DAT_1401ac3d4; local_b0 = (undefined4)param_1[3]; local_e8 = 0; local_f0 = (undefined8 *)0x0; if (local_138 == (undefined2 *)0x0) { local_f8 = (undefined2 *)0x0; local_f0 = local_130; local_e8 = CONCAT44(iStack_124,local_128); } else { *(longlong *)(local_138 + 0x14) = *(longlong *)(local_138 + 0x14) + 1; local_f8 = local_138; } FUN_1400bcad0(local_d8,(longlong *)&local_f8); param_4 = 1; FUN_1400db760(param_1[2],*(int *)(param_1[2] + 0x18),(longlong)local_d8,1); puVar15 = (undefined8 *)(ulonglong)((int)puVar15 + 1); puVar11 = (undefined8 *) (ulonglong)(uint)((int)(((int)local_120[0] >> 0x1f & 7U) + local_120[0]) >> 3); local_res18 = &local_d0; FUN_1400d1800(&local_d0); if (local_c8 != 0) { if (local_bc < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_c0 = 0; } FUN_1400d1800((longlong *)&local_138); if ((local_130 != (undefined8 *)0x0) && (iStack_124 < 0)) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } } if (local_118 == 0) { if (local_110 == 0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(puVar7,pplVar9,SVar14,param_4); } } else { local_108 = *(undefined4 *)(local_118 + 0x18); } *(undefined4 *)(param_1 + 4) = local_108; *param_2 = 0x1f; FUN_1400d1800((longlong *)&local_138); if (local_130 != (undefined8 *)0x0) { if (iStack_124 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_128 = 0; } local_res8 = &local_118; FUN_1400d1800(&local_118); if ((local_110 != 0) && (local_104 < 0)) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } LAB_1400dbe0b: puVar6 = (undefined8 *)0xffffffff; } return puVar6; }