293 lines
9.6 KiB
C
293 lines
9.6 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x1400f50a0 FUN_1400f50a0
|
|
* Pseudocode, not original source. */
|
|
|
|
ulonglong FUN_1400f50a0(longlong *param_1,uint *param_2,ulonglong param_3,undefined4 *param_4)
|
|
|
|
{
|
|
undefined8 *puVar1;
|
|
longlong *plVar2;
|
|
longlong *plVar3;
|
|
undefined8 uVar4;
|
|
ulonglong uVar5;
|
|
longlong *plVar6;
|
|
longlong *plVar7;
|
|
longlong *plVar8;
|
|
uint *puVar9;
|
|
uint ***pppuVar10;
|
|
int iVar11;
|
|
SIZE_T SVar12;
|
|
undefined4 *puVar13;
|
|
uint **local_res8;
|
|
undefined8 local_d8;
|
|
uint *local_d0;
|
|
longlong *local_c8;
|
|
undefined8 local_c0;
|
|
longlong *local_b8;
|
|
longlong *local_b0;
|
|
undefined4 local_a8;
|
|
undefined4 local_a4;
|
|
longlong *local_a0;
|
|
longlong *local_98;
|
|
undefined8 local_90;
|
|
exception local_88 [80];
|
|
|
|
local_90 = 0xfffffffffffffffe;
|
|
uVar5 = param_3;
|
|
puVar13 = param_4;
|
|
local_b0 = (longlong *)(**(code **)(*param_1 + 0x38))();
|
|
plVar8 = (longlong *)0x0;
|
|
local_c0 = 0;
|
|
local_c8 = (longlong *)0x0;
|
|
local_d0 = (uint *)0x0;
|
|
local_b8 = (longlong *)0x0;
|
|
local_d8 = 0;
|
|
local_a4 = 0;
|
|
uVar4 = FUN_1400bd260(param_2,(uint *)&local_d8,uVar5,puVar13);
|
|
if ((char)uVar4 == '\0') {
|
|
if (local_b8 != (longlong *)0x0) {
|
|
plVar8 = local_b8 + 1;
|
|
*plVar8 = *plVar8 + -1;
|
|
if (*plVar8 == 0) {
|
|
FUN_140080140((longlong)&local_b8,local_b8);
|
|
}
|
|
}
|
|
local_res8 = &local_d0;
|
|
uVar5 = FUN_1400d1800((longlong *)&local_d0);
|
|
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
}
|
|
else {
|
|
if ((uint)local_d8 != 1) {
|
|
if ((uint)local_d8 == 2) {
|
|
plVar6 = (longlong *)
|
|
(**(code **)(*(longlong *)(*(longlong *)(param_1[2] + 0x670) + 0x88) + 0x18))();
|
|
plVar7 = FUN_14008a380((longlong *)&local_a0,plVar6,uVar5,puVar13);
|
|
plVar3 = local_b0;
|
|
plVar2 = local_b8;
|
|
plVar6 = (longlong *)*plVar7;
|
|
if (plVar6 != (longlong *)0x0) {
|
|
plVar6[1] = plVar6[1] + 1;
|
|
plVar8 = plVar6;
|
|
}
|
|
if (local_b8 != (longlong *)0x0) {
|
|
plVar6 = local_b8 + 1;
|
|
*plVar6 = *plVar6 + -1;
|
|
if (*plVar6 == 0) {
|
|
puVar1 = (undefined8 *)*local_b8;
|
|
*puVar1 = Proud::CFastArray<Proud::CCompressedFrameNumbers::Elem,1>::vftable;
|
|
if ((LPVOID)puVar1[2] != (LPVOID)0x0) {
|
|
if ((longlong *)puVar1[1] == (longlong *)0x0) {
|
|
FUN_14006cc60((LPVOID)puVar1[2]);
|
|
}
|
|
else {
|
|
(**(code **)(*(longlong *)puVar1[1] + 0x18))();
|
|
}
|
|
}
|
|
(**(code **)(*plVar3 + 0x18))(plVar3,puVar1);
|
|
(**(code **)(*local_b0 + 0x18))(local_b0,plVar2);
|
|
}
|
|
}
|
|
plVar6 = local_98;
|
|
local_b0 = (longlong *)plVar7[1];
|
|
local_b8 = plVar8;
|
|
if (local_a0 != (longlong *)0x0) {
|
|
plVar8 = local_a0 + 1;
|
|
*plVar8 = *plVar8 + -1;
|
|
if (*plVar8 == 0) {
|
|
puVar1 = (undefined8 *)*local_a0;
|
|
*puVar1 = Proud::CFastArray<Proud::CCompressedFrameNumbers::Elem,1>::vftable;
|
|
if ((LPVOID)puVar1[2] != (LPVOID)0x0) {
|
|
if ((longlong *)puVar1[1] == (longlong *)0x0) {
|
|
FUN_14006cc60((LPVOID)puVar1[2]);
|
|
}
|
|
else {
|
|
(**(code **)(*(longlong *)puVar1[1] + 0x18))();
|
|
}
|
|
}
|
|
(**(code **)(*plVar6 + 0x18))(plVar6,puVar1);
|
|
(**(code **)(*local_98 + 0x18))(local_98,local_a0);
|
|
}
|
|
}
|
|
if (local_b8 == (longlong *)0x0) {
|
|
puVar9 = (uint *)0x0;
|
|
}
|
|
else {
|
|
puVar9 = (uint *)*local_b8;
|
|
}
|
|
uVar5 = FUN_1400df450(puVar9,param_2,uVar5,puVar13);
|
|
if ((char)uVar5 == '\0') {
|
|
if (local_b8 != (longlong *)0x0) {
|
|
plVar8 = local_b8 + 1;
|
|
*plVar8 = *plVar8 + -1;
|
|
if (*plVar8 == 0) {
|
|
FUN_140080140((longlong)&local_b8,local_b8);
|
|
}
|
|
}
|
|
local_res8 = &local_d0;
|
|
uVar5 = FUN_1400d1800((longlong *)&local_d0);
|
|
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
}
|
|
else {
|
|
uVar4 = FUN_1400bc930(param_2,&local_res8,4);
|
|
if ((char)uVar4 == '\0') {
|
|
local_a4 = 0;
|
|
if (local_b8 != (longlong *)0x0) {
|
|
plVar8 = local_b8 + 1;
|
|
*plVar8 = *plVar8 + -1;
|
|
if (*plVar8 == 0) {
|
|
FUN_140080140((longlong)&local_b8,local_b8);
|
|
}
|
|
}
|
|
local_res8 = &local_d0;
|
|
uVar5 = FUN_1400d1800((longlong *)&local_d0);
|
|
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
}
|
|
else {
|
|
local_a4 = local_res8._0_4_;
|
|
uVar5 = 4;
|
|
uVar4 = FUN_1400bc930(param_2,&local_res8,4);
|
|
if ((char)uVar4 != '\0') {
|
|
local_a8 = local_res8._0_4_;
|
|
goto LAB_1400f54b1;
|
|
}
|
|
if (local_b8 != (longlong *)0x0) {
|
|
plVar8 = local_b8 + 1;
|
|
*plVar8 = *plVar8 + -1;
|
|
if (*plVar8 == 0) {
|
|
FUN_140080140((longlong)&local_b8,local_b8);
|
|
}
|
|
}
|
|
local_res8 = &local_d0;
|
|
uVar5 = FUN_1400d1800((longlong *)&local_d0);
|
|
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
}
|
|
}
|
|
goto LAB_1400f55dd;
|
|
}
|
|
LAB_1400f54b1:
|
|
FUN_1400ac2e0(param_3,0,uVar5,puVar13);
|
|
FUN_1400f4680(param_1[1],&local_d8,uVar5,puVar13);
|
|
plVar8 = (longlong *)FUN_1400f45f0(param_1[1]);
|
|
uVar5 = FUN_1400dbe90(plVar8,param_3,(ulonglong)*(uint *)(param_1[2] + 0x56c),
|
|
(ulonglong)*(uint *)(*(longlong *)(param_1[2] + 0x670) + 0x6a4),param_4)
|
|
;
|
|
if ((int)uVar5 < 0) {
|
|
*(undefined1 *)(param_1 + 3) = 1;
|
|
}
|
|
if (local_b8 != (longlong *)0x0) {
|
|
plVar8 = local_b8 + 1;
|
|
*plVar8 = *plVar8 + -1;
|
|
if (*plVar8 == 0) {
|
|
FUN_140080140((longlong)&local_b8,local_b8);
|
|
}
|
|
}
|
|
local_res8 = &local_d0;
|
|
uVar4 = FUN_1400d1800((longlong *)&local_d0);
|
|
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
return CONCAT71((int7)((ulonglong)uVar4 >> 8),1);
|
|
}
|
|
SVar12 = 4;
|
|
pppuVar10 = &local_res8;
|
|
puVar9 = param_2;
|
|
uVar4 = FUN_1400bc930(param_2,pppuVar10,4);
|
|
if ((char)uVar4 == '\0') {
|
|
local_d8 = local_d8 & 0xffffffff;
|
|
if (local_b8 != (longlong *)0x0) {
|
|
plVar8 = local_b8 + 1;
|
|
*plVar8 = *plVar8 + -1;
|
|
if (*plVar8 == 0) {
|
|
FUN_140080140((longlong)&local_b8,local_b8);
|
|
}
|
|
}
|
|
local_res8 = &local_d0;
|
|
uVar5 = FUN_1400d1800((longlong *)&local_d0);
|
|
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
goto LAB_1400f55dd;
|
|
}
|
|
local_d8 = CONCAT44(local_res8._0_4_,(uint)local_d8);
|
|
if (local_c8 != (longlong *)0x0) {
|
|
FUN_14006ba50(local_88,(wchar_t *)PTR_u_Cannot_use_internal_buffer_becau_1401adba0,SVar12,
|
|
puVar13);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_88,(ThrowInfo *)&DAT_1401a93e8);
|
|
}
|
|
if (local_d0 == (uint *)0x0) {
|
|
local_d0 = (uint *)FUN_1400d1840(puVar9,pppuVar10,SVar12);
|
|
local_d0[10] = 1;
|
|
local_d0[0xb] = 0;
|
|
}
|
|
puVar9 = param_2;
|
|
uVar5 = FUN_1400bcfd0(param_2,&local_res8,SVar12,puVar13);
|
|
if ((((char)uVar5 != '\0') && (iVar11 = (int)local_res8, -1 < iVar11)) &&
|
|
(iVar11 <= DAT_1401ac140)) {
|
|
if (local_c8 == (longlong *)0x0) {
|
|
puVar9 = local_d0;
|
|
if (iVar11 < 1) {
|
|
if (local_d0 == (uint *)0x0) goto LAB_1400f5550;
|
|
iVar11 = 0;
|
|
}
|
|
else if (local_d0 == (uint *)0x0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_1400d1900(0,0,SVar12,puVar13);
|
|
}
|
|
FUN_1400146f0((longlong)local_d0,iVar11,SVar12);
|
|
}
|
|
else {
|
|
if (local_c0._4_4_ < iVar11) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
local_c0 = CONCAT44(local_c0._4_4_,iVar11);
|
|
}
|
|
plVar6 = local_c8;
|
|
if (local_c8 == (longlong *)0x0) {
|
|
if (local_d0 == (uint *)0x0) {
|
|
LAB_1400f5550:
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_1400d1900(puVar9,0,SVar12,puVar13);
|
|
}
|
|
plVar6 = plVar8;
|
|
if (local_d0[6] != 0) {
|
|
plVar6 = *(longlong **)(local_d0 + 4);
|
|
}
|
|
}
|
|
uVar5 = (ulonglong)local_res8 & 0xffffffff;
|
|
uVar4 = FUN_1400bc930(param_2,plVar6,uVar5);
|
|
if ((char)uVar4 != '\0') goto LAB_1400f54b1;
|
|
}
|
|
if (local_b8 != (longlong *)0x0) {
|
|
plVar8 = local_b8 + 1;
|
|
*plVar8 = *plVar8 + -1;
|
|
if (*plVar8 == 0) {
|
|
FUN_140080140((longlong)&local_b8,local_b8);
|
|
}
|
|
}
|
|
local_res8 = &local_d0;
|
|
uVar5 = FUN_1400d1800((longlong *)&local_d0);
|
|
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
}
|
|
LAB_1400f55dd:
|
|
return uVar5 & 0xffffffffffffff00;
|
|
}
|
|
|