395 lines
14 KiB
C
395 lines
14 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x1400babb0 FUN_1400babb0
|
|
* Pseudocode, not original source. */
|
|
|
|
void FUN_1400babb0(longlong *param_1,double param_2,undefined *param_3,undefined *param_4)
|
|
|
|
{
|
|
undefined8 *puVar1;
|
|
double dVar2;
|
|
bool bVar3;
|
|
DWORD DVar4;
|
|
DWORD DVar5;
|
|
undefined *puVar6;
|
|
undefined *puVar7;
|
|
undefined **ppuVar8;
|
|
int *piVar9;
|
|
longlong *plVar10;
|
|
int *piVar11;
|
|
longlong *plVar12;
|
|
undefined8 in_RDX;
|
|
wchar_t *pwVar13;
|
|
char cVar14;
|
|
int *piVar15;
|
|
SIZE_T SVar16;
|
|
longlong lVar17;
|
|
undefined *puVar18;
|
|
undefined8 uVar19;
|
|
undefined *local_res10;
|
|
undefined *local_res18;
|
|
undefined *local_res20;
|
|
undefined *local_168;
|
|
int *local_160;
|
|
char local_158;
|
|
longlong *local_150;
|
|
undefined1 local_148;
|
|
undefined *local_140;
|
|
undefined *local_138;
|
|
undefined *local_130;
|
|
undefined *local_128;
|
|
undefined *local_120;
|
|
undefined *local_118;
|
|
undefined **local_110;
|
|
undefined1 local_108;
|
|
undefined **local_100;
|
|
undefined1 local_f8;
|
|
int *local_f0;
|
|
undefined1 local_e8;
|
|
undefined8 local_e0;
|
|
int *local_d8;
|
|
undefined1 local_d0;
|
|
int *local_c8;
|
|
undefined1 local_c0;
|
|
undefined **local_b8;
|
|
undefined1 local_b0;
|
|
int *local_a8;
|
|
undefined1 local_a0;
|
|
int *local_98;
|
|
undefined1 local_90;
|
|
int *local_88;
|
|
undefined1 local_80;
|
|
int *local_78;
|
|
undefined1 local_70;
|
|
|
|
local_e0 = 0xfffffffffffffffe;
|
|
local_150 = param_1 + 0x95;
|
|
local_res18 = param_3;
|
|
FUN_14006b350((int *)local_150);
|
|
local_148 = 1;
|
|
(**(code **)(param_1[1] + 0x18))();
|
|
bVar3 = false;
|
|
puVar18 = (undefined *)0x0;
|
|
puVar7 = puVar18;
|
|
if (param_1[0xad] != 0) {
|
|
puVar7 = *(undefined **)(param_1[0xad] + 0x38);
|
|
}
|
|
FUN_14006b350((int *)(puVar7 + 0x10));
|
|
puVar6 = puVar18;
|
|
if (param_1[0xad] != 0) {
|
|
puVar6 = *(undefined **)(param_1[0xad] + 0x38);
|
|
}
|
|
*(int *)(puVar6 + 0x288) = *(int *)(puVar6 + 0x288) + 1;
|
|
LOCK();
|
|
*(int *)(param_1 + 0xa2) = (int)param_1[0xa2] + 1;
|
|
UNLOCK();
|
|
FUN_14006b3e0((longlong)(puVar7 + 0x10));
|
|
DVar4 = GetTickCount();
|
|
dVar2 = param_2 * 2.0 * 1000.0;
|
|
if (dVar2 <= 100000.0) {
|
|
dVar2 = 100000.0;
|
|
}
|
|
if (((char)param_1[0x2e4] != '\0') || ((int)param_1[0xcb] != 0)) {
|
|
puVar7 = puVar18;
|
|
if (param_1[0xad] != 0) {
|
|
puVar7 = *(undefined **)(param_1[0xad] + 0x38);
|
|
}
|
|
piVar15 = (int *)(puVar7 + 0x10);
|
|
local_88 = piVar15;
|
|
FUN_14006b350(piVar15);
|
|
local_80 = 1;
|
|
param_4 = (undefined *)(ulonglong)*(uint *)(param_1 + 0x2a1);
|
|
param_3 = &DAT_14013eba0;
|
|
in_RDX = 0;
|
|
FUN_1400af0e0((longlong)(param_1 + -0xe),0,
|
|
L"Client %d: CNetClient.Disconnect를 사용자가 콜 하였습니다.",param_4);
|
|
FUN_14006b3e0((longlong)piVar15);
|
|
}
|
|
plVar12 = param_1 + -0xe;
|
|
puVar7 = puVar18;
|
|
do {
|
|
piVar15 = (int *)(**(code **)(*plVar12 + 0x58))(plVar12);
|
|
local_160 = piVar15;
|
|
FUN_14006b350(piVar15);
|
|
local_158 = '\x01';
|
|
if (((longlong *)param_1[0xac] == (longlong *)0x0) ||
|
|
(lVar17 = *(longlong *)param_1[0xac], lVar17 == 0)) {
|
|
if ((((longlong *)param_1[0x2a0] != (longlong *)0x0) && (*(longlong *)param_1[0x2a0] != 0)) ||
|
|
(((longlong *)param_1[0x296] != (longlong *)0x0 && (*(longlong *)param_1[0x296] != 0)))) {
|
|
FUN_14006cb70(0,in_RDX,param_3,param_4);
|
|
local_140 = PTR_DAT_1401ac010;
|
|
plVar10 = FUN_14006c8a0((longlong *)&local_118,in_RDX,param_3,param_4);
|
|
param_3 = (undefined *)*plVar10;
|
|
if ((undefined *)*plVar10 == (undefined *)0x0) {
|
|
param_3 = PTR_DAT_1401ac010;
|
|
}
|
|
pwVar13 = L"Unstability in Disconnect #1! Process=%s";
|
|
ppuVar8 = &local_140;
|
|
FUN_140053d20((longlong *)ppuVar8,L"Unstability in Disconnect #1! Process=%s",param_3,
|
|
param_4);
|
|
if (((local_118 != (undefined *)0x0) && (local_118 != PTR_DAT_1401ac010)) &&
|
|
(local_118 + -8 != (undefined *)0x0)) {
|
|
ppuVar8 = (undefined **)FUN_14006cb70(ppuVar8,pwVar13,param_3,param_4);
|
|
local_b8 = ppuVar8;
|
|
FUN_14006b350((int *)ppuVar8);
|
|
local_b0 = 1;
|
|
piVar9 = (int *)(local_118 + -4);
|
|
*piVar9 = *piVar9 + -1;
|
|
if (*piVar9 == 0) {
|
|
FUN_14006cc60(local_118 + -8);
|
|
}
|
|
FUN_14006b3e0((longlong)ppuVar8);
|
|
}
|
|
FUN_14006cb70(ppuVar8,pwVar13,param_3,param_4);
|
|
puVar7 = local_140;
|
|
local_168 = PTR_DAT_1401ac010;
|
|
if (PTR_DAT_1401ac010 == (undefined *)0x0) {
|
|
local_168 = puVar18;
|
|
}
|
|
if (local_140 != PTR_DAT_1401ac010) {
|
|
piVar9 = (int *)FUN_14006cb70(ppuVar8,pwVar13,param_3,param_4);
|
|
local_98 = piVar9;
|
|
FUN_14006b350(piVar9);
|
|
local_90 = 1;
|
|
FUN_1400031e0((longlong *)&local_168,pwVar13,param_3,param_4);
|
|
local_168 = puVar7;
|
|
if (((puVar7 != PTR_DAT_1401ac010) && (puVar7 != (undefined *)0x0)) &&
|
|
(puVar7 != (undefined *)0x8)) {
|
|
*(int *)(puVar7 + -4) = *(int *)(puVar7 + -4) + 1;
|
|
}
|
|
FUN_14006b3e0((longlong)piVar9);
|
|
}
|
|
ppuVar8 = &local_168;
|
|
FUN_14006fa80((longlong *)ppuVar8,pwVar13,param_3,param_4);
|
|
if (((puVar7 != (undefined *)0x0) && (puVar7 != PTR_DAT_1401ac010)) &&
|
|
(puVar7 + -8 != (undefined *)0x0)) {
|
|
piVar11 = (int *)FUN_14006cb70(ppuVar8,pwVar13,param_3,param_4);
|
|
local_78 = piVar11;
|
|
FUN_14006b350(piVar11);
|
|
local_70 = 1;
|
|
piVar9 = (int *)(puVar7 + -4);
|
|
*piVar9 = *piVar9 + -1;
|
|
if (*piVar9 == 0) {
|
|
FUN_14006cc60(puVar7 + -8);
|
|
}
|
|
FUN_14006b3e0((longlong)piVar11);
|
|
}
|
|
}
|
|
FUN_1400b7b20((longlong)plVar12,'\x01',(SIZE_T)param_3,param_4);
|
|
FUN_14006b3e0((longlong)piVar15);
|
|
LAB_1400bb39d:
|
|
FUN_14006b3e0((longlong)local_150);
|
|
return;
|
|
}
|
|
if ((*(int *)(lVar17 + 0x100) == 5) && (param_1[0x2d5] == 0)) {
|
|
FUN_1400b7b20((longlong)plVar12,'\x01',(SIZE_T)param_3,param_4);
|
|
FUN_14006b3e0((longlong)local_160);
|
|
goto LAB_1400bb39d;
|
|
}
|
|
if (DAT_1401b45d0 != '\0') {
|
|
FUN_1400b7b20((longlong)plVar12,'\x01',(SIZE_T)param_3,param_4);
|
|
FUN_14006b3e0((longlong)local_160);
|
|
goto LAB_1400bb39d;
|
|
}
|
|
puVar6 = puVar18;
|
|
if (param_1[0xad] != 0) {
|
|
puVar6 = *(undefined **)(param_1[0xad] + 0x38);
|
|
}
|
|
if (*(longlong *)(puVar6 + 0x2b8) == 0) {
|
|
puVar7 = puVar18;
|
|
if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) {
|
|
puVar7 = *(undefined **)param_1[0xac];
|
|
}
|
|
uVar19 = 5;
|
|
FUN_1400dfd60((longlong)puVar7,5);
|
|
FUN_14006cb70(puVar7,uVar19,param_3,param_4);
|
|
local_138 = PTR_DAT_1401ac010;
|
|
plVar10 = FUN_14006c8a0((longlong *)&local_128,uVar19,param_3,param_4);
|
|
puVar7 = (undefined *)*plVar10;
|
|
if ((undefined *)*plVar10 == (undefined *)0x0) {
|
|
puVar7 = PTR_DAT_1401ac010;
|
|
}
|
|
pwVar13 = L"Unstability in Disconnect #2! Process=%s";
|
|
ppuVar8 = &local_138;
|
|
FUN_140053d20((longlong *)ppuVar8,L"Unstability in Disconnect #2! Process=%s",puVar7,param_4);
|
|
if (((local_128 != (undefined *)0x0) && (local_128 != PTR_DAT_1401ac010)) &&
|
|
(local_128 + -8 != (undefined *)0x0)) {
|
|
ppuVar8 = (undefined **)FUN_14006cb70(ppuVar8,pwVar13,puVar7,param_4);
|
|
local_100 = ppuVar8;
|
|
FUN_14006b350((int *)ppuVar8);
|
|
local_f8 = 1;
|
|
piVar15 = (int *)(local_128 + -4);
|
|
*piVar15 = *piVar15 + -1;
|
|
if (*piVar15 == 0) {
|
|
FUN_14006cc60(local_128 + -8);
|
|
}
|
|
FUN_14006b3e0((longlong)ppuVar8);
|
|
}
|
|
FUN_14006cb70(ppuVar8,pwVar13,puVar7,param_4);
|
|
puVar6 = local_138;
|
|
local_res20 = PTR_DAT_1401ac010;
|
|
if (PTR_DAT_1401ac010 == (undefined *)0x0) {
|
|
local_res20 = puVar18;
|
|
}
|
|
if (local_138 != PTR_DAT_1401ac010) {
|
|
piVar15 = (int *)FUN_14006cb70(ppuVar8,pwVar13,puVar7,param_4);
|
|
local_f0 = piVar15;
|
|
FUN_14006b350(piVar15);
|
|
local_e8 = 1;
|
|
FUN_1400031e0((longlong *)&local_res20,pwVar13,puVar7,param_4);
|
|
local_res20 = puVar6;
|
|
if (((puVar6 != PTR_DAT_1401ac010) && (puVar6 != (undefined *)0x0)) &&
|
|
(puVar6 != (undefined *)0x8)) {
|
|
*(int *)(puVar6 + -4) = *(int *)(puVar6 + -4) + 1;
|
|
}
|
|
FUN_14006b3e0((longlong)piVar15);
|
|
}
|
|
ppuVar8 = &local_res20;
|
|
FUN_14006fa80((longlong *)ppuVar8,pwVar13,puVar7,param_4);
|
|
if (((puVar6 != (undefined *)0x0) && (puVar6 != PTR_DAT_1401ac010)) &&
|
|
(puVar6 + -8 != (undefined *)0x0)) {
|
|
piVar9 = (int *)FUN_14006cb70(ppuVar8,pwVar13,puVar7,param_4);
|
|
local_d8 = piVar9;
|
|
FUN_14006b350(piVar9);
|
|
local_d0 = 1;
|
|
piVar15 = (int *)(puVar6 + -4);
|
|
*piVar15 = *piVar15 + -1;
|
|
if (*piVar15 == 0) {
|
|
FUN_14006cc60(puVar6 + -8);
|
|
}
|
|
FUN_14006b3e0((longlong)piVar9);
|
|
}
|
|
FUN_1400b7b20((longlong)plVar12,'\x01',(SIZE_T)puVar7,param_4);
|
|
FUN_14006b3e0((longlong)local_160);
|
|
goto LAB_1400bb39d;
|
|
}
|
|
DVar5 = GetTickCount();
|
|
if (dVar2 < (double)(DVar5 - DVar4)) {
|
|
FUN_14006cb70(puVar6,in_RDX,param_3,param_4);
|
|
local_130 = PTR_DAT_1401ac010;
|
|
FUN_14006c8a0((longlong *)&local_120,in_RDX,param_3,param_4);
|
|
puVar7 = puVar18;
|
|
if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) {
|
|
puVar7 = *(undefined **)param_1[0xac];
|
|
}
|
|
lVar17 = param_1[0x2d5];
|
|
SVar16 = (SIZE_T)*(uint *)(puVar7 + 0x100);
|
|
pwVar13 =
|
|
L"CNetClient.Disconnect seems to be freezed ## State=%d##GarbageCount=%d##Process=%s";
|
|
ppuVar8 = &local_130;
|
|
FUN_140053d20((longlong *)ppuVar8,
|
|
L"CNetClient.Disconnect seems to be freezed ## State=%d##GarbageCount=%d##Process=%s"
|
|
,SVar16,lVar17);
|
|
if (((local_120 != (undefined *)0x0) && (local_120 != PTR_DAT_1401ac010)) &&
|
|
(local_120 + -8 != (undefined *)0x0)) {
|
|
ppuVar8 = (undefined **)FUN_14006cb70(ppuVar8,pwVar13,SVar16,lVar17);
|
|
local_110 = ppuVar8;
|
|
FUN_14006b350((int *)ppuVar8);
|
|
local_108 = 1;
|
|
piVar15 = (int *)(local_120 + -4);
|
|
*piVar15 = *piVar15 + -1;
|
|
if (*piVar15 == 0) {
|
|
FUN_14006cc60(local_120 + -8);
|
|
}
|
|
FUN_14006b3e0((longlong)ppuVar8);
|
|
}
|
|
FUN_14006cb70(ppuVar8,pwVar13,SVar16,lVar17);
|
|
puVar7 = local_130;
|
|
local_res10 = PTR_DAT_1401ac010;
|
|
if (PTR_DAT_1401ac010 == (undefined *)0x0) {
|
|
local_res10 = puVar18;
|
|
}
|
|
if (local_130 != PTR_DAT_1401ac010) {
|
|
piVar15 = (int *)FUN_14006cb70(ppuVar8,pwVar13,SVar16,lVar17);
|
|
local_a8 = piVar15;
|
|
FUN_14006b350(piVar15);
|
|
local_a0 = 1;
|
|
FUN_1400031e0((longlong *)&local_res10,pwVar13,SVar16,lVar17);
|
|
local_res10 = puVar7;
|
|
if (((puVar7 != PTR_DAT_1401ac010) && (puVar7 != (undefined *)0x0)) &&
|
|
(puVar7 != (undefined *)0x8)) {
|
|
*(int *)(puVar7 + -4) = *(int *)(puVar7 + -4) + 1;
|
|
}
|
|
FUN_14006b3e0((longlong)piVar15);
|
|
}
|
|
FUN_14006fa80((longlong *)&local_res10,pwVar13,SVar16,lVar17);
|
|
if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) {
|
|
puVar18 = *(undefined **)param_1[0xac];
|
|
}
|
|
uVar19 = 0;
|
|
FUN_1400dfd60((longlong)puVar18,5);
|
|
uVar19 = CONCAT71((int7)((ulonglong)uVar19 >> 8),1);
|
|
FUN_1400b7b20((longlong)plVar12,'\x01',SVar16,lVar17);
|
|
if (((puVar7 != (undefined *)0x0) && (puVar7 != PTR_DAT_1401ac010)) &&
|
|
(puVar7 + -8 != (undefined *)0x0)) {
|
|
piVar9 = (int *)FUN_14006cb70(plVar12,uVar19,SVar16,lVar17);
|
|
local_c8 = piVar9;
|
|
FUN_14006b350(piVar9);
|
|
local_c0 = 1;
|
|
piVar15 = (int *)(puVar7 + -4);
|
|
*piVar15 = *piVar15 + -1;
|
|
if (*piVar15 == 0) {
|
|
FUN_14006cc60(puVar7 + -8);
|
|
}
|
|
FUN_14006b3e0((longlong)piVar9);
|
|
}
|
|
FUN_14006b3e0((longlong)local_160);
|
|
goto LAB_1400bb39d;
|
|
}
|
|
if (!bVar3) {
|
|
bVar3 = true;
|
|
puVar6 = puVar18;
|
|
if (param_1[0xad] != 0) {
|
|
puVar6 = *(undefined **)(param_1[0xad] + 0x38);
|
|
}
|
|
FUN_14006b480((longlong)(puVar6 + 0x10));
|
|
puVar6 = puVar18;
|
|
if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) {
|
|
puVar6 = *(undefined **)param_1[0xac];
|
|
}
|
|
puVar1 = (undefined8 *)param_1[0xac];
|
|
if (*(int *)(puVar6 + 0x100) == 3) {
|
|
puVar6 = puVar18;
|
|
if (puVar1 != (undefined8 *)0x0) {
|
|
puVar6 = (undefined *)*puVar1;
|
|
}
|
|
uVar19 = (**(code **)(*param_1 + 0x1c0))(param_1);
|
|
*(undefined8 *)(puVar6 + 0xd0) = uVar19;
|
|
puVar6 = puVar18;
|
|
if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) {
|
|
puVar6 = *(undefined **)param_1[0xac];
|
|
}
|
|
*(double *)(puVar6 + 0xd8) = param_2;
|
|
param_3 = &DAT_1401b6110;
|
|
in_RDX = 1;
|
|
param_4 = local_res18;
|
|
(**(code **)(param_1[0x2f5] + 0x80))();
|
|
}
|
|
else {
|
|
puVar6 = puVar18;
|
|
if (puVar1 != (undefined8 *)0x0) {
|
|
puVar6 = (undefined *)*puVar1;
|
|
}
|
|
if (*(int *)(puVar6 + 0x100) < 3) {
|
|
puVar6 = puVar18;
|
|
if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) {
|
|
puVar6 = *(undefined **)param_1[0xac];
|
|
}
|
|
in_RDX = 4;
|
|
FUN_1400dfd60((longlong)puVar6,4);
|
|
}
|
|
}
|
|
}
|
|
piVar15 = local_160;
|
|
cVar14 = local_158;
|
|
if (0 < (int)puVar7) {
|
|
FUN_14006b3e0((longlong)local_160);
|
|
Sleep(10);
|
|
cVar14 = '\0';
|
|
}
|
|
puVar7 = (undefined *)(ulonglong)((int)puVar7 + 1);
|
|
if (cVar14 != '\0') {
|
|
FUN_14006b3e0((longlong)piVar15);
|
|
}
|
|
} while( true );
|
|
}
|
|
|