342 lines
10 KiB
C
342 lines
10 KiB
C
/* 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;
|
|
}
|
|
|