146 lines
5.2 KiB
C
146 lines
5.2 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x1401a9020 FUN_1401a9020
|
|
* Pseudocode, not original source. */
|
|
|
|
undefined8 FUN_1401a9020(longlong param_1,undefined8 param_2,longlong param_3)
|
|
|
|
{
|
|
int *piVar1;
|
|
uint uVar2;
|
|
longlong lVar3;
|
|
ulonglong uVar4;
|
|
char cVar5;
|
|
undefined8 uVar6;
|
|
undefined *puVar7;
|
|
longlong *plVar8;
|
|
undefined8 *puVar9;
|
|
undefined **ppuVar10;
|
|
longlong lVar11;
|
|
undefined *puVar12;
|
|
undefined *local_res8;
|
|
undefined *local_res20;
|
|
undefined **local_60;
|
|
undefined4 local_58;
|
|
undefined2 local_54;
|
|
undefined8 local_50;
|
|
undefined1 local_48;
|
|
|
|
uVar6 = (**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))();
|
|
local_50 = uVar6;
|
|
FUN_14016db50(uVar6);
|
|
local_48 = 1;
|
|
if (DAT_14034c86f != '\0') {
|
|
(**(code **)(**(longlong **)(param_1 + 0x148) + 200))();
|
|
}
|
|
FUN_1401a1eb0(*(longlong *)(param_1 + 0x148) + 0x760);
|
|
local_res8 = (undefined *)FUN_14016d940(0x780);
|
|
puVar12 = (undefined *)0x0;
|
|
puVar7 = puVar12;
|
|
if (local_res8 != (undefined *)0x0) {
|
|
local_60 = Proud::AddrPort::vftable;
|
|
local_58 = *(undefined4 *)(param_3 + 8);
|
|
local_54 = *(undefined2 *)(param_3 + 0xc);
|
|
puVar7 = (undefined *)
|
|
FUN_1401b4c70(local_res8,*(undefined8 *)(param_1 + 0x148),param_2,&local_60);
|
|
}
|
|
lVar3 = *(longlong *)(param_1 + 0x148);
|
|
lVar11 = lVar3 + 0x1740;
|
|
uVar2 = *(uint *)(lVar3 + 0x1768);
|
|
uVar4 = ((ulonglong)puVar7 & 0xffffffff) % (ulonglong)uVar2;
|
|
lVar3 = *(longlong *)(lVar3 + 0x1748);
|
|
local_res8 = puVar7;
|
|
if (lVar3 != 0) {
|
|
for (plVar8 = *(longlong **)(lVar3 + uVar4 * 8);
|
|
(plVar8 != (longlong *)0x0 && ((uint)uVar4 == *(uint *)(plVar8 + 4) % uVar2));
|
|
plVar8 = (longlong *)plVar8[2]) {
|
|
if ((undefined *)*plVar8 == puVar7) goto LAB_1401a91c9;
|
|
}
|
|
if (lVar3 != 0) {
|
|
for (plVar8 = *(longlong **)(lVar3 + uVar4 * 8);
|
|
(plVar8 != (longlong *)0x0 && ((uint)uVar4 == *(uint *)(plVar8 + 4) % uVar2));
|
|
plVar8 = (longlong *)plVar8[2]) {
|
|
if ((undefined *)*plVar8 == puVar7) goto LAB_1401a91c5;
|
|
}
|
|
if (lVar3 != 0) goto LAB_1401a919c;
|
|
}
|
|
}
|
|
cVar5 = FUN_1401b5a10(lVar11,(ulonglong)uVar2,CONCAT71((int7)((ulonglong)lVar3 >> 8),1));
|
|
if (cVar5 == '\0') {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x8007000e);
|
|
}
|
|
LAB_1401a919c:
|
|
FUN_1401720a0(lVar11);
|
|
plVar8 = (longlong *)FUN_140175d30(lVar11,&local_res8,uVar4,(ulonglong)puVar7 & 0xffffffff);
|
|
FUN_1401720a0(lVar11);
|
|
LAB_1401a91c5:
|
|
*(undefined1 *)(plVar8 + 1) = 0;
|
|
LAB_1401a91c9:
|
|
if (puVar7 != (undefined *)0x0) {
|
|
puVar12 = puVar7 + 0x38;
|
|
}
|
|
FUN_14019bd30(*(undefined8 *)(*(longlong *)(puVar7 + 0x748) + 0x110),puVar12);
|
|
FUN_1401baa10(puVar7 + 0xc0);
|
|
FUN_1401a2e00(*(undefined8 *)(*(longlong *)(param_1 + 0x148) + 0x788),
|
|
*(undefined8 *)(*(longlong *)(puVar7 + 0x748) + 0x110),0xffffffffffffffff);
|
|
lVar3 = *(longlong *)(param_1 + 0x148);
|
|
uVar4 = (ulonglong)((uint)*(ushort *)(param_3 + 0xc) ^ *(uint *)(param_3 + 8)) %
|
|
(ulonglong)*(uint *)(lVar3 + 0x1710);
|
|
if (*(longlong *)(lVar3 + 0x16f0) != 0) {
|
|
for (lVar11 = *(longlong *)(*(longlong *)(lVar3 + 0x16f0) + uVar4 * 8);
|
|
(lVar11 != 0 && ((uint)uVar4 == *(uint *)(lVar11 + 0x28) % *(uint *)(lVar3 + 0x1710)));
|
|
lVar11 = *(longlong *)(lVar11 + 0x18)) {
|
|
if ((*(uint *)(lVar11 + 8) == *(uint *)(param_3 + 8)) &&
|
|
(*(ushort *)(lVar11 + 0xc) == *(ushort *)(param_3 + 0xc))) goto LAB_1401a9288;
|
|
}
|
|
}
|
|
puVar9 = (undefined8 *)FUN_1401b7d10(lVar3 + 0x16e8,param_3);
|
|
*puVar9 = puVar7;
|
|
LAB_1401a9288:
|
|
if (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0) != 0) {
|
|
FUN_14016d8c0();
|
|
local_res8 = PTR_DAT_1403440a0;
|
|
plVar8 = (longlong *)FUN_1401705d0(param_3,&local_res20);
|
|
puVar12 = (undefined *)*plVar8;
|
|
if ((undefined *)*plVar8 == (undefined *)0x0) {
|
|
puVar12 = PTR_DAT_1403440a0;
|
|
}
|
|
FUN_14004c020(&local_res8,L"new TCP socket is accepted. RemoteClient_S=%p,TCP socket=%s",puVar7,
|
|
puVar12);
|
|
if (((local_res20 != (undefined *)0x0) && (local_res20 != PTR_DAT_1403440a0)) &&
|
|
(local_res20 + -8 != (undefined *)0x0)) {
|
|
ppuVar10 = (undefined **)FUN_14016d8c0();
|
|
local_60 = ppuVar10;
|
|
FUN_14016db50(ppuVar10);
|
|
local_58 = CONCAT31(local_58._1_3_,1);
|
|
piVar1 = (int *)(local_res20 + -4);
|
|
*piVar1 = *piVar1 + -1;
|
|
if (*piVar1 == 0) {
|
|
FUN_14016d970(local_res20 + -8);
|
|
}
|
|
FUN_14016dbe0(ppuVar10);
|
|
}
|
|
puVar12 = local_res8;
|
|
puVar7 = local_res8;
|
|
if (local_res8 == (undefined *)0x0) {
|
|
puVar7 = PTR_DAT_1403440a0;
|
|
}
|
|
FUN_1401adb30(*(undefined8 *)(*(longlong *)(param_1 + 0x148) + 0x17f0),0,puVar7);
|
|
if (((puVar12 != (undefined *)0x0) && (puVar12 != PTR_DAT_1403440a0)) &&
|
|
(puVar12 + -8 != (undefined *)0x0)) {
|
|
ppuVar10 = (undefined **)FUN_14016d8c0();
|
|
local_60 = ppuVar10;
|
|
FUN_14016db50(ppuVar10);
|
|
local_58 = CONCAT31(local_58._1_3_,1);
|
|
piVar1 = (int *)(puVar12 + -4);
|
|
*piVar1 = *piVar1 + -1;
|
|
if (*piVar1 == 0) {
|
|
FUN_14016d970(puVar12 + -8);
|
|
}
|
|
FUN_14016dbe0(ppuVar10);
|
|
}
|
|
}
|
|
FUN_14016dbe0(uVar6);
|
|
return 1;
|
|
}
|
|
|