141 lines
4.5 KiB
C
141 lines
4.5 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x1400c68e0 FUN_1400c68e0
|
|
* Pseudocode, not original source. */
|
|
|
|
void FUN_1400c68e0(int *param_1,wchar_t *param_2,longlong *param_3,undefined8 param_4)
|
|
|
|
{
|
|
undefined8 *puVar1;
|
|
int *piVar2;
|
|
wchar_t *pwVar3;
|
|
undefined8 *puVar4;
|
|
int iVar5;
|
|
longlong lVar6;
|
|
|
|
piVar2 = (int *)(**(code **)(**(longlong **)(param_1 + 0x52) + 0x58))();
|
|
FUN_14006b350(piVar2);
|
|
if (DAT_1401b42cf != '\0') {
|
|
param_3 = (longlong *)**(longlong **)(param_1 + 0x52);
|
|
param_2 = L"Proud::CNetThreads_S::~CNetThreads_S";
|
|
(*(code *)param_3[0x19])();
|
|
}
|
|
*(undefined1 *)(param_1 + 0x50) = 1;
|
|
FUN_14006b3e0((longlong)piVar2);
|
|
puVar4 = (undefined8 *)0x0;
|
|
if (*(undefined8 **)(param_1 + 0x22) != (undefined8 *)0x0) {
|
|
puVar4 = (undefined8 *)**(undefined8 **)(param_1 + 0x22);
|
|
}
|
|
FUN_140074120(puVar4);
|
|
if (*(undefined8 **)(param_1 + 0x24) == (undefined8 *)0x0) {
|
|
puVar4 = (undefined8 *)0x0;
|
|
}
|
|
else {
|
|
puVar4 = (undefined8 *)**(undefined8 **)(param_1 + 0x24);
|
|
}
|
|
FUN_140074120(puVar4);
|
|
piVar2 = param_1;
|
|
FUN_14006b350(param_1);
|
|
iVar5 = 0;
|
|
lVar6 = 0;
|
|
if (0 < param_1[0x1e]) {
|
|
do {
|
|
if ((lVar6 < 0) || (param_1[0x1e] <= iVar5)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(piVar2,param_2,param_3,param_4);
|
|
}
|
|
puVar4 = *(undefined8 **)(*(longlong *)(param_1 + 0x1c) + lVar6 * 8);
|
|
piVar2 = (int *)0x0;
|
|
if (puVar4 != (undefined8 *)0x0) {
|
|
piVar2 = (int *)*puVar4;
|
|
}
|
|
FUN_140074120((undefined8 *)piVar2);
|
|
iVar5 = iVar5 + 1;
|
|
lVar6 = lVar6 + 1;
|
|
} while (iVar5 < param_1[0x1e]);
|
|
}
|
|
piVar2 = param_1;
|
|
FUN_14006b3e0((longlong)param_1);
|
|
iVar5 = 0;
|
|
lVar6 = 0;
|
|
if (0 < param_1[0x14]) {
|
|
do {
|
|
if ((lVar6 < 0) || (param_1[0x14] <= iVar5)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(piVar2,param_2,param_3,param_4);
|
|
}
|
|
puVar4 = *(undefined8 **)(*(longlong *)(param_1 + 0x12) + lVar6 * 8);
|
|
piVar2 = (int *)0x0;
|
|
if (puVar4 != (undefined8 *)0x0) {
|
|
piVar2 = (int *)*puVar4;
|
|
}
|
|
FUN_140074120((undefined8 *)piVar2);
|
|
iVar5 = iVar5 + 1;
|
|
lVar6 = lVar6 + 1;
|
|
} while (iVar5 < param_1[0x14]);
|
|
}
|
|
CloseHandle(*(HANDLE *)(param_1 + 0x60));
|
|
FUN_1400c1f40((longlong *)(param_1 + 0x5a));
|
|
FUN_140074210((UINT *)(param_1 + 0x56));
|
|
FUN_140076ce0((undefined8 *)(param_1 + 0x54));
|
|
if ((*(longlong *)(param_1 + 0x24) != 0) &&
|
|
(*(longlong *)(*(longlong *)(param_1 + 0x24) + 8) =
|
|
*(longlong *)(*(longlong *)(param_1 + 0x24) + 8) + -1,
|
|
*(longlong *)(*(longlong *)(param_1 + 0x24) + 8) == 0)) {
|
|
puVar4 = *(undefined8 **)(param_1 + 0x24);
|
|
puVar1 = (undefined8 *)*puVar4;
|
|
if (puVar1 != (undefined8 *)0x0) {
|
|
FUN_1400741a0(puVar1);
|
|
operator_delete(puVar1);
|
|
}
|
|
FUN_14006cc60(puVar4);
|
|
}
|
|
if ((*(longlong *)(param_1 + 0x22) != 0) &&
|
|
(*(longlong *)(*(longlong *)(param_1 + 0x22) + 8) =
|
|
*(longlong *)(*(longlong *)(param_1 + 0x22) + 8) + -1,
|
|
*(longlong *)(*(longlong *)(param_1 + 0x22) + 8) == 0)) {
|
|
puVar4 = *(undefined8 **)(param_1 + 0x22);
|
|
puVar1 = (undefined8 *)*puVar4;
|
|
if (puVar1 != (undefined8 *)0x0) {
|
|
FUN_1400741a0(puVar1);
|
|
operator_delete(puVar1);
|
|
}
|
|
FUN_14006cc60(puVar4);
|
|
}
|
|
*(undefined ***)(param_1 + 0x18) = Proud::CFastArray<Proud::RefCount<Proud::Thread>,0>::vftable;
|
|
pwVar3 = (wchar_t *)(longlong)param_1[0x1e];
|
|
if (0 < param_1[0x1e]) {
|
|
FUN_1400f8e50(*(longlong **)(param_1 + 0x1c),(longlong)pwVar3);
|
|
param_2 = pwVar3;
|
|
}
|
|
pwVar3 = *(wchar_t **)(param_1 + 0x1c);
|
|
if (pwVar3 != (wchar_t *)0x0) {
|
|
param_3 = *(longlong **)(param_1 + 0x1a);
|
|
if (param_3 == (longlong *)0x0) {
|
|
FUN_14006cc60(pwVar3);
|
|
}
|
|
else {
|
|
(**(code **)(*param_3 + 0x18))(param_3);
|
|
param_2 = pwVar3;
|
|
}
|
|
}
|
|
*(undefined ***)(param_1 + 0xe) = Proud::CFastArray<Proud::RefCount<Proud::Thread>,0>::vftable;
|
|
pwVar3 = (wchar_t *)(longlong)param_1[0x14];
|
|
if (0 < param_1[0x14]) {
|
|
FUN_1400f8e50(*(longlong **)(param_1 + 0x12),(longlong)pwVar3);
|
|
param_2 = pwVar3;
|
|
}
|
|
pwVar3 = *(wchar_t **)(param_1 + 0x12);
|
|
if (pwVar3 != (wchar_t *)0x0) {
|
|
param_3 = *(longlong **)(param_1 + 0x10);
|
|
if (param_3 == (longlong *)0x0) {
|
|
FUN_14006cc60(pwVar3);
|
|
}
|
|
else {
|
|
(**(code **)(*param_3 + 0x18))(param_3);
|
|
param_2 = pwVar3;
|
|
}
|
|
}
|
|
FUN_14006b400(param_1,param_2,param_3,param_4);
|
|
return;
|
|
}
|
|
|