300 lines
9 KiB
C
300 lines
9 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x14018bf70 FUN_14018bf70
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00014018c44b) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014018c452) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014018c460) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014018c46d) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014018c465) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014018c473) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014018c485) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014018c0ea) */
|
|
|
|
undefined8 FUN_14018bf70(longlong param_1,uint param_2,int *param_3)
|
|
|
|
{
|
|
longlong lVar1;
|
|
undefined8 *puVar2;
|
|
ulonglong uVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
undefined8 uVar6;
|
|
longlong *plVar7;
|
|
longlong *plVar8;
|
|
undefined8 *puVar9;
|
|
longlong *plVar10;
|
|
longlong *plVar11;
|
|
uint uVar12;
|
|
longlong lVar13;
|
|
uint *puVar14;
|
|
longlong *plVar15;
|
|
longlong *plVar16;
|
|
longlong *plVar17;
|
|
longlong *plVar18;
|
|
double dVar19;
|
|
double dVar20;
|
|
double dVar21;
|
|
longlong *local_res8;
|
|
undefined **local_90;
|
|
longlong *local_88;
|
|
longlong *local_80;
|
|
ulonglong local_78;
|
|
int local_70;
|
|
undefined4 local_6c;
|
|
longlong *local_68;
|
|
longlong lStack_60;
|
|
longlong *local_58;
|
|
longlong lStack_50;
|
|
undefined8 local_48;
|
|
|
|
local_48 = 0xfffffffffffffffe;
|
|
uVar6 = (**(code **)(*(longlong *)(param_1 + -0xa8) + 0x58))(param_1 + -0xa8);
|
|
FUN_14016db50(uVar6);
|
|
if (DAT_14034c86f != '\0') {
|
|
(**(code **)(*(longlong *)(param_1 + -0xa8) + 200))(param_1 + -0xa8);
|
|
}
|
|
uVar3 = (ulonglong)param_2 % (ulonglong)*(uint *)(param_1 + 0xbf8);
|
|
if ((*(longlong *)(param_1 + 0xbd8) != 0) &&
|
|
(puVar14 = *(uint **)(*(longlong *)(param_1 + 0xbd8) + uVar3 * 8), puVar14 != (uint *)0x0)) {
|
|
while ((uint)uVar3 == puVar14[8] % *(uint *)(param_1 + 0xbf8)) {
|
|
if (*puVar14 == param_2) {
|
|
lVar1 = *(longlong *)(puVar14 + 2);
|
|
if ((lVar1 != 0) && (*(longlong *)(lVar1 + 0x228) == 0)) {
|
|
plVar8 = (longlong *)0x0;
|
|
param_3[0] = 0;
|
|
param_3[1] = 0;
|
|
param_3[3] = *(int *)(lVar1 + 0x1d0);
|
|
param_3[2] = *(int *)(lVar1 + 0x1d4);
|
|
plVar7 = plVar8;
|
|
if (*(longlong *)(lVar1 + 0x6c0) != 0) {
|
|
plVar7 = *(longlong **)(lVar1 + 0x6b0);
|
|
}
|
|
for (; plVar7 != (longlong *)0x0; plVar7 = (longlong *)plVar7[2]) {
|
|
plVar15 = plVar8;
|
|
if ((undefined8 *)*plVar7 != (undefined8 *)0x0) {
|
|
plVar15 = *(longlong **)*plVar7;
|
|
}
|
|
if ((char)plVar15[0x22] != '\0') {
|
|
*param_3 = *param_3 + 1;
|
|
plVar15 = plVar8;
|
|
if ((undefined8 *)*plVar7 != (undefined8 *)0x0) {
|
|
plVar15 = *(longlong **)*plVar7;
|
|
}
|
|
if ((char)plVar15[1] == '\0') {
|
|
param_3[1] = param_3[1] + 1;
|
|
}
|
|
}
|
|
}
|
|
FUN_14016dbe0(uVar6);
|
|
return 1;
|
|
}
|
|
break;
|
|
}
|
|
puVar14 = *(uint **)(puVar14 + 4);
|
|
if (puVar14 == (uint *)0x0) break;
|
|
}
|
|
}
|
|
plVar8 = (longlong *)FUN_14018bc80(param_1 + -0xa8,&local_res8,param_2);
|
|
plVar15 = (longlong *)0x0;
|
|
plVar7 = plVar15;
|
|
if ((undefined8 *)*plVar8 != (undefined8 *)0x0) {
|
|
plVar7 = *(longlong **)*plVar8;
|
|
}
|
|
if ((local_res8 != (longlong *)0x0) && (local_res8[1] = local_res8[1] + -1, local_res8[1] == 0)) {
|
|
lVar1 = *local_res8;
|
|
if (lVar1 != 0) {
|
|
FUN_140178e60(lVar1);
|
|
FUN_14016d970(lVar1);
|
|
}
|
|
FUN_14016d970(local_res8);
|
|
}
|
|
if (plVar7 == (longlong *)0x0) {
|
|
FUN_14016dbe0(uVar6);
|
|
uVar6 = 0;
|
|
}
|
|
else {
|
|
param_3[0] = 0;
|
|
param_3[1] = 0;
|
|
param_3[2] = 0;
|
|
param_3[3] = 0;
|
|
local_90 = Proud::CFastArray<Proud::P2PConnectionState*___ptr64,0>::vftable;
|
|
local_88 = (longlong *)0x0;
|
|
local_6c = 0;
|
|
local_80 = (longlong *)0x0;
|
|
local_78 = 0;
|
|
lVar1 = plVar7[5];
|
|
dVar19 = (double)lVar1;
|
|
if (lVar1 < 0) {
|
|
dVar19 = dVar19 + 1.8446744073709552e+19;
|
|
}
|
|
uVar4 = 2;
|
|
uVar12 = 2;
|
|
dVar20 = 1.0;
|
|
dVar21 = 1.0;
|
|
while( true ) {
|
|
if ((uVar12 & 1) != 0) {
|
|
dVar21 = dVar21 * dVar19;
|
|
}
|
|
uVar12 = uVar12 >> 1;
|
|
if (uVar12 == 0) break;
|
|
dVar19 = dVar19 * dVar19;
|
|
}
|
|
if (1.0 < dVar21 * 0.5) {
|
|
dVar19 = (double)lVar1;
|
|
if (lVar1 < 0) {
|
|
dVar19 = dVar19 + 1.8446744073709552e+19;
|
|
}
|
|
while( true ) {
|
|
if ((uVar4 & 1) != 0) {
|
|
dVar20 = dVar20 * dVar19;
|
|
}
|
|
uVar4 = uVar4 >> 1;
|
|
if (uVar4 == 0) break;
|
|
dVar19 = dVar19 * dVar19;
|
|
}
|
|
dVar20 = dVar20 * 0.5;
|
|
}
|
|
local_70 = 0;
|
|
if (0 < (int)dVar20) {
|
|
local_70 = (int)dVar20;
|
|
}
|
|
plVar8 = plVar15;
|
|
plVar10 = plVar15;
|
|
plVar17 = plVar15;
|
|
if (lVar1 != 0) {
|
|
plVar8 = (longlong *)plVar7[3];
|
|
plVar10 = (longlong *)0x0;
|
|
}
|
|
for (; plVar8 != (longlong *)0x0; plVar8 = (longlong *)plVar8[3]) {
|
|
iVar5 = (*(code *)**(undefined8 **)plVar8[2])();
|
|
if (((iVar5 != 1) && (lVar1 = plVar8[2], lVar1 != 0)) && (lVar1 != 0x40)) {
|
|
param_3[3] = param_3[3] + *(int *)(lVar1 + 400);
|
|
param_3[2] = param_3[2] + *(int *)(lVar1 + 0x194);
|
|
lVar13 = lVar1 + 0x660;
|
|
plVar18 = plVar15;
|
|
local_68 = plVar15;
|
|
lStack_60 = lVar13;
|
|
local_58 = plVar15;
|
|
lStack_50 = lVar13;
|
|
if (*(longlong *)(lVar1 + 0x680) != 0) {
|
|
plVar18 = *(longlong **)(lVar1 + 0x670);
|
|
local_68 = plVar18;
|
|
local_58 = plVar18;
|
|
}
|
|
LAB_14018c2c0:
|
|
if (plVar18 != (longlong *)0x0) {
|
|
puVar2 = (undefined8 *)*plVar18;
|
|
plVar11 = plVar15;
|
|
if (puVar2 != (undefined8 *)0x0) {
|
|
plVar11 = (longlong *)*puVar2;
|
|
}
|
|
uVar12 = *(uint *)(plVar7 + 6);
|
|
uVar3 = (ulonglong)*(uint *)(plVar11[0x20] + 0x6f8) % (ulonglong)uVar12;
|
|
lVar1 = plVar7[2];
|
|
if ((lVar1 != 0) && (puVar14 = *(uint **)(lVar1 + uVar3 * 8), puVar14 != (uint *)0x0)) {
|
|
while ((uint)uVar3 == puVar14[10] % uVar12) {
|
|
if (*puVar14 == *(uint *)(plVar11[0x20] + 0x6f8)) {
|
|
if (puVar14 != (uint *)0x0) {
|
|
plVar11 = plVar15;
|
|
if (puVar2 != (undefined8 *)0x0) {
|
|
plVar11 = (longlong *)*puVar2;
|
|
}
|
|
uVar3 = (ulonglong)*(uint *)(plVar11[0x21] + 0x6f8) % (ulonglong)uVar12;
|
|
puVar14 = *(uint **)(lVar1 + uVar3 * 8);
|
|
if (puVar14 != (uint *)0x0) goto LAB_14018c374;
|
|
}
|
|
break;
|
|
}
|
|
puVar14 = *(uint **)(puVar14 + 6);
|
|
if (puVar14 == (uint *)0x0) break;
|
|
}
|
|
}
|
|
goto LAB_14018c4a4;
|
|
}
|
|
if (lStack_50 != lVar13) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x80004005);
|
|
}
|
|
}
|
|
}
|
|
if (plVar17 != (longlong *)0x0) {
|
|
if (local_88 == (longlong *)0x0) {
|
|
FUN_14016d970(plVar17);
|
|
}
|
|
else {
|
|
(**(code **)(*local_88 + 0x18))(local_88,plVar17);
|
|
}
|
|
}
|
|
FUN_14016dbe0(uVar6);
|
|
uVar6 = 1;
|
|
}
|
|
return uVar6;
|
|
while( true ) {
|
|
if (*puVar14 == *(uint *)(plVar11[0x21] + 0x6f8)) {
|
|
if (puVar14 != (uint *)0x0) {
|
|
plVar11 = plVar15;
|
|
if (puVar2 != (undefined8 *)0x0) {
|
|
plVar11 = (longlong *)*puVar2;
|
|
}
|
|
iVar5 = (int)plVar10;
|
|
if (iVar5 < 1) goto LAB_14018c3db;
|
|
puVar9 = (undefined8 *)FUN_14016ab80(&local_90);
|
|
plVar16 = plVar15;
|
|
goto LAB_14018c3c0;
|
|
}
|
|
break;
|
|
}
|
|
puVar14 = *(uint **)(puVar14 + 6);
|
|
if (puVar14 == (uint *)0x0) break;
|
|
LAB_14018c374:
|
|
if ((uint)uVar3 != puVar14[10] % uVar12) break;
|
|
}
|
|
goto LAB_14018c4a4;
|
|
while( true ) {
|
|
uVar12 = (int)plVar16 + 1;
|
|
plVar16 = (longlong *)(ulonglong)uVar12;
|
|
puVar9 = puVar9 + 1;
|
|
if (iVar5 <= (int)uVar12) break;
|
|
LAB_14018c3c0:
|
|
if (plVar11 == (longlong *)*puVar9) {
|
|
if ((int)plVar16 != -1) goto LAB_14018c4a4;
|
|
break;
|
|
}
|
|
}
|
|
LAB_14018c3db:
|
|
plVar10 = plVar15;
|
|
if (puVar2 != (undefined8 *)0x0) {
|
|
plVar10 = (longlong *)*puVar2;
|
|
}
|
|
if ((char)plVar10[0x22] != '\0') {
|
|
*param_3 = *param_3 + 1;
|
|
plVar10 = plVar15;
|
|
if ((undefined8 *)*plVar18 != (undefined8 *)0x0) {
|
|
plVar10 = *(longlong **)*plVar18;
|
|
}
|
|
if ((char)plVar10[1] == '\0') {
|
|
param_3[1] = param_3[1] + 1;
|
|
}
|
|
}
|
|
plVar17 = plVar15;
|
|
if ((longlong *)*plVar18 != (longlong *)0x0) {
|
|
plVar17 = *(longlong **)*plVar18;
|
|
}
|
|
if (iVar5 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
FUN_14016add0(&local_90);
|
|
plVar10 = (longlong *)(local_78 & 0xffffffff);
|
|
plVar11 = local_80;
|
|
if ((int)local_78 == 0) {
|
|
plVar11 = plVar15;
|
|
}
|
|
plVar11[iVar5] = (longlong)plVar17;
|
|
plVar17 = local_80;
|
|
LAB_14018c4a4:
|
|
plVar18 = (longlong *)plVar18[2];
|
|
goto LAB_14018c2c0;
|
|
}
|
|
|