438 lines
17 KiB
C
438 lines
17 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x1400c4810 FUN_1400c4810
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
/* WARNING: Removing unreachable block (ram,0x0001400c4e3e) */
|
|
|
|
void FUN_1400c4810(longlong param_1,uint *param_2,wchar_t *param_3,uint **param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
longlong *plVar2;
|
|
code *pcVar3;
|
|
int iVar4;
|
|
undefined8 uVar5;
|
|
ulonglong uVar6;
|
|
ulonglong uVar7;
|
|
ulonglong uVar8;
|
|
undefined4 *puVar9;
|
|
int *piVar10;
|
|
wchar_t *pwVar11;
|
|
char *pcVar12;
|
|
longlong lVar13;
|
|
longlong *plVar14;
|
|
uint uVar15;
|
|
wchar_t *pwVar16;
|
|
longlong lVar17;
|
|
undefined1 *puVar18;
|
|
int *piVar19;
|
|
undefined1 *puVar20;
|
|
longlong lVar21;
|
|
wchar_t *pwVar22;
|
|
longlong **pplVar23;
|
|
undefined1 *puVar24;
|
|
longlong *plVar25;
|
|
longlong lVar26;
|
|
longlong *plVar27;
|
|
uint uVar28;
|
|
undefined1 auStack_1b18 [32];
|
|
undefined4 local_1af8;
|
|
uint local_1af4;
|
|
undefined8 local_1af0;
|
|
ulonglong local_1ae8;
|
|
longlong *local_1ae0;
|
|
bool local_1ad8;
|
|
uint local_1ad0 [2];
|
|
undefined8 local_1ac8;
|
|
undefined1 local_1ac0;
|
|
undefined4 local_1abc;
|
|
undefined1 local_1ab8;
|
|
undefined1 local_1ab7;
|
|
uint local_1ab0 [2];
|
|
undefined **local_1aa8;
|
|
longlong *local_1aa0;
|
|
longlong *local_1a98;
|
|
ulonglong local_1a90;
|
|
undefined8 local_1a88;
|
|
int local_1a80 [2];
|
|
longlong local_1a78;
|
|
longlong local_1a70;
|
|
undefined4 local_1a68;
|
|
int local_1a64;
|
|
longlong local_1a58;
|
|
wchar_t *local_1a50;
|
|
undefined8 local_1a48;
|
|
int *local_1a40;
|
|
undefined1 local_1a38;
|
|
undefined8 local_1a30;
|
|
longlong local_1a28 [2];
|
|
undefined4 local_1a18 [2];
|
|
longlong local_1a10;
|
|
longlong local_1a08;
|
|
undefined4 local_1a00;
|
|
int local_19fc;
|
|
undefined1 local_19f0 [136];
|
|
undefined1 local_1968 [3200];
|
|
undefined1 *local_ce8;
|
|
undefined4 local_ce0;
|
|
undefined4 local_cdc;
|
|
undefined1 local_cd8 [3216];
|
|
ulonglong local_48;
|
|
undefined8 uStack_40;
|
|
|
|
uStack_40 = 0x1400c4826;
|
|
puVar20 = auStack_1b18;
|
|
local_1a30 = 0xfffffffffffffffe;
|
|
local_48 = DAT_1401ac5a0 ^ (ulonglong)&local_1af8;
|
|
pwVar22 = param_3;
|
|
local_1a58 = param_1;
|
|
uVar5 = FUN_1400bd160(param_2,local_1ab0,param_3,param_4);
|
|
puVar18 = auStack_1b18;
|
|
if (((char)uVar5 == '\0') ||
|
|
(uVar6 = FUN_1400bcfd0(param_2,&local_1a48,pwVar22,param_4), puVar18 = auStack_1b18,
|
|
(char)uVar6 == '\0')) goto LAB_1400c4f4f;
|
|
plVar25 = (longlong *)0x0;
|
|
local_1aa0 = (longlong *)0x0;
|
|
local_1a98 = (longlong *)0x0;
|
|
local_1a90 = 0;
|
|
local_1a88 = 0;
|
|
local_1aa8 = Proud::HostIDArray::vftable;
|
|
uVar6 = FUN_1400bcfd0(param_2,&local_1ae8,pwVar22,param_4);
|
|
plVar14 = plVar25;
|
|
plVar27 = plVar25;
|
|
if (((char)uVar6 == '\0') ||
|
|
((iVar4 = (int)local_1ae8, plVar27 = (longlong *)0x0, iVar4 < 0 || (DAT_1401ac140 < iVar4)))) {
|
|
LAB_1400c4f2f:
|
|
puVar18 = auStack_1b18;
|
|
if (plVar27 == (longlong *)0x0) goto LAB_1400c4f4f;
|
|
puVar18 = auStack_1b18;
|
|
if (plVar14 == (longlong *)0x0) {
|
|
LAB_1400c4f47:
|
|
*(undefined8 *)(puVar18 + -8) = 0x1400c4f4f;
|
|
FUN_14006cc60(plVar27);
|
|
goto LAB_1400c4f4f;
|
|
}
|
|
lVar17 = *plVar14;
|
|
puVar18 = auStack_1b18;
|
|
}
|
|
else {
|
|
FUN_14007b600((longlong)&local_1aa8,iVar4,(longlong)pwVar22);
|
|
plVar27 = local_1a98;
|
|
plVar14 = local_1a98;
|
|
if ((int)local_1a90 == 0) {
|
|
plVar14 = plVar25;
|
|
}
|
|
uVar6 = (ulonglong)(uint)(iVar4 * 4);
|
|
uVar5 = FUN_1400bc930(param_2,plVar14,uVar6);
|
|
plVar14 = local_1aa0;
|
|
if ((char)uVar5 == '\0') goto LAB_1400c4f2f;
|
|
uVar7 = FUN_1400bcfd0(param_2,&local_1ae8,uVar6,param_4);
|
|
uVar8 = local_1ae8;
|
|
puVar18 = auStack_1b18;
|
|
if ((char)uVar7 != '\0') {
|
|
uVar28 = (uint)local_1ae8;
|
|
if (((int)uVar28 < 0) || (DAT_1401ac140 <= (int)uVar28)) {
|
|
FUN_14009b0d0(*(longlong **)(param_1 + 0x148),param_3,
|
|
"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_UnreliableRelay1",2);
|
|
puVar18 = auStack_1b18;
|
|
}
|
|
else {
|
|
uVar1 = *param_2;
|
|
uVar15 = (int)uVar1 >> 0x1f & 7;
|
|
iVar4 = FUN_14007c120((longlong)param_2,(ulonglong)uVar15,uVar6,param_4);
|
|
if (((int)(uVar15 + uVar1) >> 3) + uVar28 != iVar4) {
|
|
param_4 = (uint **)0x2;
|
|
FUN_14009b0d0(*(longlong **)(param_1 + 0x148),param_3,
|
|
"msg.GetReadOffset() + payloadLength == msg.GetLength()",2);
|
|
}
|
|
FUN_1400bca00(local_1a80);
|
|
pplVar23 = (longlong **)(uVar8 & 0xffffffff);
|
|
uVar5 = FUN_1400bcc60(param_2,local_1a80,uVar28,param_4);
|
|
if ((char)uVar5 == '\0') {
|
|
FUN_14009b0d0(*(longlong **)(param_1 + 0x148),param_3,
|
|
"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_UnreliableRelay1",2);
|
|
local_1ae0 = &local_1a78;
|
|
FUN_1400d1800(&local_1a78);
|
|
puVar18 = auStack_1b18;
|
|
if (local_1a70 != 0) {
|
|
if (local_1a64 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
local_1a68 = 0;
|
|
puVar18 = auStack_1b18;
|
|
}
|
|
}
|
|
else {
|
|
iVar4 = (int)local_1a90;
|
|
piVar19 = (int *)(longlong)(int)local_1a90;
|
|
if ((int)local_1a90 < 1) {
|
|
local_1ae0 = &local_1a78;
|
|
FUN_1400d1800(&local_1a78);
|
|
puVar18 = auStack_1b18;
|
|
if (local_1a70 != 0) {
|
|
if (local_1a64 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
local_1a68 = 0;
|
|
puVar18 = auStack_1b18;
|
|
}
|
|
}
|
|
else {
|
|
uVar6 = ((longlong)piVar19 + 1) * 0x10;
|
|
local_1ae0 = (longlong *)piVar19;
|
|
if (uVar6 < 0x401) {
|
|
uVar8 = uVar6 + 0xf;
|
|
if (uVar8 <= uVar6) {
|
|
uVar8 = 0xffffffffffffff0;
|
|
}
|
|
lVar17 = -(uVar8 & 0xfffffffffffffff0);
|
|
puVar20 = auStack_1b18 + lVar17;
|
|
puVar9 = (undefined4 *)((longlong)&local_1af8 + lVar17);
|
|
pwVar22 = (wchar_t *)0x0;
|
|
if (puVar9 != (undefined4 *)0x0) {
|
|
*puVar9 = 0xcccc;
|
|
puVar20 = auStack_1b18 + lVar17;
|
|
LAB_1400c4aa2:
|
|
pwVar22 = (wchar_t *)(puVar9 + 4);
|
|
}
|
|
}
|
|
else {
|
|
puVar9 = malloc(uVar6);
|
|
pwVar22 = (wchar_t *)0x0;
|
|
if (puVar9 != (undefined4 *)0x0) {
|
|
*puVar9 = 0xdddd;
|
|
puVar20 = auStack_1b18;
|
|
goto LAB_1400c4aa2;
|
|
}
|
|
}
|
|
pwVar16 = (wchar_t *)**(longlong **)(param_1 + 0x148);
|
|
pcVar3 = *(code **)(pwVar16 + 0x2c);
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4ab3;
|
|
piVar10 = (int *)(*pcVar3)();
|
|
local_1a40 = piVar10;
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4ac2;
|
|
FUN_14006b350(piVar10);
|
|
local_1a38 = 1;
|
|
if (DAT_1401b42cf != '\0') {
|
|
pplVar23 = (longlong **)**(ulonglong **)(param_1 + 0x148);
|
|
pwVar16 = L"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_UnreliableRelay1";
|
|
pcVar3 = (code *)pplVar23[0x19];
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4aea;
|
|
(*pcVar3)();
|
|
}
|
|
pcVar3 = *(code **)(*(longlong *)param_3 + 0x10);
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4af4;
|
|
local_1af4 = (*pcVar3)();
|
|
local_1af0 = (ulonglong)local_1af0._4_4_ << 0x20;
|
|
plVar14 = plVar25;
|
|
pwVar11 = pwVar22;
|
|
if (0 < iVar4) {
|
|
do {
|
|
local_1a50 = pwVar11;
|
|
if (((longlong)plVar25 < 0) || ((int)piVar19 <= (int)plVar14)) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar20 + -8) = &UNK_1400c4b97;
|
|
FUN_14006be30(param_3,pwVar16,pplVar23,param_4);
|
|
}
|
|
uVar28 = *(uint *)((longlong)plVar27 + (longlong)plVar25 * 4);
|
|
pwVar16 = (wchar_t *)(ulonglong)uVar28;
|
|
param_3 = *(wchar_t **)(param_1 + 0x148);
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4b2d;
|
|
pwVar11 = (wchar_t *)FUN_14007dea0((longlong)param_3,uVar28);
|
|
local_1ac8 = CONCAT44(local_1ac8._4_4_,uVar28);
|
|
if (pwVar11 != (wchar_t *)0x0) {
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4b44;
|
|
FUN_1400d8960((longlong)(pwVar11 + 0x60));
|
|
plVar2 = *(longlong **)(local_1a58 + 0x148);
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4b5a;
|
|
pwVar16 = pwVar11;
|
|
FUN_140091140(plVar2,(longlong *)pwVar11,pplVar23,param_4);
|
|
*(wchar_t **)local_1a50 = pwVar11;
|
|
*(undefined8 *)(local_1a50 + 4) = local_1ac8;
|
|
local_1af0 = CONCAT44(local_1af0._4_4_,(int)local_1af0 + 1);
|
|
param_3 = local_1a50 + 8;
|
|
local_1a50 = param_3;
|
|
}
|
|
plVar25 = (longlong *)((longlong)plVar25 + 1);
|
|
piVar19 = (int *)(local_1a90 & 0xffffffff);
|
|
param_1 = local_1a58;
|
|
plVar14 = (longlong *)(ulonglong)((int)plVar14 + 1);
|
|
pwVar11 = local_1a50;
|
|
} while ((longlong)plVar25 < (longlong)local_1ae0);
|
|
}
|
|
piVar19 = local_1a40;
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4ba4;
|
|
FUN_14006b3e0((longlong)piVar19);
|
|
local_1a38 = 0;
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4bb7;
|
|
FUN_1400bca00(local_1a18);
|
|
puVar24 = (undefined1 *)0x80;
|
|
puVar18 = local_19f0;
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4bd1;
|
|
FUN_1400bc680((longlong)local_1a18,(longlong)puVar18,0x80,param_4);
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4be0;
|
|
FUN_140054a10((longlong)local_1a18,CONCAT71((int7)((ulonglong)puVar18 >> 8),0x18),
|
|
(SIZE_T)puVar24,param_4);
|
|
uVar6 = (ulonglong)local_1af4;
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4bef;
|
|
FUN_140014500((longlong)local_1a18,uVar6,(SIZE_T)puVar24,param_4);
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4c02;
|
|
FUN_1400bc450(local_1a28,(longlong)local_1a18);
|
|
lVar17 = (longlong)(int)(uint)local_1ae8;
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4c13;
|
|
FUN_1400bddd0((longlong)local_1a18,lVar17,(SIZE_T)puVar24,param_4);
|
|
local_cdc = 200;
|
|
local_ce0 = 0;
|
|
local_ce8 = local_1968;
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4c44;
|
|
FUN_14007db50((longlong)local_cd8,(longlong)local_1a18,puVar24);
|
|
puVar18 = local_cd8;
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4c58;
|
|
FUN_14007cb60((longlong)local_1968,(longlong)puVar18,puVar24,param_4);
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4c65;
|
|
FUN_14007ca50((longlong)local_cd8,puVar18,puVar24,param_4);
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4c75;
|
|
FUN_14007db50((longlong)local_cd8,(longlong)local_1a80,puVar24);
|
|
puVar18 = local_cd8;
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4c89;
|
|
FUN_14007cb60((longlong)local_1968,(longlong)puVar18,puVar24,param_4);
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4c96;
|
|
FUN_14007ca50((longlong)local_cd8,puVar18,puVar24,param_4);
|
|
local_1af8._1_1_ = DAT_1401b61a0;
|
|
local_1af8._0_1_ = DAT_1401b61c0;
|
|
local_1af4 = local_1ab0[0];
|
|
lVar17 = (longlong)(int)local_1af0;
|
|
while ((0 < lVar17 && (lVar26 = 0, plVar27 = local_1a98, 0 < lVar17))) {
|
|
lVar21 = lVar17 * 0x10 + -0x10;
|
|
do {
|
|
lVar13 = *(longlong *)(pwVar22 + lVar26 * 8);
|
|
local_1af0 = lVar13;
|
|
local_1ae8 = *(ulonglong *)(pwVar22 + lVar26 * 8 + 4);
|
|
pcVar3 = *(code **)(*(longlong *)(lVar13 + 0x108) + 0x10);
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4d04;
|
|
piVar19 = (int *)(*pcVar3)();
|
|
local_1ad8 = false;
|
|
local_1ae0 = (longlong *)piVar19;
|
|
if (lVar26 == 0) {
|
|
local_1ad8 = true;
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4dbb;
|
|
FUN_14006b350(piVar19);
|
|
local_1ad0[0] = local_1af4;
|
|
local_1ac8 = local_1a48;
|
|
local_1ac0 = local_1af8._1_1_;
|
|
local_1abc = 0xffffffff;
|
|
local_1ab8 = (undefined1)local_1af8;
|
|
local_1ab7 = 0;
|
|
param_4 = (uint **)local_1ad0;
|
|
puVar24 = local_1968;
|
|
uVar28 = (uint)local_1ae8;
|
|
puVar18 = (undefined1 *)(local_1ae8 & 0xffffffff);
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4dff;
|
|
FUN_1400da140((char *)(lVar13 + 0x700),uVar28,(longlong)puVar24,(uint *)param_4);
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4e07;
|
|
FUN_14006b3e0((longlong)piVar19);
|
|
local_1ad8 = false;
|
|
lVar13 = local_1af0 + 0xc0;
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4e1c;
|
|
FUN_1400d8970(lVar13);
|
|
pwVar22[0] = L'\0';
|
|
pwVar22[1] = L'\0';
|
|
pwVar22[2] = L'\0';
|
|
pwVar22[3] = L'\0';
|
|
*(undefined8 *)pwVar22 = *(undefined8 *)(lVar21 + (longlong)pwVar22);
|
|
*(undefined8 *)(pwVar22 + 4) = *(undefined8 *)(lVar21 + 8 + (longlong)pwVar22);
|
|
LAB_1400c4e33:
|
|
lVar17 = lVar17 + -1;
|
|
lVar21 = lVar21 + -0x10;
|
|
}
|
|
else {
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4d20;
|
|
local_1ad8 = FUN_14006b3a0(piVar19);
|
|
if (local_1ad8) {
|
|
local_1ad0[0] = local_1af4;
|
|
local_1ac8 = local_1a48;
|
|
local_1ac0 = local_1af8._1_1_;
|
|
local_1abc = 0xffffffff;
|
|
local_1ab8 = (undefined1)local_1af8;
|
|
local_1ab7 = 0;
|
|
pcVar12 = (char *)(local_1af0 + 0x700);
|
|
param_4 = (uint **)local_1ad0;
|
|
puVar24 = local_1968;
|
|
uVar28 = (uint)local_1ae8;
|
|
puVar18 = (undefined1 *)(local_1ae8 & 0xffffffff);
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4d76;
|
|
FUN_1400da140(pcVar12,uVar28,(longlong)puVar24,(uint *)param_4);
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4d7e;
|
|
FUN_14006b3e0((longlong)piVar19);
|
|
local_1ad8 = false;
|
|
lVar13 = local_1af0 + 0xc0;
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4d93;
|
|
FUN_1400d8970(lVar13);
|
|
pwVar16 = pwVar22 + lVar26 * 8;
|
|
pwVar16[0] = L'\0';
|
|
pwVar16[1] = L'\0';
|
|
pwVar16[2] = L'\0';
|
|
pwVar16[3] = L'\0';
|
|
*(undefined8 *)(pwVar22 + lVar26 * 8) =
|
|
*(undefined8 *)(lVar21 + (longlong)pwVar22);
|
|
*(undefined8 *)(pwVar22 + lVar26 * 8 + 4) =
|
|
*(undefined8 *)(lVar21 + 8 + (longlong)pwVar22);
|
|
goto LAB_1400c4e33;
|
|
}
|
|
}
|
|
lVar26 = lVar26 + 1;
|
|
plVar27 = local_1a98;
|
|
} while (lVar26 < lVar17);
|
|
}
|
|
if ((pwVar22 != (wchar_t *)0x0) && (*(int *)(pwVar22 + -8) == 0xdddd)) {
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4e7f;
|
|
free(pwVar22 + -8);
|
|
}
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4e8c;
|
|
FUN_14007ca50((longlong)local_1968,puVar18,puVar24,param_4);
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4e99;
|
|
FUN_1400bc470(local_1a28);
|
|
local_1ae0 = &local_1a10;
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4eb1;
|
|
FUN_1400d1800(&local_1a10);
|
|
if (local_1a08 != 0) {
|
|
if (local_19fc < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar20 + -8) = &UNK_1400c4eca;
|
|
FUN_14006be00();
|
|
}
|
|
local_1a00 = 0;
|
|
}
|
|
local_1ae0 = &local_1a78;
|
|
*(undefined8 *)(puVar20 + -8) = 0x1400c4ee8;
|
|
FUN_1400d1800(&local_1a78);
|
|
puVar18 = puVar20;
|
|
if (local_1a70 != 0) {
|
|
if (local_1a64 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar20 + -8) = &UNK_1400c4f01;
|
|
FUN_14006be00();
|
|
}
|
|
local_1a68 = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (plVar27 == (longlong *)0x0) goto LAB_1400c4f4f;
|
|
if (local_1aa0 == (longlong *)0x0) goto LAB_1400c4f47;
|
|
lVar17 = *local_1aa0;
|
|
plVar14 = local_1aa0;
|
|
}
|
|
pcVar3 = *(code **)(lVar17 + 0x18);
|
|
*(undefined8 *)(puVar18 + -8) = 0x1400c4f45;
|
|
(*pcVar3)(plVar14,plVar27);
|
|
LAB_1400c4f4f:
|
|
*(undefined8 *)(puVar18 + -8) = 0x1400c4f5e;
|
|
return;
|
|
}
|
|
|