387 lines
12 KiB
C
387 lines
12 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x14007e330 FUN_14007e330
|
|
* 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,0x00014007e81b) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014007e6bf) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014007e97b) */
|
|
|
|
void FUN_14007e330(SIZE_T *param_1,wchar_t *param_2,SIZE_T param_3,undefined *param_4)
|
|
|
|
{
|
|
code *pcVar1;
|
|
longlong lVar2;
|
|
int *piVar3;
|
|
longlong lVar4;
|
|
ulonglong uVar5;
|
|
undefined4 *puVar6;
|
|
longlong *plVar7;
|
|
ulonglong uVar8;
|
|
longlong lVar9;
|
|
undefined1 *puVar10;
|
|
undefined1 *puVar11;
|
|
undefined1 *puVar12;
|
|
undefined1 *puVar13;
|
|
int iVar14;
|
|
longlong lVar15;
|
|
SIZE_T SVar16;
|
|
undefined8 *puVar17;
|
|
longlong *plVar18;
|
|
double dVar19;
|
|
undefined1 auStack_a8 [32];
|
|
int *local_88;
|
|
bool local_80;
|
|
longlong *local_78;
|
|
int *local_70;
|
|
undefined1 local_68;
|
|
SIZE_T local_60;
|
|
SIZE_T local_58;
|
|
undefined8 local_50;
|
|
ulonglong local_48;
|
|
|
|
puVar10 = auStack_a8;
|
|
puVar13 = auStack_a8;
|
|
local_50 = 0xfffffffffffffffe;
|
|
local_48 = DAT_1401ac5a0 ^ (ulonglong)&local_88;
|
|
piVar3 = (int *)(**(code **)(*param_1 + 0x58))();
|
|
local_70 = piVar3;
|
|
FUN_14006b350(piVar3);
|
|
local_68 = 1;
|
|
if (DAT_1401b42cf != '\0') {
|
|
param_3 = *param_1;
|
|
param_2 = L"Proud::CNetServerImpl::TcpAndUdp_DoForLongInterval";
|
|
(**(code **)(param_3 + 200))(param_1);
|
|
}
|
|
lVar4 = (longlong)(int)param_1[0xdc];
|
|
puVar17 = (undefined8 *)0x0;
|
|
if (0 < (int)param_1[0xdc]) {
|
|
uVar8 = lVar4 * 8 + 0x10;
|
|
if (uVar8 < 0x401) {
|
|
uVar5 = lVar4 * 8 + 0x1f;
|
|
if (uVar5 <= uVar8) {
|
|
uVar5 = 0xffffffffffffff0;
|
|
}
|
|
lVar9 = -(uVar5 & 0xfffffffffffffff0);
|
|
puVar10 = auStack_a8 + lVar9;
|
|
puVar6 = (undefined4 *)((longlong)&local_88 + lVar9);
|
|
puVar17 = (undefined8 *)0x0;
|
|
puVar13 = auStack_a8 + lVar9;
|
|
if (puVar6 != (undefined4 *)0x0) {
|
|
*puVar6 = 0xcccc;
|
|
LAB_14007e41e:
|
|
puVar17 = (undefined8 *)(puVar6 + 4);
|
|
puVar13 = puVar10;
|
|
}
|
|
}
|
|
else {
|
|
puVar6 = malloc(uVar8);
|
|
puVar17 = (undefined8 *)0x0;
|
|
puVar13 = auStack_a8;
|
|
if (puVar6 != (undefined4 *)0x0) {
|
|
*puVar6 = 0xdddd;
|
|
goto LAB_14007e41e;
|
|
}
|
|
}
|
|
iVar14 = 0;
|
|
lVar9 = 0;
|
|
piVar3 = local_70;
|
|
if (0 < lVar4) {
|
|
do {
|
|
if ((lVar9 < 0) || ((int)param_1[0xdc] <= iVar14)) {
|
|
/* WARNING: Subroutine does not return */
|
|
*(undefined **)(puVar13 + -8) = &UNK_14007e46f;
|
|
FUN_14006be30(uVar8,param_2,param_3,param_4);
|
|
}
|
|
plVar18 = *(longlong **)(param_1[0xdb] + lVar9 * 8);
|
|
lVar15 = 0;
|
|
if (plVar18 != (longlong *)0x0) {
|
|
lVar15 = *plVar18;
|
|
}
|
|
uVar8 = lVar15 + 0x40;
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e45a;
|
|
FUN_1400d8960(uVar8);
|
|
puVar17[lVar9] = lVar15;
|
|
iVar14 = iVar14 + 1;
|
|
lVar9 = lVar9 + 1;
|
|
piVar3 = local_70;
|
|
} while (lVar9 < lVar4);
|
|
}
|
|
}
|
|
local_58 = param_1[0x193];
|
|
plVar18 = (longlong *)0x0;
|
|
if (0 < (int)local_58) {
|
|
lVar9 = (longlong)(int)local_58 * 8;
|
|
uVar8 = lVar9 + 0x10;
|
|
if (uVar8 < 0x401) {
|
|
uVar5 = lVar9 + 0x1f;
|
|
if (uVar5 <= uVar8) {
|
|
uVar5 = 0xffffffffffffff0;
|
|
}
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e4bc;
|
|
lVar9 = -(uVar5 & 0xfffffffffffffff0);
|
|
puVar11 = puVar13 + lVar9;
|
|
puVar6 = (undefined4 *)(puVar13 + lVar9 + 0x20);
|
|
plVar18 = (longlong *)0x0;
|
|
puVar13 = puVar13 + lVar9;
|
|
if (puVar6 != (undefined4 *)0x0) {
|
|
*puVar6 = 0xcccc;
|
|
puVar13 = puVar11;
|
|
LAB_14007e4e6:
|
|
plVar18 = (longlong *)(puVar6 + 4);
|
|
}
|
|
}
|
|
else {
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e4d8;
|
|
puVar6 = malloc(uVar8);
|
|
plVar18 = (longlong *)0x0;
|
|
if (puVar6 != (undefined4 *)0x0) {
|
|
*puVar6 = 0xdddd;
|
|
goto LAB_14007e4e6;
|
|
}
|
|
}
|
|
plVar7 = plVar18;
|
|
if (param_1[0x193] == 0) {
|
|
SVar16 = 0;
|
|
}
|
|
else {
|
|
SVar16 = param_1[0x191];
|
|
}
|
|
for (; piVar3 = local_70, SVar16 != 0; SVar16 = *(SIZE_T *)(SVar16 + 0x10)) {
|
|
lVar9 = *(longlong *)(SVar16 + 8);
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e517;
|
|
FUN_1400d8960(lVar9 + 0xc0);
|
|
*plVar7 = lVar9;
|
|
plVar7 = plVar7 + 1;
|
|
}
|
|
}
|
|
local_60 = param_1[0x2e1];
|
|
local_78 = (longlong *)0x0;
|
|
if ((int)local_60 < 1) goto LAB_14007e5e6;
|
|
lVar9 = (longlong)(int)local_60 * 8;
|
|
uVar8 = lVar9 + 0x10;
|
|
if (uVar8 < 0x401) {
|
|
uVar5 = lVar9 + 0x1f;
|
|
if (uVar5 <= uVar8) {
|
|
uVar5 = 0xffffffffffffff0;
|
|
}
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e571;
|
|
lVar9 = -(uVar5 & 0xfffffffffffffff0);
|
|
puVar12 = puVar13 + lVar9;
|
|
plVar7 = (longlong *)(puVar13 + lVar9 + 0x20);
|
|
puVar13 = puVar13 + lVar9;
|
|
local_78 = plVar7;
|
|
if (plVar7 != (longlong *)0x0) {
|
|
*(undefined4 *)plVar7 = 0xcccc;
|
|
puVar13 = puVar12;
|
|
LAB_14007e59f:
|
|
local_78 = plVar7 + 2;
|
|
}
|
|
}
|
|
else {
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e590;
|
|
plVar7 = malloc(uVar8);
|
|
local_78 = plVar7;
|
|
if (plVar7 != (longlong *)0x0) {
|
|
*(undefined4 *)plVar7 = 0xdddd;
|
|
goto LAB_14007e59f;
|
|
}
|
|
}
|
|
plVar7 = local_78;
|
|
if (param_1[0x2e1] == 0) {
|
|
SVar16 = 0;
|
|
}
|
|
else {
|
|
SVar16 = param_1[0x2df];
|
|
}
|
|
for (; piVar3 = local_70, SVar16 != 0; SVar16 = *(SIZE_T *)(SVar16 + 0x18)) {
|
|
lVar9 = *(longlong *)(SVar16 + 0x10);
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e5d5;
|
|
FUN_1400d8960(lVar9 + 0xc0);
|
|
*plVar7 = lVar9;
|
|
plVar7 = plVar7 + 1;
|
|
}
|
|
LAB_14007e5e6:
|
|
pcVar1 = *(code **)(param_1[0x23] + 8);
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e5f3;
|
|
dVar19 = (double)(*pcVar1)();
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e5ff;
|
|
FUN_14006b3e0((longlong)piVar3);
|
|
local_68 = 0;
|
|
if (puVar17 != (undefined8 *)0x0) {
|
|
while ((0 < lVar4 && (lVar9 = 0, 0 < lVar4))) {
|
|
do {
|
|
lVar15 = puVar17[lVar9];
|
|
pcVar1 = *(code **)(*(longlong *)(lVar15 + 0x88) + 0x10);
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e631;
|
|
piVar3 = (int *)(*pcVar1)();
|
|
local_80 = false;
|
|
local_88 = piVar3;
|
|
if (lVar9 == 0) {
|
|
local_80 = true;
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e68b;
|
|
FUN_14006b350(piVar3);
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e697;
|
|
FUN_1400d8c60(lVar15,param_2,param_3,param_4);
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e69f;
|
|
FUN_14006b3e0((longlong)piVar3);
|
|
local_80 = false;
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e6af;
|
|
FUN_1400d8970(lVar15 + 0x40);
|
|
*puVar17 = puVar17[lVar4 + -1];
|
|
LAB_14007e6b7:
|
|
lVar4 = lVar4 + -1;
|
|
}
|
|
else {
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e649;
|
|
local_80 = FUN_14006b3a0(piVar3);
|
|
if (local_80) {
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e65f;
|
|
FUN_1400d8c60(lVar15,param_2,param_3,param_4);
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e667;
|
|
FUN_14006b3e0((longlong)piVar3);
|
|
local_80 = false;
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e677;
|
|
FUN_1400d8970(lVar15 + 0x40);
|
|
puVar17[lVar9] = puVar17[lVar4 + -1];
|
|
goto LAB_14007e6b7;
|
|
}
|
|
}
|
|
lVar9 = lVar9 + 1;
|
|
} while (lVar9 < lVar4);
|
|
}
|
|
if (*(int *)(puVar17 + -2) == 0xdddd) {
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e6f2;
|
|
free(puVar17 + -2);
|
|
}
|
|
}
|
|
if (plVar18 != (longlong *)0x0) {
|
|
lVar4 = (longlong)(int)local_58;
|
|
while ((0 < lVar4 && (lVar9 = 0, 0 < lVar4))) {
|
|
do {
|
|
lVar15 = plVar18[lVar9];
|
|
pcVar1 = *(code **)(*(longlong *)(lVar15 + 0x108) + 0x10);
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e732;
|
|
piVar3 = (int *)(*pcVar1)();
|
|
local_80 = false;
|
|
local_88 = piVar3;
|
|
if (lVar9 == 0) {
|
|
local_80 = true;
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e7bc;
|
|
FUN_14006b350(piVar3);
|
|
lVar2 = *(longlong *)(lVar15 + 0x748);
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e7cd;
|
|
FUN_1400d83e0(lVar2,dVar19);
|
|
if ((*(longlong **)(lVar15 + 0x760) != (longlong *)0x0) &&
|
|
(lVar2 = **(longlong **)(lVar15 + 0x760), lVar2 != 0)) {
|
|
lVar2 = *(longlong *)(lVar2 + 0x168);
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e7f2;
|
|
FUN_1400d5d10(lVar2,dVar19,param_3,param_4);
|
|
}
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e7fa;
|
|
FUN_14006b3e0((longlong)piVar3);
|
|
local_80 = false;
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e80c;
|
|
FUN_1400d8970(lVar15 + 0xc0);
|
|
*plVar18 = plVar18[lVar4 + -1];
|
|
LAB_14007e814:
|
|
lVar4 = lVar4 + -1;
|
|
}
|
|
else {
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e74a;
|
|
local_80 = FUN_14006b3a0(piVar3);
|
|
if (local_80) {
|
|
lVar2 = *(longlong *)(lVar15 + 0x748);
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e769;
|
|
FUN_1400d83e0(lVar2,dVar19);
|
|
if ((*(longlong **)(lVar15 + 0x760) != (longlong *)0x0) &&
|
|
(lVar2 = **(longlong **)(lVar15 + 0x760), lVar2 != 0)) {
|
|
lVar2 = *(longlong *)(lVar2 + 0x168);
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e78e;
|
|
FUN_1400d5d10(lVar2,dVar19,param_3,param_4);
|
|
}
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e796;
|
|
FUN_14006b3e0((longlong)piVar3);
|
|
local_80 = false;
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e7a8;
|
|
FUN_1400d8970(lVar15 + 0xc0);
|
|
plVar18[lVar9] = plVar18[lVar4 + -1];
|
|
goto LAB_14007e814;
|
|
}
|
|
}
|
|
lVar9 = lVar9 + 1;
|
|
} while (lVar9 < lVar4);
|
|
}
|
|
if ((int)plVar18[-2] == 0xdddd) {
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e84e;
|
|
free(plVar18 + -2);
|
|
}
|
|
}
|
|
plVar18 = local_78;
|
|
if (local_78 != (longlong *)0x0) {
|
|
lVar4 = (longlong)(int)local_60;
|
|
while ((0 < lVar4 && (lVar9 = 0, 0 < lVar4))) {
|
|
do {
|
|
lVar15 = plVar18[lVar9];
|
|
pcVar1 = *(code **)(*(longlong *)(lVar15 + 0x108) + 0x10);
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e892;
|
|
piVar3 = (int *)(*pcVar1)();
|
|
local_80 = false;
|
|
local_88 = piVar3;
|
|
if (lVar9 == 0) {
|
|
local_80 = true;
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e91c;
|
|
FUN_14006b350(piVar3);
|
|
lVar2 = *(longlong *)(lVar15 + 0x748);
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e92d;
|
|
FUN_1400d83e0(lVar2,dVar19);
|
|
if ((*(longlong **)(lVar15 + 0x760) != (longlong *)0x0) &&
|
|
(lVar2 = **(longlong **)(lVar15 + 0x760), lVar2 != 0)) {
|
|
lVar2 = *(longlong *)(lVar2 + 0x168);
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e952;
|
|
FUN_1400d5d10(lVar2,dVar19,param_3,param_4);
|
|
}
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e95a;
|
|
FUN_14006b3e0((longlong)piVar3);
|
|
local_80 = false;
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e96c;
|
|
FUN_1400d8970(lVar15 + 0xc0);
|
|
*plVar18 = plVar18[lVar4 + -1];
|
|
LAB_14007e974:
|
|
lVar4 = lVar4 + -1;
|
|
}
|
|
else {
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e8aa;
|
|
local_80 = FUN_14006b3a0(piVar3);
|
|
if (local_80) {
|
|
lVar2 = *(longlong *)(lVar15 + 0x748);
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e8c9;
|
|
FUN_1400d83e0(lVar2,dVar19);
|
|
if ((*(longlong **)(lVar15 + 0x760) != (longlong *)0x0) &&
|
|
(lVar2 = **(longlong **)(lVar15 + 0x760), lVar2 != 0)) {
|
|
lVar2 = *(longlong *)(lVar2 + 0x168);
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e8ee;
|
|
FUN_1400d5d10(lVar2,dVar19,param_3,param_4);
|
|
}
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e8f6;
|
|
FUN_14006b3e0((longlong)piVar3);
|
|
local_80 = false;
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e908;
|
|
FUN_1400d8970(lVar15 + 0xc0);
|
|
plVar18[lVar9] = plVar18[lVar4 + -1];
|
|
goto LAB_14007e974;
|
|
}
|
|
}
|
|
lVar9 = lVar9 + 1;
|
|
} while (lVar9 < lVar4);
|
|
}
|
|
if ((int)plVar18[-2] == 0xdddd) {
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e9ae;
|
|
free(plVar18 + -2);
|
|
}
|
|
}
|
|
*(undefined8 *)(puVar13 + -8) = 0x14007e9bb;
|
|
return;
|
|
}
|
|
|