225 lines
6 KiB
C
225 lines
6 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x14010ef40 FUN_14010ef40
|
|
* Pseudocode, not original source. */
|
|
|
|
ulonglong FUN_14010ef40(longlong param_1,uint param_2,char *param_3,uint *param_4,int param_5)
|
|
|
|
{
|
|
uint *puVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
undefined4 extraout_var;
|
|
ulonglong uVar4;
|
|
undefined4 extraout_var_00;
|
|
undefined4 extraout_var_01;
|
|
undefined4 extraout_var_02;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
undefined8 *puVar7;
|
|
uint local_28;
|
|
uint local_24;
|
|
uint local_20;
|
|
|
|
if (((param_1 == 0) || (param_3 == (char *)0x0)) || (param_4 == (uint *)0x0)) {
|
|
return 0x10;
|
|
}
|
|
uVar5 = 0;
|
|
local_20 = 0;
|
|
if (param_2 != 0) {
|
|
puVar7 = (undefined8 *)(param_1 + 8);
|
|
do {
|
|
uVar6 = *(uint *)(puVar7 + 1);
|
|
puVar1 = (uint *)*puVar7;
|
|
if (*(int *)(puVar7 + -1) == 0) break;
|
|
switch(*(int *)(puVar7 + -1)) {
|
|
case 1:
|
|
uVar4 = FUN_14010eee0(&local_28);
|
|
break;
|
|
case 2:
|
|
uVar4 = FUN_14010ec50((longlong)puVar1,(int *)&local_28);
|
|
break;
|
|
case 3:
|
|
uVar2 = FUN_14010eba0(*puVar1,(int *)&local_28);
|
|
uVar4 = CONCAT44(extraout_var,uVar2);
|
|
break;
|
|
case 4:
|
|
uVar4 = FUN_14010e9f0((ulonglong)uVar6,(int *)&local_28);
|
|
break;
|
|
case 5:
|
|
uVar4 = FUN_14010e8a0(uVar6,(int *)&local_28);
|
|
break;
|
|
case 6:
|
|
uVar5 = uVar5 + 2;
|
|
goto LAB_14010f08f;
|
|
case 7:
|
|
uVar4 = FUN_14010e5f0(puVar1,uVar6,(int *)&local_28);
|
|
break;
|
|
case 8:
|
|
uVar4 = FUN_14010e410((byte *)puVar1,uVar6,(int *)&local_28);
|
|
break;
|
|
case 9:
|
|
uVar4 = FUN_14010e1d0((byte *)puVar1,uVar6,(int *)&local_28);
|
|
break;
|
|
case 10:
|
|
uVar4 = FUN_14010dec0((ushort *)puVar1,uVar6,(int *)&local_28);
|
|
break;
|
|
case 0xb:
|
|
uVar4 = FUN_14010fec0((longlong)puVar1,&local_28);
|
|
break;
|
|
default:
|
|
goto LAB_14010f3b7;
|
|
case 0xd:
|
|
case 0xe:
|
|
case 0xf:
|
|
uVar4 = FUN_14010d940((longlong)puVar1,uVar6,(int *)&local_28);
|
|
}
|
|
if ((int)uVar4 != 0) {
|
|
return uVar4;
|
|
}
|
|
uVar5 = uVar5 + local_28;
|
|
LAB_14010f08f:
|
|
puVar7 = puVar7 + 7;
|
|
local_20 = local_20 + 1;
|
|
} while (local_20 < param_2);
|
|
}
|
|
if (uVar5 < 0x80) {
|
|
uVar6 = uVar5 + 2;
|
|
}
|
|
else if (uVar5 < 0x100) {
|
|
uVar6 = uVar5 + 3;
|
|
}
|
|
else if (uVar5 < 0x10000) {
|
|
uVar6 = uVar5 + 4;
|
|
}
|
|
else {
|
|
if (0xffffff < uVar5) {
|
|
LAB_14010f3b7:
|
|
return 0x10;
|
|
}
|
|
uVar6 = uVar5 + 5;
|
|
}
|
|
if (*param_4 < uVar6) {
|
|
*param_4 = uVar6;
|
|
return 6;
|
|
}
|
|
*param_3 = (param_5 != 0xd) + '0';
|
|
uVar6 = 1;
|
|
uVar4 = 1;
|
|
local_28 = 1;
|
|
if (uVar5 < 0x80) {
|
|
param_3[1] = (char)uVar5;
|
|
local_28 = uVar6;
|
|
}
|
|
else {
|
|
if (uVar5 < 0x100) {
|
|
param_3[1] = -0x7f;
|
|
local_28 = uVar6;
|
|
}
|
|
else {
|
|
if (uVar5 < 0x10000) {
|
|
param_3[1] = -0x7e;
|
|
local_28 = uVar6;
|
|
}
|
|
else {
|
|
if (0xffffff < uVar5) goto LAB_14010f194;
|
|
param_3[1] = -0x7d;
|
|
local_28 = 2;
|
|
param_3[2] = (char)(uVar5 >> 0x10);
|
|
}
|
|
local_28 = local_28 + 1;
|
|
param_3[local_28] = (char)(uVar5 >> 8);
|
|
}
|
|
local_28 = local_28 + 1;
|
|
param_3[local_28] = (char)uVar5;
|
|
}
|
|
local_28 = local_28 + 1;
|
|
uVar4 = (ulonglong)local_28;
|
|
LAB_14010f194:
|
|
*param_4 = *param_4 - (int)uVar4;
|
|
uVar5 = 0;
|
|
if (param_2 != 0) {
|
|
puVar7 = (undefined8 *)(param_1 + 8);
|
|
do {
|
|
iVar3 = *(int *)(puVar7 + -1);
|
|
uVar6 = *(uint *)(puVar7 + 1);
|
|
puVar1 = (uint *)*puVar7;
|
|
if (iVar3 == 0) break;
|
|
switch(iVar3) {
|
|
case 1:
|
|
local_24 = *param_4;
|
|
uVar4 = FUN_140111420(*puVar1,(undefined2 *)(param_3 + uVar4),&local_24);
|
|
break;
|
|
case 2:
|
|
local_24 = *param_4;
|
|
uVar4 = FUN_140111180((longlong)puVar1,param_3 + uVar4,&local_24);
|
|
break;
|
|
case 3:
|
|
local_24 = *param_4;
|
|
iVar3 = FUN_140111060(*puVar1,param_3 + uVar4,&local_24);
|
|
uVar4 = CONCAT44(extraout_var_00,iVar3);
|
|
break;
|
|
case 4:
|
|
local_24 = *param_4;
|
|
uVar4 = FUN_140110ef0((char *)puVar1,uVar6,param_3 + uVar4,&local_24);
|
|
break;
|
|
case 5:
|
|
local_24 = *param_4;
|
|
uVar4 = FUN_140110dc0((undefined1 *)puVar1,uVar6,param_3 + uVar4,&local_24);
|
|
break;
|
|
case 6:
|
|
param_3[uVar4] = '\x05';
|
|
param_3[local_28 + 1] = '\0';
|
|
local_28 = local_28 + 2;
|
|
*param_4 = *param_4 - 2;
|
|
goto LAB_14010f389;
|
|
case 7:
|
|
local_24 = *param_4;
|
|
uVar4 = FUN_140110b60(puVar1,uVar6,param_3 + uVar4,&local_24);
|
|
break;
|
|
case 8:
|
|
local_24 = *param_4;
|
|
uVar4 = FUN_140110a30((byte *)puVar1,uVar6,param_3 + uVar4,&local_24);
|
|
break;
|
|
case 9:
|
|
local_24 = *param_4;
|
|
uVar4 = FUN_140110900((byte *)puVar1,uVar6,param_3 + uVar4,&local_24);
|
|
break;
|
|
case 10:
|
|
local_24 = *param_4;
|
|
uVar4 = FUN_140110700((ushort *)puVar1,uVar6,param_3 + uVar4,&local_24);
|
|
break;
|
|
case 0xb:
|
|
local_24 = *param_4;
|
|
uVar4 = FUN_140110370(puVar1,param_3 + uVar4,&local_24);
|
|
break;
|
|
default:
|
|
goto LAB_14010f3b7;
|
|
case 0xd:
|
|
local_24 = *param_4;
|
|
uVar4 = FUN_14010ef40((longlong)puVar1,uVar6,param_3 + uVar4,&local_24,iVar3);
|
|
break;
|
|
case 0xe:
|
|
local_24 = *param_4;
|
|
uVar2 = FUN_140110270((undefined8 *)puVar1,uVar6,param_3 + uVar4,&local_24);
|
|
uVar4 = CONCAT44(extraout_var_01,uVar2);
|
|
break;
|
|
case 0xf:
|
|
local_24 = *param_4;
|
|
iVar3 = FUN_14010ff80((int *)puVar1,uVar6,param_3 + uVar4,&local_24);
|
|
uVar4 = CONCAT44(extraout_var_02,iVar3);
|
|
}
|
|
if ((int)uVar4 != 0) {
|
|
return uVar4;
|
|
}
|
|
local_28 = local_28 + local_24;
|
|
*param_4 = *param_4 - local_24;
|
|
LAB_14010f389:
|
|
uVar4 = (ulonglong)local_28;
|
|
puVar7 = puVar7 + 7;
|
|
uVar5 = uVar5 + 1;
|
|
} while (uVar5 < param_2);
|
|
}
|
|
*param_4 = (uint)uVar4;
|
|
return 0;
|
|
}
|
|
|