184 lines
5.6 KiB
C
184 lines
5.6 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x1400bd710 FUN_1400bd710
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
|
|
ulonglong FUN_1400bd710(uint *param_1,LPCWSTR param_2,undefined8 param_3,undefined8 param_4)
|
|
|
|
{
|
|
LPCWSTR pWVar1;
|
|
uint uVar2;
|
|
LPCWSTR pWVar3;
|
|
ulonglong uVar4;
|
|
uint *puVar5;
|
|
int *piVar6;
|
|
uint uVar7;
|
|
LPCWSTR *ppWVar8;
|
|
char *pcVar9;
|
|
uint uVar10;
|
|
LPCWSTR pWVar11;
|
|
char *pcVar12;
|
|
int iVar13;
|
|
int iVar14;
|
|
undefined8 uVar15;
|
|
undefined1 auStack_118 [32];
|
|
char local_f8 [8];
|
|
LPCWSTR local_f0;
|
|
undefined8 *local_e8;
|
|
LPCWSTR *local_e0;
|
|
LPCWSTR local_d8;
|
|
undefined8 local_d0;
|
|
char *local_c8;
|
|
char local_c0 [136];
|
|
ulonglong local_38;
|
|
|
|
local_d0 = 0xfffffffffffffffe;
|
|
local_38 = DAT_1401ac5a0 ^ (ulonglong)auStack_118;
|
|
uVar10 = (int)*param_1 >> 0x1f & 7;
|
|
uVar2 = *param_1 + uVar10;
|
|
uVar7 = uVar2 & 0xfffffff8;
|
|
*param_1 = uVar7;
|
|
if (0 < (int)((uVar2 & 7) - uVar10)) {
|
|
*param_1 = uVar7 + 8;
|
|
}
|
|
uVar15 = 1;
|
|
pcVar9 = local_f8;
|
|
pWVar3 = (LPCWSTR)FUN_1400bc6c0((int *)param_1,(undefined8 *)pcVar9,1,param_4);
|
|
if ((char)pWVar3 == '\0') goto LAB_1400bda3a;
|
|
FUN_1400bc8a0((int *)param_1,pcVar9,uVar15,param_4);
|
|
ppWVar8 = &local_f0;
|
|
puVar5 = param_1;
|
|
pWVar3 = (LPCWSTR)FUN_1400bcfd0(param_1,ppWVar8,uVar15,param_4);
|
|
pWVar11 = local_f0;
|
|
if ((char)pWVar3 == '\0') goto LAB_1400bda3a;
|
|
iVar13 = (int)local_f0;
|
|
if ((iVar13 < 0) || (0x100000 < iVar13)) {
|
|
FUN_14006ba50((exception *)&local_c8,L"CMessage.ReadString failed! length=%d",
|
|
(ulonglong)local_f0 & 0xffffffff,param_4);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(&local_c8,(ThrowInfo *)&DAT_1401a93e8);
|
|
}
|
|
if (local_f8[0] == '\x01') {
|
|
local_f0 = param_2;
|
|
local_e8 = (undefined8 *)FUN_140053f20((longlong *)param_2,iVar13 + 1);
|
|
*(undefined1 *)local_e8 = 0;
|
|
*(undefined1 *)((longlong)iVar13 + (longlong)local_e8) = 0;
|
|
uVar4 = FUN_1400bc930(param_1,local_e8,(ulonglong)pWVar11 & 0xffffffff);
|
|
FUN_140054010((longlong *)param_2);
|
|
return uVar4 & 0xff;
|
|
}
|
|
FUN_14006cb70(puVar5,ppWVar8,uVar15,param_4);
|
|
local_f0 = (LPCWSTR)PTR_DAT_1401ac010;
|
|
uVar2 = iVar13 + 1;
|
|
local_e0 = &local_f0;
|
|
if ((int)uVar2 < 1) {
|
|
uVar2 = 0;
|
|
}
|
|
uVar7 = 1;
|
|
if (1 < (int)uVar2) {
|
|
uVar7 = uVar2;
|
|
}
|
|
if (0 < (int)uVar7) {
|
|
local_f0 = (LPCWSTR)PTR_DAT_1401ac010;
|
|
if ((int)uVar7 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
if (uVar7 == 0) {
|
|
FUN_1400031e0((longlong *)&local_f0,ppWVar8,uVar15,param_4);
|
|
}
|
|
else {
|
|
puVar5 = (uint *)FUN_14006cbf0((longlong)(int)uVar7 * 2 + 10);
|
|
if (puVar5 != (uint *)0x0) {
|
|
*puVar5 = 0;
|
|
puVar5[1] = 1;
|
|
}
|
|
*puVar5 = uVar7;
|
|
iVar14 = 0;
|
|
if ((local_f0 != (LPCWSTR)0x0) && (iVar14 = 0, local_f0 != (LPCWSTR)PTR_DAT_1401ac010)) {
|
|
iVar14 = *(int *)(local_f0 + -4);
|
|
}
|
|
pWVar3 = (LPCWSTR)PTR_DAT_1401ac010;
|
|
if ((int)uVar7 < iVar14) {
|
|
LAB_1400bd8ad:
|
|
if (local_f0 != (LPCWSTR)0x0) {
|
|
pWVar3 = local_f0;
|
|
}
|
|
}
|
|
else {
|
|
uVar7 = 0;
|
|
if (local_f0 != (LPCWSTR)0x0) {
|
|
if (local_f0 != (LPCWSTR)PTR_DAT_1401ac010) {
|
|
uVar7 = *(uint *)(local_f0 + -4);
|
|
}
|
|
goto LAB_1400bd8ad;
|
|
}
|
|
}
|
|
uVar4 = (ulonglong)uVar7;
|
|
FUN_14006ca20(puVar5 + 2,pWVar3,uVar7);
|
|
FUN_1400031e0((longlong *)&local_f0,pWVar3,uVar4,param_4);
|
|
local_f0 = (LPCWSTR)(puVar5 + 2);
|
|
}
|
|
}
|
|
FUN_140002e40((longlong *)&local_f0);
|
|
pWVar11 = local_f0;
|
|
if (local_f0 == (LPCWSTR)0x0) {
|
|
pWVar11 = (LPCWSTR)PTR_DAT_1401ac010;
|
|
}
|
|
*pWVar11 = L'\0';
|
|
pWVar11[iVar13] = L'\0';
|
|
uVar4 = (ulonglong)(uint)(iVar13 * 2);
|
|
local_d8 = pWVar11;
|
|
uVar15 = FUN_1400bc930(param_1,(undefined8 *)pWVar11,uVar4);
|
|
if ((char)uVar15 != '\0') {
|
|
FUN_140003010((longlong *)&local_f0);
|
|
pWVar3 = local_f0;
|
|
if (local_f0 == (LPCWSTR)0x0) {
|
|
pWVar3 = (LPCWSTR)PTR_DAT_1401ac010;
|
|
}
|
|
local_c8 = local_c0;
|
|
uVar15 = 3;
|
|
FUN_14006b570((longlong *)&local_c8,pWVar3,3);
|
|
pcVar12 = local_c8;
|
|
FUN_14006b850((longlong *)param_2,local_c8);
|
|
pcVar9 = local_c8;
|
|
if (local_c8 != local_c0) {
|
|
free(local_c8);
|
|
}
|
|
pWVar3 = local_f0;
|
|
if (((local_f0 != (LPCWSTR)0x0) && (local_f0 != (LPCWSTR)PTR_DAT_1401ac010)) &&
|
|
(pWVar11 = local_f0 + -4, pWVar11 != (LPCWSTR)0x0)) {
|
|
piVar6 = (int *)FUN_14006cb70(pcVar9,pcVar12,uVar15,param_4);
|
|
local_e0 = (LPCWSTR *)piVar6;
|
|
FUN_14006b350(piVar6);
|
|
local_d8 = (LPCWSTR)CONCAT71(local_d8._1_7_,1);
|
|
pWVar3 = pWVar3 + -2;
|
|
*(int *)pWVar3 = *(int *)pWVar3 + -1;
|
|
if (*(int *)pWVar3 == 0) {
|
|
FUN_14006cc60(pWVar11);
|
|
}
|
|
local_f0 = (LPCWSTR)FUN_14006b3e0((longlong)piVar6);
|
|
}
|
|
return CONCAT71((int7)((ulonglong)local_f0 >> 8),1);
|
|
}
|
|
ppWVar8 = &local_f0;
|
|
FUN_140003010((longlong *)ppWVar8);
|
|
pWVar3 = local_f0;
|
|
if (((local_f0 != (LPCWSTR)0x0) && (local_f0 != (LPCWSTR)PTR_DAT_1401ac010)) &&
|
|
(pWVar1 = local_f0 + -4, pWVar1 != (LPCWSTR)0x0)) {
|
|
piVar6 = (int *)FUN_14006cb70(ppWVar8,pWVar11,uVar4,param_4);
|
|
local_e0 = (LPCWSTR *)piVar6;
|
|
FUN_14006b350(piVar6);
|
|
local_d8 = (LPCWSTR)CONCAT71(local_d8._1_7_,1);
|
|
pWVar3 = pWVar3 + -2;
|
|
*(int *)pWVar3 = *(int *)pWVar3 + -1;
|
|
if (*(int *)pWVar3 == 0) {
|
|
FUN_14006cc60(pWVar1);
|
|
}
|
|
pWVar3 = (LPCWSTR)FUN_14006b3e0((longlong)piVar6);
|
|
}
|
|
LAB_1400bda3a:
|
|
return (ulonglong)pWVar3 & 0xffffffffffffff00;
|
|
}
|
|
|