218 lines
6 KiB
C
218 lines
6 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x14018cac0 FUN_14018cac0
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00014018ce93) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014018ceaf) */
|
|
|
|
void FUN_14018cac0(longlong param_1,longlong param_2)
|
|
|
|
{
|
|
ulonglong *puVar1;
|
|
longlong *plVar2;
|
|
void *pvVar3;
|
|
ulonglong uVar4;
|
|
ulonglong uVar5;
|
|
longlong lVar6;
|
|
ulonglong uVar7;
|
|
longlong lVar8;
|
|
ulonglong *local_res8;
|
|
longlong *local_res18;
|
|
undefined8 uVar9;
|
|
|
|
uVar9 = 0xfffffffffffffffe;
|
|
if (*(longlong *)(param_1 + 0x20) == 0) {
|
|
lVar8 = 0;
|
|
}
|
|
else {
|
|
lVar8 = *(longlong *)(param_1 + 0x10);
|
|
}
|
|
while (lVar8 != 0) {
|
|
if (lVar8 == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x80004005);
|
|
}
|
|
local_res8 = (ulonglong *)0x0;
|
|
if (*(longlong *)(lVar8 + 8) != 0) {
|
|
*(longlong *)(*(longlong *)(lVar8 + 8) + 8) = *(longlong *)(*(longlong *)(lVar8 + 8) + 8) + 1;
|
|
local_res8 = *(ulonglong **)(lVar8 + 8);
|
|
}
|
|
if (local_res8 == (ulonglong *)0x0) {
|
|
uVar4 = 0;
|
|
}
|
|
else {
|
|
uVar4 = *local_res8;
|
|
}
|
|
if (*(longlong *)(uVar4 + 0x100) == param_2) {
|
|
LAB_14018cb81:
|
|
if (local_res8 == (ulonglong *)0x0) {
|
|
uVar4 = 0;
|
|
}
|
|
else {
|
|
uVar4 = *local_res8;
|
|
}
|
|
lVar6 = *(longlong *)(uVar4 + 0x100);
|
|
if (local_res8 == (ulonglong *)0x0) {
|
|
uVar4 = 0;
|
|
}
|
|
else {
|
|
uVar4 = *local_res8;
|
|
}
|
|
uVar4 = (uVar4 & 0xffffffff) % (ulonglong)*(uint *)(lVar6 + 0x6c8);
|
|
if (*(longlong *)(lVar6 + 0x6a8) != 0) {
|
|
plVar2 = *(longlong **)(*(longlong *)(lVar6 + 0x6a8) + uVar4 * 8);
|
|
while( true ) {
|
|
if ((plVar2 == (longlong *)0x0) ||
|
|
((uint)uVar4 != *(uint *)(plVar2 + 4) % *(uint *)(lVar6 + 0x6c8))) goto LAB_14018cc1a;
|
|
if ((ulonglong *)*plVar2 == (ulonglong *)0x0) {
|
|
uVar7 = 0;
|
|
}
|
|
else {
|
|
uVar7 = *(ulonglong *)*plVar2;
|
|
}
|
|
if (local_res8 == (ulonglong *)0x0) {
|
|
uVar5 = 0;
|
|
}
|
|
else {
|
|
uVar5 = *local_res8;
|
|
}
|
|
if (uVar7 == uVar5) break;
|
|
plVar2 = (longlong *)plVar2[2];
|
|
}
|
|
FUN_1401877c0(lVar6 + 0x6a0,plVar2,0,lVar6,uVar9);
|
|
}
|
|
LAB_14018cc1a:
|
|
if (local_res8 == (ulonglong *)0x0) {
|
|
uVar4 = 0;
|
|
}
|
|
else {
|
|
uVar4 = *local_res8;
|
|
}
|
|
lVar6 = *(longlong *)(uVar4 + 0x108);
|
|
if (local_res8 == (ulonglong *)0x0) {
|
|
uVar4 = 0;
|
|
}
|
|
else {
|
|
uVar4 = *local_res8;
|
|
}
|
|
uVar4 = (uVar4 & 0xffffffff) % (ulonglong)*(uint *)(lVar6 + 0x6c8);
|
|
if (*(longlong *)(lVar6 + 0x6a8) != 0) {
|
|
plVar2 = *(longlong **)(*(longlong *)(lVar6 + 0x6a8) + uVar4 * 8);
|
|
while( true ) {
|
|
if ((plVar2 == (longlong *)0x0) ||
|
|
((uint)uVar4 != *(uint *)(plVar2 + 4) % *(uint *)(lVar6 + 0x6c8))) goto LAB_14018ccaa;
|
|
if ((ulonglong *)*plVar2 == (ulonglong *)0x0) {
|
|
uVar7 = 0;
|
|
}
|
|
else {
|
|
uVar7 = *(ulonglong *)*plVar2;
|
|
}
|
|
if (local_res8 == (ulonglong *)0x0) {
|
|
uVar5 = 0;
|
|
}
|
|
else {
|
|
uVar5 = *local_res8;
|
|
}
|
|
if (uVar7 == uVar5) break;
|
|
plVar2 = (longlong *)plVar2[2];
|
|
}
|
|
FUN_1401877c0(lVar6 + 0x6a0,plVar2,0,lVar6,uVar9);
|
|
}
|
|
LAB_14018ccaa:
|
|
if (lVar8 == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x80004005);
|
|
}
|
|
lVar6 = *(longlong *)(lVar8 + 0x10);
|
|
FUN_140184ef0(param_1,lVar8,0);
|
|
lVar8 = lVar6;
|
|
}
|
|
else {
|
|
if (local_res8 == (ulonglong *)0x0) {
|
|
uVar4 = 0;
|
|
}
|
|
else {
|
|
uVar4 = *local_res8;
|
|
}
|
|
if (*(longlong *)(uVar4 + 0x108) == param_2) goto LAB_14018cb81;
|
|
if (lVar8 != 0) {
|
|
lVar8 = *(longlong *)(lVar8 + 0x10);
|
|
}
|
|
}
|
|
if (local_res8 != (ulonglong *)0x0) {
|
|
puVar1 = local_res8 + 1;
|
|
*puVar1 = *puVar1 - 1;
|
|
if (*puVar1 == 0) {
|
|
pvVar3 = (void *)*local_res8;
|
|
if (pvVar3 != (void *)0x0) {
|
|
FUN_14019a9e0((longlong)pvVar3 + 0x148);
|
|
FUN_14019a9e0((longlong)pvVar3 + 0x120);
|
|
operator_delete(pvVar3);
|
|
}
|
|
FUN_14016d970(local_res8);
|
|
}
|
|
}
|
|
}
|
|
if (*(longlong *)(param_1 + 0x78) == 0) {
|
|
lVar8 = 0;
|
|
}
|
|
else {
|
|
lVar8 = *(longlong *)(param_1 + 0x68);
|
|
}
|
|
do {
|
|
if (lVar8 == 0) {
|
|
return;
|
|
}
|
|
if (lVar8 == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x80004005);
|
|
}
|
|
local_res18 = (longlong *)0x0;
|
|
if (*(longlong *)(lVar8 + 8) != 0) {
|
|
*(longlong *)(*(longlong *)(lVar8 + 8) + 8) = *(longlong *)(*(longlong *)(lVar8 + 8) + 8) + 1;
|
|
local_res18 = *(longlong **)(lVar8 + 8);
|
|
}
|
|
if (local_res18 == (longlong *)0x0) {
|
|
lVar6 = 0;
|
|
}
|
|
else {
|
|
lVar6 = *local_res18;
|
|
}
|
|
if (*(longlong *)(lVar6 + 0x100) == param_2) {
|
|
code_r0x00014018cdf6:
|
|
if (lVar8 == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x80004005);
|
|
}
|
|
lVar6 = *(longlong *)(lVar8 + 0x10);
|
|
FUN_140184ef0(param_1 + 0x58,lVar8,0);
|
|
lVar8 = lVar6;
|
|
}
|
|
else {
|
|
if (local_res18 == (longlong *)0x0) {
|
|
lVar6 = 0;
|
|
}
|
|
else {
|
|
lVar6 = *local_res18;
|
|
}
|
|
if (*(longlong *)(lVar6 + 0x108) == param_2) goto code_r0x00014018cdf6;
|
|
if (lVar8 != 0) {
|
|
lVar8 = *(longlong *)(lVar8 + 0x10);
|
|
}
|
|
}
|
|
if (local_res18 != (longlong *)0x0) {
|
|
plVar2 = local_res18 + 1;
|
|
*plVar2 = *plVar2 + -1;
|
|
if (*plVar2 == 0) {
|
|
pvVar3 = (void *)*local_res18;
|
|
if (pvVar3 != (void *)0x0) {
|
|
FUN_14019a9e0((longlong)pvVar3 + 0x148);
|
|
FUN_14019a9e0((longlong)pvVar3 + 0x120);
|
|
operator_delete(pvVar3);
|
|
}
|
|
FUN_14016d970(local_res18);
|
|
}
|
|
}
|
|
} while( true );
|
|
}
|
|
|