228 lines
7.6 KiB
C
228 lines
7.6 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x14018ced0 FUN_14018ced0
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00014018d230) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014018d20f) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014018d21e) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014018cf88) */
|
|
|
|
undefined8 * FUN_14018ced0(longlong param_1,longlong param_2,longlong param_3,longlong param_4)
|
|
|
|
{
|
|
int *piVar1;
|
|
longlong *plVar2;
|
|
uint uVar3;
|
|
longlong lVar4;
|
|
ulonglong uVar5;
|
|
undefined4 uVar6;
|
|
undefined2 uVar7;
|
|
undefined *puVar8;
|
|
undefined8 *puVar9;
|
|
undefined8 *puVar10;
|
|
undefined8 *puVar11;
|
|
undefined8 *puVar12;
|
|
uint *puVar13;
|
|
undefined8 *puVar14;
|
|
ulonglong uVar15;
|
|
undefined *puVar16;
|
|
uint uVar17;
|
|
uint uVar18;
|
|
undefined8 *local_res8;
|
|
undefined *local_res20;
|
|
undefined8 *puVar19;
|
|
undefined8 uVar20;
|
|
|
|
uVar20 = 0xfffffffffffffffe;
|
|
puVar14 = (undefined8 *)0x0;
|
|
puVar11 = (undefined8 *)0x0;
|
|
puVar19 = (undefined8 *)0x0;
|
|
uVar3 = *(uint *)(param_4 + 0x6f8);
|
|
uVar18 = *(uint *)(param_3 + 0x6f8);
|
|
uVar17 = uVar3;
|
|
if ((int)uVar3 < (int)uVar18) {
|
|
uVar17 = uVar18;
|
|
uVar18 = uVar3;
|
|
}
|
|
uVar15 = (ulonglong)*(uint *)(param_1 + 0x28);
|
|
uVar5 = (ulonglong)(uVar18 << 0x10 ^ uVar17);
|
|
puVar10 = (undefined8 *)(uVar5 / uVar15);
|
|
uVar5 = uVar5 % uVar15;
|
|
puVar12 = puVar14;
|
|
if (*(longlong *)(param_1 + 8) != 0) {
|
|
puVar13 = *(uint **)(*(longlong *)(param_1 + 8) + uVar5 * 8);
|
|
while( true ) {
|
|
puVar12 = puVar11;
|
|
if ((puVar13 == (uint *)0x0) ||
|
|
(puVar10 = (undefined8 *)(puVar13[8] / uVar15),
|
|
(uint)uVar5 != puVar13[8] % *(uint *)(param_1 + 0x28))) goto LAB_14018d337;
|
|
if ((*puVar13 == uVar18) && (puVar13[1] == uVar17)) break;
|
|
puVar13 = *(uint **)(puVar13 + 4);
|
|
}
|
|
if (puVar13 != (uint *)0x0) {
|
|
puVar11 = puVar14;
|
|
puVar12 = puVar19;
|
|
if (*(longlong *)(puVar13 + 2) != 0) {
|
|
*(longlong *)(*(longlong *)(puVar13 + 2) + 8) =
|
|
*(longlong *)(*(longlong *)(puVar13 + 2) + 8) + 1;
|
|
puVar12 = *(undefined8 **)(puVar13 + 2);
|
|
if (puVar12 != (undefined8 *)0x0) {
|
|
puVar11 = (undefined8 *)*puVar12;
|
|
}
|
|
}
|
|
*(int *)((longlong)puVar11 + 0x114) = *(int *)((longlong)puVar11 + 0x114) + -1;
|
|
puVar10 = puVar14;
|
|
if (puVar12 != (undefined8 *)0x0) {
|
|
puVar10 = (undefined8 *)*puVar12;
|
|
}
|
|
puVar19 = puVar12;
|
|
if (*(int *)((longlong)puVar10 + 0x114) == 0) {
|
|
puVar11 = puVar14;
|
|
if (puVar12 != (undefined8 *)0x0) {
|
|
puVar11 = (undefined8 *)*puVar12;
|
|
}
|
|
lVar4 = puVar11[0x20];
|
|
puVar11 = puVar14;
|
|
if (puVar12 != (undefined8 *)0x0) {
|
|
puVar11 = (undefined8 *)*puVar12;
|
|
}
|
|
uVar5 = ((ulonglong)puVar11 & 0xffffffff) % (ulonglong)*(uint *)(lVar4 + 0x6c8);
|
|
if (*(longlong *)(lVar4 + 0x6a8) == 0) goto LAB_14018d07c;
|
|
puVar11 = *(undefined8 **)(*(longlong *)(lVar4 + 0x6a8) + uVar5 * 8);
|
|
goto joined_r0x00014018d023;
|
|
}
|
|
}
|
|
}
|
|
goto LAB_14018d337;
|
|
joined_r0x00014018d023:
|
|
if ((puVar11 == (undefined8 *)0x0) ||
|
|
((uint)uVar5 != *(uint *)(puVar11 + 4) % *(uint *)(lVar4 + 0x6c8))) goto LAB_14018d07c;
|
|
puVar10 = puVar14;
|
|
if ((undefined8 *)*puVar11 != (undefined8 *)0x0) {
|
|
puVar10 = *(undefined8 **)*puVar11;
|
|
}
|
|
puVar9 = puVar14;
|
|
if (puVar12 != (undefined8 *)0x0) {
|
|
puVar9 = (undefined8 *)*puVar12;
|
|
}
|
|
if (puVar10 != puVar9) {
|
|
puVar11 = (undefined8 *)puVar11[2];
|
|
goto joined_r0x00014018d023;
|
|
}
|
|
FUN_1401877c0(lVar4 + 0x6a0,puVar11,0,lVar4,puVar12,0xfffffffffffffffe);
|
|
LAB_14018d07c:
|
|
puVar11 = puVar14;
|
|
if (puVar12 != (undefined8 *)0x0) {
|
|
puVar11 = (undefined8 *)*puVar12;
|
|
}
|
|
lVar4 = puVar11[0x21];
|
|
puVar11 = puVar14;
|
|
if (puVar12 != (undefined8 *)0x0) {
|
|
puVar11 = (undefined8 *)*puVar12;
|
|
}
|
|
uVar5 = ((ulonglong)puVar11 & 0xffffffff) % (ulonglong)*(uint *)(lVar4 + 0x6c8);
|
|
if (*(longlong *)(lVar4 + 0x6a8) != 0) {
|
|
puVar11 = *(undefined8 **)(*(longlong *)(lVar4 + 0x6a8) + uVar5 * 8);
|
|
while( true ) {
|
|
if ((puVar11 == (undefined8 *)0x0) ||
|
|
((uint)uVar5 != *(uint *)(puVar11 + 4) % *(uint *)(lVar4 + 0x6c8))) goto LAB_14018d10d;
|
|
puVar10 = puVar14;
|
|
if ((undefined8 *)*puVar11 != (undefined8 *)0x0) {
|
|
puVar10 = *(undefined8 **)*puVar11;
|
|
}
|
|
puVar9 = puVar14;
|
|
if (puVar12 != (undefined8 *)0x0) {
|
|
puVar9 = (undefined8 *)*puVar12;
|
|
}
|
|
if (puVar10 == puVar9) break;
|
|
puVar11 = (undefined8 *)puVar11[2];
|
|
}
|
|
FUN_1401877c0(lVar4 + 0x6a0,puVar11,0,lVar4,puVar19,uVar20);
|
|
}
|
|
LAB_14018d10d:
|
|
puVar11 = puVar14;
|
|
if (puVar12 != (undefined8 *)0x0) {
|
|
puVar11 = (undefined8 *)*puVar12;
|
|
}
|
|
if (((((double)puVar11[0x33] != 0.0) && (*(int *)(puVar11 + 0xe) != 0)) &&
|
|
(*(int *)(puVar11 + 0x17) != 0)) && (*(int *)(puVar11 + 0xe) != *(int *)(puVar11 + 0x17))) {
|
|
puVar11 = puVar14;
|
|
if (puVar12 != (undefined8 *)0x0) {
|
|
puVar11 = (undefined8 *)*puVar12;
|
|
}
|
|
uVar20 = (**(code **)(*(longlong *)(param_2 + 0x118) + 8))();
|
|
puVar11[0x32] = uVar20;
|
|
uVar7 = DAT_140344454;
|
|
uVar6 = DAT_140344450;
|
|
puVar11 = puVar14;
|
|
if (puVar12 != (undefined8 *)0x0) {
|
|
puVar11 = (undefined8 *)*puVar12;
|
|
}
|
|
if (*(char *)(puVar11 + 1) != '\x01') {
|
|
*(undefined4 *)(puVar11 + 2) = 0;
|
|
*(undefined4 *)(puVar11 + 4) = uVar6;
|
|
*(undefined2 *)((longlong)puVar11 + 0x24) = uVar7;
|
|
*(undefined4 *)(puVar11 + 6) = uVar6;
|
|
*(undefined2 *)((longlong)puVar11 + 0x34) = uVar7;
|
|
*(undefined1 *)(puVar11 + 7) = 0;
|
|
uVar7 = DAT_140344454;
|
|
uVar6 = DAT_140344450;
|
|
*(undefined4 *)(puVar11 + 8) = 0;
|
|
*(undefined4 *)(puVar11 + 10) = uVar6;
|
|
*(undefined2 *)((longlong)puVar11 + 0x54) = uVar7;
|
|
*(undefined4 *)(puVar11 + 0xc) = uVar6;
|
|
*(undefined2 *)((longlong)puVar11 + 100) = uVar7;
|
|
*(undefined1 *)(puVar11 + 0xd) = 0;
|
|
*(undefined1 *)(puVar11 + 1) = 1;
|
|
}
|
|
local_res8 = (undefined8 *)0x0;
|
|
if (puVar12 != (undefined8 *)0x0) {
|
|
puVar12[1] = puVar12[1] + 1;
|
|
puVar14 = (undefined8 *)*puVar19;
|
|
puVar12 = puVar19;
|
|
local_res8 = puVar19;
|
|
}
|
|
FUN_14018b4c0(param_1,puVar14[0x20],puVar14[0x21],&local_res8);
|
|
}
|
|
if (puVar13 == (uint *)0x0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x80004005);
|
|
}
|
|
puVar10 = (undefined8 *)FUN_140184ef0(param_1,puVar13,0);
|
|
if (*(longlong *)(param_2 + 0x17f0) != 0) {
|
|
FUN_14016d8c0();
|
|
local_res20 = PTR_DAT_1403440a0;
|
|
FUN_14004c020(&local_res20,&DAT_14027c780,*(undefined4 *)(param_3 + 0x6f8),
|
|
*(undefined4 *)(param_4 + 0x6f8));
|
|
puVar8 = local_res20;
|
|
puVar16 = local_res20;
|
|
if (local_res20 == (undefined *)0x0) {
|
|
puVar16 = PTR_DAT_1403440a0;
|
|
}
|
|
FUN_1401adb30(*(undefined8 *)(param_2 + 0x17f0),1,puVar16);
|
|
if (((puVar8 != (undefined *)0x0) && (puVar8 != PTR_DAT_1403440a0)) &&
|
|
(puVar8 + -8 != (undefined *)0x0)) {
|
|
uVar20 = FUN_14016d8c0();
|
|
FUN_14016db50(uVar20);
|
|
piVar1 = (int *)(puVar8 + -4);
|
|
*piVar1 = *piVar1 + -1;
|
|
if (*piVar1 == 0) {
|
|
FUN_14016d970(puVar8 + -8);
|
|
}
|
|
FUN_14016dbe0(uVar20);
|
|
}
|
|
local_res20 = PTR_DAT_1403440a0;
|
|
puVar10 = (undefined8 *)PTR_DAT_1403440a0;
|
|
}
|
|
LAB_14018d337:
|
|
if (puVar12 != (undefined8 *)0x0) {
|
|
plVar2 = puVar12 + 1;
|
|
*plVar2 = *plVar2 + -1;
|
|
puVar10 = (undefined8 *)puVar12[1];
|
|
if (*plVar2 == 0) {
|
|
puVar10 = (undefined8 *)FUN_140175a00(puVar19);
|
|
}
|
|
}
|
|
return puVar10;
|
|
}
|
|
|