307 lines
10 KiB
C
307 lines
10 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x1400ca320 FUN_1400ca320
|
|
* Pseudocode, not original source. */
|
|
|
|
void FUN_1400ca320(IMAGE_DOS_HEADER *param_1,undefined8 param_2,IMAGE_DOS_HEADER *param_3,
|
|
IMAGE_DOS_HEADER *param_4)
|
|
|
|
{
|
|
int *piVar1;
|
|
byte bVar2;
|
|
uint uVar3;
|
|
short *psVar4;
|
|
bool bVar5;
|
|
HANDLE hThread;
|
|
undefined8 uVar6;
|
|
IMAGE_DOS_HEADER *pIVar7;
|
|
IMAGE_DOS_HEADER *pIVar8;
|
|
int *piVar9;
|
|
longlong lVar10;
|
|
IMAGE_DOS_HEADER *pIVar11;
|
|
IMAGE_DOS_HEADER *pIVar12;
|
|
int iVar13;
|
|
undefined4 *puVar15;
|
|
ulonglong uVar16;
|
|
short *psVar17;
|
|
ulonglong uVar18;
|
|
double dVar19;
|
|
char local_res10 [8];
|
|
longlong *local_res18;
|
|
short *local_res20;
|
|
undefined **local_108;
|
|
IMAGE_DOS_HEADER *local_100;
|
|
IMAGE_DOS_HEADER *local_f8;
|
|
undefined8 local_f0;
|
|
undefined8 local_e8;
|
|
undefined **local_e0;
|
|
longlong *local_d8;
|
|
LPVOID local_d0;
|
|
undefined8 local_c8;
|
|
word local_c0 [4];
|
|
undefined **local_b8;
|
|
longlong *local_b0;
|
|
LPVOID local_a8;
|
|
byte local_a0 [16];
|
|
IMAGE_DOS_HEADER *local_90;
|
|
undefined8 local_88;
|
|
uint local_80;
|
|
byte local_78 [8];
|
|
word local_70 [4];
|
|
undefined **local_68;
|
|
word local_60 [2];
|
|
word local_5c;
|
|
int *local_58;
|
|
byte local_50;
|
|
byte local_48 [16];
|
|
ulonglong uVar14;
|
|
|
|
local_48[0] = 0xfe;
|
|
local_48[1] = 0xff;
|
|
local_48[2] = 0xff;
|
|
local_48[3] = 0xff;
|
|
local_48[4] = 0xff;
|
|
local_48[5] = 0xff;
|
|
local_48[6] = 0xff;
|
|
local_48[7] = 0xff;
|
|
hThread = GetCurrentThread();
|
|
pIVar12 = (IMAGE_DOS_HEADER *)0x0;
|
|
SetThreadPriorityBoost(hThread,0);
|
|
pIVar11 = (IMAGE_DOS_HEADER *)local_res10;
|
|
FUN_1400f8570(pIVar11);
|
|
local_b8 = Proud::CFastArray<Proud::ISendIssueObject*___ptr64,0>::vftable;
|
|
uVar16 = 0;
|
|
local_b0 = (longlong *)0x0;
|
|
local_a8 = (LPVOID)0x0;
|
|
local_a0[0] = 0;
|
|
local_a0[1] = 0;
|
|
local_a0[2] = 0;
|
|
local_a0[3] = 0;
|
|
local_a0[4] = 0;
|
|
local_a0[5] = 0;
|
|
local_a0[6] = 0;
|
|
local_a0[7] = 0;
|
|
local_a0[8] = 0;
|
|
local_a0[9] = 0;
|
|
local_a0[10] = 0;
|
|
local_a0[0xb] = 0;
|
|
local_a0[0xc] = 0;
|
|
local_a0[0xd] = 0;
|
|
local_a0[0xe] = 0;
|
|
local_a0[0xf] = 0;
|
|
local_d8 = (longlong *)0x0;
|
|
local_d0 = (LPVOID)0x0;
|
|
local_c8._0_2_ = 0;
|
|
local_c8._2_2_ = 0;
|
|
local_c8._4_2_ = 0;
|
|
local_c8._6_2_ = 0;
|
|
local_e0 = Proud::CReceivedMessageList::vftable;
|
|
local_c0[0] = 1000;
|
|
local_c0[1] = 0;
|
|
local_c0[2] = 1;
|
|
local_c0[3] = 0;
|
|
bVar5 = FUN_14006c410(pIVar11,pIVar12,param_3,param_4);
|
|
if (bVar5) {
|
|
local_108 = Proud::CFastArray<Proud::CompletionStatus,0>::vftable;
|
|
local_100 = (IMAGE_DOS_HEADER *)0x0;
|
|
local_f8 = (IMAGE_DOS_HEADER *)0x0;
|
|
local_f0 = 0;
|
|
local_e8 = 0;
|
|
pIVar12 = (IMAGE_DOS_HEADER *)0xa;
|
|
FUN_1400c2510((longlong)&local_108,10,param_3,param_4);
|
|
local_res18 = (longlong *)((ulonglong)local_res18 & 0xffffffff00000000);
|
|
while (param_1[2].e_program[0] == 0) {
|
|
param_4 = (IMAGE_DOS_HEADER *)(ulonglong)DAT_1401ac068;
|
|
param_3 = (IMAGE_DOS_HEADER *)&local_res18;
|
|
uVar6 = FUN_140075840(*(char **)(*(longlong *)(param_1[2].e_program + 8) + 0x788),
|
|
(longlong *)&local_108,(uint *)param_3,param_4);
|
|
pIVar12 = *(IMAGE_DOS_HEADER **)(*(longlong *)(param_1[2].e_program + 8) + 0x118);
|
|
dVar19 = (double)(**(code **)&pIVar12->e_cparhdr)();
|
|
pIVar11 = *(IMAGE_DOS_HEADER **)(param_1[2].e_program + 8);
|
|
if (*(double *)(pIVar11[0x10].e_res_4_ + 2) <= dVar19 - *(double *)(param_1 + 2) &&
|
|
dVar19 - *(double *)(param_1 + 2) != *(double *)(pIVar11[0x10].e_res_4_ + 2)) {
|
|
*(double *)(param_1 + 2) = dVar19;
|
|
pIVar12 = (IMAGE_DOS_HEADER *)&local_b8;
|
|
pIVar11 = param_1;
|
|
FUN_1400c2170((longlong)param_1,(longlong)pIVar12,param_3,(longlong)param_4);
|
|
}
|
|
if (((char)uVar6 != '\0') && (uVar14 = uVar16, uVar18 = uVar16, (uint)local_res18 != 0)) {
|
|
do {
|
|
iVar13 = (int)uVar14;
|
|
if ((iVar13 < 0) || ((int)local_f0 <= iVar13)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(pIVar11,pIVar12,param_3,param_4);
|
|
}
|
|
pIVar12 = (IMAGE_DOS_HEADER *)(local_f8->e_magic + (longlong)iVar13 * 0x38);
|
|
param_3 = (IMAGE_DOS_HEADER *)&local_e0;
|
|
pIVar11 = param_1;
|
|
FUN_1400ca250((longlong *)param_1,(undefined8 *)pIVar12,param_3,param_4);
|
|
if ((int)local_f0 <= iVar13) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(pIVar11,pIVar12,param_3,param_4);
|
|
}
|
|
pIVar8 = (IMAGE_DOS_HEADER *)(local_f8->e_magic + uVar18);
|
|
pIVar11 = *(IMAGE_DOS_HEADER **)pIVar8;
|
|
pIVar7 = (IMAGE_DOS_HEADER *)FUN_1400debf0((longlong *)pIVar11);
|
|
if (pIVar7 != (IMAGE_DOS_HEADER *)0x0) {
|
|
uVar3._0_2_ = pIVar8->e_sp;
|
|
uVar3._2_2_ = pIVar8->e_csum;
|
|
pIVar11 = (IMAGE_DOS_HEADER *)(ulonglong)uVar3;
|
|
if (uVar3 == 2) {
|
|
param_4 = (IMAGE_DOS_HEADER *)&local_e0;
|
|
pIVar11 = param_1;
|
|
FUN_1400c96e0((byte **)param_1,(longlong)pIVar8,pIVar7,param_4);
|
|
pIVar12 = pIVar8;
|
|
param_3 = pIVar7;
|
|
}
|
|
else if (uVar3 == 1) {
|
|
pIVar11 = param_1;
|
|
FUN_1400c1b10((longlong)param_1,(longlong)pIVar8,(longlong)pIVar7,param_4);
|
|
pIVar12 = pIVar8;
|
|
param_3 = pIVar7;
|
|
}
|
|
}
|
|
uVar14 = (ulonglong)(iVar13 + 1U);
|
|
uVar18 = uVar18 + 0x38;
|
|
} while (iVar13 + 1U < (uint)local_res18);
|
|
}
|
|
}
|
|
local_108 = Proud::CFastArray<Proud::CompletionStatus,0>::vftable;
|
|
pIVar11 = local_f8;
|
|
if (local_f8 != (IMAGE_DOS_HEADER *)0x0) {
|
|
param_3 = local_100;
|
|
if (local_100 == (IMAGE_DOS_HEADER *)0x0) {
|
|
FUN_14006cc60(local_f8);
|
|
}
|
|
else {
|
|
pIVar11 = local_100;
|
|
pIVar12 = local_f8;
|
|
(**(code **)(*(longlong *)local_100 + 0x18))();
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
bVar2 = param_1[2].e_program[0];
|
|
while (bVar2 == 0) {
|
|
local_68 = Proud::AddrPort::vftable;
|
|
local_90 = (IMAGE_DOS_HEADER *)0x0;
|
|
local_78[0] = 0;
|
|
local_78[1] = 0;
|
|
local_78[2] = 0;
|
|
local_78[3] = 0;
|
|
local_78[4] = 0;
|
|
local_78[5] = 0;
|
|
local_78[6] = 0;
|
|
local_78[7] = 0;
|
|
local_88._0_2_ = 0;
|
|
local_88._2_2_ = 0;
|
|
local_88._4_2_ = 0;
|
|
local_88._6_2_ = 0;
|
|
local_80 = 5;
|
|
local_70[0] = 0;
|
|
local_70[1] = 0;
|
|
param_3 = (IMAGE_DOS_HEADER *)(ulonglong)DAT_1401ac068;
|
|
local_60 = (word [2])DAT_1401ac3d0;
|
|
local_5c = DAT_1401ac3d4;
|
|
uVar6 = FUN_1400753f0(*(char **)(*(longlong *)(param_1[2].e_program + 8) + 0x788),
|
|
(longlong *)&local_90,(ulonglong)param_3,param_4);
|
|
pIVar12 = *(IMAGE_DOS_HEADER **)(*(longlong *)(param_1[2].e_program + 8) + 0x118);
|
|
dVar19 = (double)(**(code **)&pIVar12->e_cparhdr)();
|
|
pIVar11 = *(IMAGE_DOS_HEADER **)(param_1[2].e_program + 8);
|
|
if (*(double *)(pIVar11[0x10].e_res_4_ + 2) <= dVar19 - *(double *)(param_1 + 2) &&
|
|
dVar19 - *(double *)(param_1 + 2) != *(double *)(pIVar11[0x10].e_res_4_ + 2)) {
|
|
*(double *)(param_1 + 2) = dVar19;
|
|
pIVar12 = (IMAGE_DOS_HEADER *)&local_b8;
|
|
pIVar11 = param_1;
|
|
FUN_1400c2170((longlong)param_1,(longlong)pIVar12,param_3,(longlong)param_4);
|
|
}
|
|
if ((char)uVar6 != '\0') {
|
|
param_3 = (IMAGE_DOS_HEADER *)&local_e0;
|
|
pIVar12 = (IMAGE_DOS_HEADER *)&local_90;
|
|
FUN_1400ca250((longlong *)param_1,(undefined8 *)pIVar12,param_3,param_4);
|
|
pIVar11 = local_90;
|
|
pIVar8 = (IMAGE_DOS_HEADER *)FUN_1400debf0((longlong *)local_90);
|
|
if (pIVar8 != (IMAGE_DOS_HEADER *)0x0) {
|
|
pIVar11 = (IMAGE_DOS_HEADER *)(ulonglong)local_80;
|
|
if (local_80 == 2) {
|
|
param_4 = (IMAGE_DOS_HEADER *)&local_e0;
|
|
pIVar12 = (IMAGE_DOS_HEADER *)&local_90;
|
|
pIVar11 = param_1;
|
|
FUN_1400c96e0((byte **)param_1,(longlong)pIVar12,pIVar8,param_4);
|
|
param_3 = pIVar8;
|
|
}
|
|
else if (local_80 == 1) {
|
|
pIVar12 = (IMAGE_DOS_HEADER *)&local_90;
|
|
pIVar11 = param_1;
|
|
FUN_1400c1b10((longlong)param_1,(longlong)pIVar12,(longlong)pIVar8,param_4);
|
|
param_3 = pIVar8;
|
|
}
|
|
}
|
|
}
|
|
bVar2 = param_1[2].e_program[0];
|
|
}
|
|
}
|
|
if (*(longlong *)(*(longlong *)(param_1[2].e_program + 8) + 0x17f0) != 0) {
|
|
FUN_14006cb70(pIVar11,pIVar12,param_3,param_4);
|
|
local_res20 = (short *)PTR_DAT_1401ac010;
|
|
FUN_140053d20((longlong *)&local_res20,L"%s thread 종료.",
|
|
L"Proud::CNetThreads_S::NetWorkerThread_Main",param_4);
|
|
psVar4 = local_res20;
|
|
psVar17 = local_res20;
|
|
if (local_res20 == (short *)0x0) {
|
|
psVar17 = (short *)PTR_DAT_1401ac010;
|
|
}
|
|
uVar6 = 0;
|
|
lVar10 = *(longlong *)(*(longlong *)(param_1[2].e_program + 8) + 0x17f0);
|
|
FUN_1400cb700(lVar10,0,psVar17,param_4);
|
|
if (((psVar4 != (short *)0x0) && (psVar4 != (short *)PTR_DAT_1401ac010)) &&
|
|
(psVar4 + -4 != (short *)0x0)) {
|
|
piVar9 = (int *)FUN_14006cb70(lVar10,uVar6,psVar17,param_4);
|
|
local_58 = piVar9;
|
|
FUN_14006b350(piVar9);
|
|
local_50 = 1;
|
|
piVar1 = (int *)(psVar4 + -2);
|
|
*piVar1 = *piVar1 + -1;
|
|
if (*piVar1 == 0) {
|
|
FUN_14006cc60(psVar4 + -4);
|
|
}
|
|
FUN_14006b3e0((longlong)piVar9);
|
|
}
|
|
}
|
|
local_e0 = Proud::CFastArray<Proud::CReceivedMessage,0>::vftable;
|
|
lVar10 = (longlong)(int)local_c8;
|
|
if (0 < (int)local_c8) {
|
|
puVar15 = (undefined4 *)((longlong)local_d0 + 0x18);
|
|
do {
|
|
local_res18 = (longlong *)(puVar15 + -4);
|
|
FUN_1400d1800(local_res18);
|
|
if (*(longlong *)(puVar15 + -2) != 0) {
|
|
if ((int)puVar15[1] < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
*puVar15 = 0;
|
|
}
|
|
uVar16 = uVar16 + 1;
|
|
puVar15 = puVar15 + 0x12;
|
|
} while ((longlong)uVar16 < lVar10);
|
|
}
|
|
if (local_d0 != (LPVOID)0x0) {
|
|
if (local_d8 == (longlong *)0x0) {
|
|
FUN_14006cc60(local_d0);
|
|
}
|
|
else {
|
|
(**(code **)(*local_d8 + 0x18))(local_d8,local_d0);
|
|
}
|
|
}
|
|
if (local_a8 != (LPVOID)0x0) {
|
|
if (local_b0 == (longlong *)0x0) {
|
|
FUN_14006cc60(local_a8);
|
|
}
|
|
else {
|
|
(**(code **)(*local_b0 + 0x18))(local_b0,local_a8);
|
|
}
|
|
}
|
|
FUN_1400f85a0(local_res10);
|
|
return;
|
|
}
|
|
|