350 lines
12 KiB
C
350 lines
12 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x1401b6a80 FUN_1401b6a80
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x0001401b6fe9) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001401b6ff0) */
|
|
/* WARNING: Removing unreachable block (ram,0x0001401b6fff) */
|
|
|
|
void FUN_1401b6a80(longlong param_1,undefined8 param_2,longlong *param_3)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
longlong lVar2;
|
|
longlong lVar3;
|
|
undefined8 uVar4;
|
|
undefined8 *puVar5;
|
|
undefined8 *puVar6;
|
|
int iVar7;
|
|
uint uVar8;
|
|
longlong *plVar9;
|
|
undefined8 *puVar10;
|
|
int iVar11;
|
|
size_t _Size;
|
|
ulonglong uVar12;
|
|
int iVar13;
|
|
int iVar14;
|
|
longlong local_res20;
|
|
undefined8 local_a8;
|
|
undefined1 local_98 [96];
|
|
|
|
puVar6 = (undefined8 *)0x0;
|
|
plVar9 = (longlong *)(param_1 + 0x30);
|
|
puVar5 = puVar6;
|
|
do {
|
|
if (((longlong)puVar5 < 0) || (5 < (longlong)puVar5)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6e0();
|
|
}
|
|
lVar2 = *plVar9;
|
|
if (lVar2 != 0) {
|
|
FUN_1401b6440(param_3);
|
|
*(undefined4 *)(param_3 + 0xd5) = *(undefined4 *)(param_1 + 0x178);
|
|
local_a8 = (int *)CONCAT44(local_a8._4_4_,0x10);
|
|
*(undefined2 *)((longlong)param_3 + 0x6ac) = *(undefined2 *)(param_1 + 0x17c);
|
|
param_3[0xce] = *(longlong *)(param_1 + 400);
|
|
*(undefined2 *)(param_3 + 0xcc) = 0xabce;
|
|
*(undefined2 *)((longlong)param_3 + 0x662) = *(undefined2 *)(param_1 + 0x180);
|
|
uVar1 = *(undefined4 *)(lVar2 + 0x30);
|
|
param_3[0xcd] = 0;
|
|
*(undefined4 *)((longlong)param_3 + 0x664) = uVar1;
|
|
lVar3 = param_3[1];
|
|
if (lVar3 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
FUN_1401b5c60(param_3,lVar3 + 1,0xffffffffffffffff);
|
|
if (param_3[1] <= lVar3) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
if ((ulonglong)param_3[2] < 0x65) {
|
|
plVar9 = param_3 + (lVar3 + 2) * 2;
|
|
}
|
|
else {
|
|
plVar9 = (longlong *)(lVar3 * 0x10 + *param_3);
|
|
}
|
|
*plVar9 = (longlong)local_a8;
|
|
plVar9[1] = (longlong)(param_3 + 0xcc);
|
|
puVar5 = puVar6;
|
|
if (*(int *)(lVar2 + 0x30) != 0) {
|
|
puVar5 = *(undefined8 **)(lVar2 + 0x28);
|
|
}
|
|
lVar3 = param_3[1];
|
|
local_a8 = (int *)CONCAT44(local_a8._4_4_,*(int *)(lVar2 + 0x30));
|
|
if (lVar3 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
FUN_1401b5c60(param_3,lVar3 + 1,0xffffffffffffffff);
|
|
if (param_3[1] <= lVar3) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
if ((ulonglong)param_3[2] < 0x65) {
|
|
plVar9 = param_3 + (lVar3 + 2) * 2;
|
|
}
|
|
else {
|
|
plVar9 = (longlong *)(lVar3 * 0x10 + *param_3);
|
|
}
|
|
*plVar9 = (longlong)local_a8;
|
|
plVar9[1] = (longlong)puVar5;
|
|
*(undefined4 *)(param_3 + 0xd6) = *(undefined4 *)(lVar2 + 0x48);
|
|
iVar14 = (int)param_3[0xd2];
|
|
if (-1 < iVar14) {
|
|
lVar3 = param_3[0xd2];
|
|
FUN_1401c2dc0(param_3 + 0xcf,(int)lVar3 + 1);
|
|
iVar13 = (int)lVar3 - iVar14;
|
|
if (0 < iVar13) {
|
|
puVar5 = puVar6;
|
|
if ((int)param_3[0xd2] != 0) {
|
|
puVar5 = (undefined8 *)param_3[0xd1];
|
|
}
|
|
memmove(puVar5 + (longlong)iVar14 + 1,puVar5 + iVar14,(longlong)iVar13 << 3);
|
|
}
|
|
if ((int)param_3[0xd2] != 0) {
|
|
puVar6 = (undefined8 *)param_3[0xd1];
|
|
}
|
|
puVar6[iVar14] = lVar2;
|
|
if (*(longlong *)(lVar2 + 0x10) == 0) {
|
|
return;
|
|
}
|
|
FUN_1401b5560(*(longlong *)(lVar2 + 0x10),lVar2);
|
|
return;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
puVar5 = (undefined8 *)((longlong)puVar5 + 1);
|
|
plVar9 = plVar9 + 7;
|
|
} while ((longlong)puVar5 < 6);
|
|
iVar14 = -1;
|
|
if (*(int *)(param_1 + 0x1b0) == 0) {
|
|
*(int *)(param_1 + 0x1d4) = *(int *)(param_1 + 0x1d4) + 1;
|
|
local_a8 = (int *)(param_1 + 0x28);
|
|
*(undefined8 *)(param_1 + 0x1c0) = 0;
|
|
*(undefined8 *)(param_1 + 0x1c8) = 0;
|
|
*(undefined4 *)(param_1 + 0x1d0) = 0;
|
|
local_res20 = 0;
|
|
puVar5 = puVar6;
|
|
do {
|
|
if ((local_res20 < 0) || (5 < local_res20)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6e0();
|
|
}
|
|
iVar13 = *local_a8;
|
|
while (0 < iVar13) {
|
|
lVar2 = *(longlong *)(local_a8 + -4);
|
|
if ((int)puVar5 == 0) {
|
|
iVar14 = *(int *)(param_1 + 0x1b0);
|
|
if (iVar14 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
iVar13 = *(int *)(param_1 + 0x1b0);
|
|
FUN_1401c2dc0(param_1 + 0x198,iVar13 + 1);
|
|
iVar13 = iVar13 - iVar14;
|
|
if (0 < iVar13) {
|
|
puVar10 = puVar6;
|
|
if (*(int *)(param_1 + 0x1b0) != 0) {
|
|
puVar10 = *(undefined8 **)(param_1 + 0x1a8);
|
|
}
|
|
memmove(puVar10 + (longlong)iVar14 + 1,puVar10 + iVar14,(longlong)iVar13 << 3);
|
|
}
|
|
puVar10 = puVar6;
|
|
if (*(int *)(param_1 + 0x1b0) != 0) {
|
|
puVar10 = *(undefined8 **)(param_1 + 0x1a8);
|
|
}
|
|
puVar10[iVar14] = lVar2;
|
|
*(int *)(param_1 + 0x1c0) = *(int *)(param_1 + 0x1c0) + *(int *)(lVar2 + 0x30);
|
|
iVar14 = *(int *)(lVar2 + 0x48);
|
|
}
|
|
else {
|
|
if ((DAT_140344d48 <= *(int *)(lVar2 + 0x30) + *(int *)(param_1 + 0x1c0)) ||
|
|
(iVar14 != *(int *)(lVar2 + 0x48))) goto LAB_1401b6ccd;
|
|
iVar13 = *(int *)(param_1 + 0x1b0);
|
|
if (iVar13 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
iVar11 = *(int *)(param_1 + 0x1b0);
|
|
FUN_1401c2dc0(param_1 + 0x198,iVar11 + 1);
|
|
iVar11 = iVar11 - iVar13;
|
|
if (0 < iVar11) {
|
|
puVar10 = puVar6;
|
|
if (*(int *)(param_1 + 0x1b0) != 0) {
|
|
puVar10 = *(undefined8 **)(param_1 + 0x1a8);
|
|
}
|
|
memmove(puVar10 + (longlong)iVar13 + 1,puVar10 + iVar13,(longlong)iVar11 << 3);
|
|
}
|
|
puVar10 = puVar6;
|
|
if (*(int *)(param_1 + 0x1b0) != 0) {
|
|
puVar10 = *(undefined8 **)(param_1 + 0x1a8);
|
|
}
|
|
puVar10[iVar13] = lVar2;
|
|
*(int *)(param_1 + 0x1c0) = *(int *)(param_1 + 0x1c0) + *(int *)(lVar2 + 0x30);
|
|
}
|
|
if (*(longlong *)(lVar2 + 0x10) != 0) {
|
|
FUN_1401b5560(*(longlong *)(lVar2 + 0x10),lVar2);
|
|
}
|
|
puVar5 = (undefined8 *)(ulonglong)((int)puVar5 + 1);
|
|
iVar13 = *local_a8;
|
|
}
|
|
local_res20 = local_res20 + 1;
|
|
local_a8 = local_a8 + 0xe;
|
|
} while (local_res20 < 6);
|
|
LAB_1401b6ccd:
|
|
}
|
|
if (*(int *)(param_1 + 0x1c0) < 1) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
FUN_1401b6440(param_3);
|
|
*(undefined4 *)(param_3 + 0xd5) = *(undefined4 *)(param_1 + 0x178);
|
|
local_a8 = (int *)CONCAT44(local_a8._4_4_,0x10);
|
|
*(undefined2 *)((longlong)param_3 + 0x6ac) = *(undefined2 *)(param_1 + 0x17c);
|
|
iVar13 = *(int *)(param_1 + 0x1c0) - *(int *)(param_1 + 0x1c8);
|
|
if (DAT_140344d48 < iVar13) {
|
|
iVar13 = DAT_140344d48;
|
|
}
|
|
param_3[0xce] = *(longlong *)(param_1 + 400);
|
|
*(undefined2 *)(param_3 + 0xcc) = 0xabcd;
|
|
*(undefined2 *)((longlong)param_3 + 0x662) = *(undefined2 *)(param_1 + 0x180);
|
|
*(undefined4 *)((longlong)param_3 + 0x664) = *(undefined4 *)(param_1 + 0x1c0);
|
|
*(undefined4 *)(param_3 + 0xcd) = *(undefined4 *)(param_1 + 0x1d4);
|
|
*(undefined4 *)((longlong)param_3 + 0x66c) = *(undefined4 *)(param_1 + 0x1c4);
|
|
lVar2 = param_3[1];
|
|
if (-1 < lVar2) {
|
|
FUN_1401b5c60(param_3,lVar2 + 1,0xffffffffffffffff);
|
|
if (param_3[1] <= lVar2) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
if ((ulonglong)param_3[2] < 0x65) {
|
|
plVar9 = param_3 + (lVar2 + 2) * 2;
|
|
}
|
|
else {
|
|
plVar9 = (longlong *)(lVar2 * 0x10 + *param_3);
|
|
}
|
|
*plVar9 = (longlong)local_a8;
|
|
plVar9[1] = (longlong)(param_3 + 0xcc);
|
|
*(int *)(param_3 + 0xd6) = iVar14;
|
|
iVar14 = *(int *)(param_1 + 0x1c8);
|
|
iVar11 = iVar14;
|
|
while( true ) {
|
|
if (iVar14 + iVar13 <= iVar11) {
|
|
*(int *)(param_1 + 0x1c4) = *(int *)(param_1 + 0x1c4) + 1;
|
|
if (*(int *)(param_1 + 0x1c8) == *(int *)(param_1 + 0x1c0)) {
|
|
iVar14 = *(int *)(param_1 + 0x1b0);
|
|
puVar5 = puVar6;
|
|
if (*(int *)(param_1 + 0x1b0) != 0) {
|
|
puVar5 = *(undefined8 **)(param_1 + 0x1a8);
|
|
}
|
|
if (iVar14 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
if (iVar14 != 0) {
|
|
lVar2 = param_3[0xd2];
|
|
FUN_1401c2dc0(param_3 + 0xcf,(int)lVar2 + iVar14);
|
|
puVar10 = puVar6;
|
|
if ((int)param_3[0xd2] != 0) {
|
|
puVar10 = (undefined8 *)param_3[0xd1];
|
|
}
|
|
_Size = (longlong)iVar14 << 3;
|
|
if (_Size < 0x21) {
|
|
puVar10 = puVar10 + (int)lVar2;
|
|
for (uVar12 = (longlong)iVar14 & 0x1fffffffffffffff; uVar12 != 0; uVar12 = uVar12 - 1)
|
|
{
|
|
uVar4 = *puVar5;
|
|
puVar5 = puVar5 + 1;
|
|
*puVar10 = uVar4;
|
|
puVar10 = puVar10 + 1;
|
|
}
|
|
}
|
|
else {
|
|
memcpy(puVar10 + (int)lVar2,puVar5,_Size);
|
|
}
|
|
}
|
|
FUN_1401c2dc0(param_1 + 0x198,0);
|
|
}
|
|
lVar2 = param_3[1];
|
|
puVar5 = puVar6;
|
|
puVar10 = puVar6;
|
|
if (0 < lVar2) {
|
|
do {
|
|
if (((longlong)puVar6 < 0) || (lVar2 <= (longlong)puVar6)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
if ((ulonglong)param_3[2] < 0x65) {
|
|
plVar9 = param_3 + ((longlong)puVar6 + 2) * 2;
|
|
}
|
|
else {
|
|
plVar9 = (longlong *)((longlong)puVar6 * 0x10 + *param_3);
|
|
}
|
|
puVar10 = (undefined8 *)(ulonglong)(uint)((int)puVar10 + (int)*plVar9);
|
|
uVar8 = (int)puVar5 + 1;
|
|
puVar6 = (undefined8 *)(longlong)(int)uVar8;
|
|
puVar5 = (undefined8 *)(ulonglong)uVar8;
|
|
} while ((longlong)puVar6 < lVar2);
|
|
}
|
|
FUN_1401e25f0(param_1 + 0x1d8,puVar10);
|
|
*(undefined8 *)(param_1 + 0x200) = param_2;
|
|
*(double *)(param_1 + 0x1f0) = (double)(int)puVar10 + *(double *)(param_1 + 0x1f0);
|
|
return;
|
|
}
|
|
iVar11 = *(int *)(param_1 + 0x1d0);
|
|
if ((iVar11 < 0) || (*(int *)(param_1 + 0x1b0) <= iVar11)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6e0();
|
|
}
|
|
lVar2 = *(longlong *)(*(longlong *)(param_1 + 0x1a8) + (longlong)iVar11 * 8);
|
|
iVar11 = *(int *)(lVar2 + 0x30) - *(int *)(param_1 + 0x1cc);
|
|
iVar7 = (iVar14 - *(int *)(param_1 + 0x1c8)) + iVar13;
|
|
if (iVar7 < iVar11) {
|
|
iVar11 = iVar7;
|
|
}
|
|
if (iVar11 < 1) break;
|
|
puVar5 = puVar6;
|
|
if (*(int *)(lVar2 + 0x30) != 0) {
|
|
puVar5 = *(undefined8 **)(lVar2 + 0x28);
|
|
}
|
|
iVar7 = *(int *)(param_1 + 0x1cc);
|
|
lVar3 = param_3[1];
|
|
local_a8._4_4_ = (undefined4)((ulonglong)local_a8 >> 0x20);
|
|
local_a8 = (int *)CONCAT44(local_a8._4_4_,iVar11);
|
|
if (lVar3 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
FUN_1401b5c60(param_3,lVar3 + 1,0xffffffffffffffff);
|
|
if (param_3[1] <= lVar3) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
if ((ulonglong)param_3[2] < 0x65) {
|
|
plVar9 = param_3 + (lVar3 + 2) * 2;
|
|
}
|
|
else {
|
|
plVar9 = (longlong *)(lVar3 * 0x10 + *param_3);
|
|
}
|
|
*plVar9 = (longlong)local_a8;
|
|
plVar9[1] = (longlong)iVar7 + (longlong)puVar5;
|
|
*(int *)(param_1 + 0x1cc) = *(int *)(param_1 + 0x1cc) + iVar11;
|
|
*(int *)(param_1 + 0x1c8) = *(int *)(param_1 + 0x1c8) + iVar11;
|
|
if (*(int *)(param_1 + 0x1cc) == *(int *)(lVar2 + 0x30)) {
|
|
*(int *)(param_1 + 0x1d0) = *(int *)(param_1 + 0x1d0) + 1;
|
|
*(undefined4 *)(param_1 + 0x1cc) = 0;
|
|
}
|
|
iVar11 = *(int *)(param_1 + 0x1c8);
|
|
}
|
|
FUN_1401b62c0(param_1);
|
|
FUN_14016d300(local_98,L"Unexpected at PacketQueue Pop!");
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_98,(ThrowInfo *)&DAT_1403417f8);
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
|