server-re/decomp/MessageServer_Release_x64/full/functions/0x1400bd710.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;
}