267 lines
8 KiB
C
267 lines
8 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x14020c2f0 FUN_14020c2f0
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
|
|
ulonglong FUN_14020c2f0(undefined8 param_1,int *param_2,longlong param_3,undefined8 param_4,
|
|
int param_5)
|
|
|
|
{
|
|
longlong lVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
ulonglong uVar4;
|
|
longlong lVar5;
|
|
int iVar6;
|
|
int iVar7;
|
|
ulonglong uVar8;
|
|
int iVar9;
|
|
undefined1 *puVar10;
|
|
uint uVar11;
|
|
code *pcVar12;
|
|
undefined1 auStack_18d8 [32];
|
|
uint local_18b8;
|
|
int local_18b4;
|
|
longlong local_18b0;
|
|
int local_18a8;
|
|
undefined1 local_18a0 [24];
|
|
int *local_1888;
|
|
uint local_1880;
|
|
undefined1 local_1878 [24];
|
|
undefined8 local_1860;
|
|
undefined1 auStack_1858 [24];
|
|
undefined1 local_1840 [6120];
|
|
ulonglong local_58;
|
|
|
|
local_58 = DAT_1403463c0 ^ (ulonglong)auStack_18d8;
|
|
local_18b0 = param_3;
|
|
local_1888 = param_2;
|
|
local_1860 = param_4;
|
|
iVar2 = FUN_1402010a0(param_2);
|
|
if (iVar2 < 8) {
|
|
iVar2 = 2;
|
|
}
|
|
else if (iVar2 < 0x25) {
|
|
iVar2 = 3;
|
|
}
|
|
else if (iVar2 < 0x8d) {
|
|
iVar2 = 4;
|
|
}
|
|
else if (iVar2 < 0x1c3) {
|
|
iVar2 = 5;
|
|
}
|
|
else if (iVar2 < 0x518) {
|
|
iVar2 = 6;
|
|
}
|
|
else {
|
|
iVar2 = (0xdc9 < iVar2) + 7;
|
|
}
|
|
uVar4 = FUN_140200df0(local_1840);
|
|
if ((int)uVar4 != 0) {
|
|
return uVar4;
|
|
}
|
|
iVar7 = iVar2 + -1;
|
|
uVar11 = 1 << (sbyte)iVar2;
|
|
iVar6 = 1 << ((byte)iVar7 & 0x1f);
|
|
local_18b4 = iVar6;
|
|
local_18b8 = uVar11;
|
|
for (iVar9 = iVar6; iVar9 < (int)uVar11; iVar9 = iVar9 + 1) {
|
|
uVar3 = FUN_140200df0(auStack_1858 + (longlong)iVar9 * 0x18);
|
|
if (uVar3 != 0) {
|
|
if (iVar6 < iVar9) {
|
|
uVar4 = (ulonglong)(uint)(iVar9 - local_18b4);
|
|
puVar10 = auStack_1858 + (longlong)iVar6 * 0x18;
|
|
do {
|
|
FUN_140200e50(puVar10);
|
|
puVar10 = puVar10 + 0x18;
|
|
uVar4 = uVar4 - 1;
|
|
} while (uVar4 != 0);
|
|
}
|
|
FUN_140200e50(local_1840);
|
|
return (ulonglong)uVar3;
|
|
}
|
|
param_3 = local_18b0;
|
|
}
|
|
uVar3 = FUN_140200df0(local_1878);
|
|
uVar4 = (ulonglong)uVar3;
|
|
if (uVar3 != 0) goto LAB_14020c7f4;
|
|
if (param_5 == 0) {
|
|
uVar3 = FUN_14020f3b0(local_1878,param_3);
|
|
uVar4 = (ulonglong)uVar3;
|
|
if (uVar3 == 0) {
|
|
pcVar12 = FUN_14020f230;
|
|
LAB_14020c4a2:
|
|
uVar3 = FUN_14020b170(param_1,param_3,local_1840);
|
|
uVar4 = (ulonglong)uVar3;
|
|
uVar11 = local_18b8;
|
|
if (uVar3 == 0) {
|
|
puVar10 = auStack_1858 + (longlong)local_18b4 * 0x18;
|
|
uVar3 = FUN_140200ef0(local_1840,puVar10);
|
|
lVar1 = local_18b0;
|
|
uVar4 = (ulonglong)uVar3;
|
|
uVar11 = local_18b8;
|
|
if (uVar3 == 0) {
|
|
iVar9 = 0;
|
|
if (0 < iVar7) {
|
|
do {
|
|
uVar3 = FUN_140201a20(puVar10,puVar10);
|
|
uVar4 = (ulonglong)uVar3;
|
|
uVar11 = local_18b8;
|
|
if (uVar3 != 0) goto LAB_14020c7ea;
|
|
uVar3 = (*pcVar12)(puVar10,lVar1,local_1878);
|
|
uVar4 = (ulonglong)uVar3;
|
|
uVar11 = local_18b8;
|
|
if (uVar3 != 0) goto LAB_14020c7ea;
|
|
iVar9 = iVar9 + 1;
|
|
} while (iVar9 < iVar7);
|
|
}
|
|
iVar9 = local_18b4 + 1;
|
|
iVar7 = local_18b4;
|
|
if (iVar9 < (int)local_18b8) {
|
|
do {
|
|
uVar3 = FUN_1402018b0(auStack_1858 + (longlong)iVar7 * 0x18,local_1840,
|
|
auStack_1858 + (longlong)iVar9 * 0x18);
|
|
uVar4 = (ulonglong)uVar3;
|
|
uVar11 = local_18b8;
|
|
if (uVar3 != 0) goto LAB_14020c7ea;
|
|
uVar3 = (*pcVar12)(auStack_1858 + (longlong)iVar9 * 0x18,lVar1,local_1878);
|
|
uVar4 = (ulonglong)uVar3;
|
|
uVar11 = local_18b8;
|
|
if (uVar3 != 0) goto LAB_14020c7ea;
|
|
iVar9 = iVar9 + 1;
|
|
iVar7 = iVar7 + 1;
|
|
} while (iVar9 < (int)local_18b8);
|
|
}
|
|
uVar3 = FUN_140200df0(local_18a0);
|
|
uVar4 = (ulonglong)uVar3;
|
|
uVar11 = local_18b8;
|
|
if (uVar3 == 0) {
|
|
FUN_14020b9f0(local_18a0,1);
|
|
iVar9 = 0;
|
|
uVar4 = 0;
|
|
iVar7 = 0;
|
|
local_18a8 = 1;
|
|
uVar11 = 0;
|
|
local_18b0 = (longlong)(*local_1888 + -1);
|
|
lVar5 = local_18b0;
|
|
LAB_14020c5e5:
|
|
while( true ) {
|
|
local_18a8 = local_18a8 + -1;
|
|
uVar8 = uVar4;
|
|
if (local_18a8 == 0) {
|
|
if (lVar5 == -1) {
|
|
if (((iVar9 != 2) || (iVar7 < 1)) || (iVar2 = 0, iVar7 < 1)) goto LAB_14020c7ca;
|
|
goto LAB_14020c760;
|
|
}
|
|
lVar5 = lVar5 + -1;
|
|
uVar8 = (ulonglong)*(uint *)(*(longlong *)(local_1888 + 4) + 4 + lVar5 * 4);
|
|
local_18a8 = 0x1c;
|
|
local_18b0 = lVar5;
|
|
}
|
|
local_1880 = (int)uVar8 * 2;
|
|
uVar4 = (ulonglong)local_1880;
|
|
uVar8 = uVar8 >> 0x1b;
|
|
if (iVar9 == 0) goto code_r0x00014020c62e;
|
|
if ((iVar9 != 1) || ((uVar8 & 1) != 0)) goto LAB_14020c632;
|
|
uVar3 = FUN_140201a20(local_18a0,local_18a0);
|
|
uVar4 = (ulonglong)uVar3;
|
|
if (uVar3 != 0) break;
|
|
uVar3 = (*pcVar12)(local_18a0,lVar1,local_1878);
|
|
uVar4 = (ulonglong)uVar3;
|
|
if (uVar3 != 0) break;
|
|
uVar4 = (ulonglong)local_1880;
|
|
lVar5 = local_18b0;
|
|
}
|
|
goto LAB_14020c7db;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
uVar3 = FUN_14020f1c0(param_3,local_1878);
|
|
uVar4 = (ulonglong)uVar3;
|
|
if (uVar3 == 0) {
|
|
pcVar12 = FUN_14020f0d0;
|
|
goto LAB_14020c4a2;
|
|
}
|
|
}
|
|
LAB_14020c7ea:
|
|
FUN_140200e50(local_1878);
|
|
LAB_14020c7f4:
|
|
FUN_140200e50(local_1840);
|
|
if (local_18b4 < (int)uVar11) {
|
|
puVar10 = auStack_1858 + (longlong)local_18b4 * 0x18;
|
|
uVar8 = (ulonglong)(uVar11 - local_18b4);
|
|
do {
|
|
FUN_140200e50(puVar10);
|
|
puVar10 = puVar10 + 0x18;
|
|
uVar8 = uVar8 - 1;
|
|
} while (uVar8 != 0);
|
|
}
|
|
return uVar4;
|
|
while( true ) {
|
|
uVar3 = (*pcVar12)(local_18a0,lVar1,local_1878);
|
|
uVar4 = (ulonglong)uVar3;
|
|
if (uVar3 != 0) goto LAB_14020c7db;
|
|
uVar11 = uVar11 * 2;
|
|
if ((local_18b8 & uVar11) != 0) {
|
|
uVar3 = FUN_1402018b0(local_18a0,local_1840,local_18a0);
|
|
uVar4 = (ulonglong)uVar3;
|
|
if (uVar3 != 0) goto LAB_14020c7db;
|
|
uVar3 = (*pcVar12)(local_18a0,lVar1,local_1878);
|
|
uVar4 = (ulonglong)uVar3;
|
|
if (uVar3 != 0) goto LAB_14020c7db;
|
|
}
|
|
iVar2 = iVar2 + 1;
|
|
if (iVar7 <= iVar2) break;
|
|
LAB_14020c760:
|
|
uVar3 = FUN_140201a20(local_18a0,local_18a0);
|
|
uVar4 = (ulonglong)uVar3;
|
|
if (uVar3 != 0) goto LAB_14020c7db;
|
|
}
|
|
LAB_14020c7ca:
|
|
FUN_14020ae90(local_18a0,local_1860);
|
|
uVar4 = 0;
|
|
LAB_14020c7db:
|
|
FUN_140200e50(local_18a0);
|
|
uVar11 = local_18b8;
|
|
goto LAB_14020c7ea;
|
|
code_r0x00014020c62e:
|
|
if ((uVar8 & 1) != 0) {
|
|
LAB_14020c632:
|
|
iVar7 = iVar7 + 1;
|
|
iVar9 = 2;
|
|
uVar11 = uVar11 | ((uint)uVar8 & 1) << ((sbyte)iVar2 - (char)iVar7 & 0x1fU);
|
|
lVar5 = local_18b0;
|
|
if (iVar7 == iVar2) {
|
|
iVar7 = 0;
|
|
if (iVar2 != 0) {
|
|
do {
|
|
uVar3 = FUN_140201a20(local_18a0,local_18a0);
|
|
uVar4 = (ulonglong)uVar3;
|
|
if (uVar3 != 0) goto LAB_14020c7db;
|
|
uVar3 = (*pcVar12)(local_18a0,lVar1,local_1878);
|
|
uVar4 = (ulonglong)uVar3;
|
|
if (uVar3 != 0) goto LAB_14020c7db;
|
|
iVar7 = iVar7 + 1;
|
|
} while (iVar7 < iVar2);
|
|
}
|
|
uVar11 = FUN_1402018b0(local_18a0,auStack_1858 + (longlong)(int)uVar11 * 0x18,local_18a0);
|
|
uVar4 = (ulonglong)uVar11;
|
|
if (uVar11 != 0) goto LAB_14020c7db;
|
|
uVar11 = (*pcVar12)(local_18a0,lVar1,local_1878);
|
|
uVar4 = (ulonglong)uVar11;
|
|
if (uVar11 != 0) goto LAB_14020c7db;
|
|
uVar4 = (ulonglong)local_1880;
|
|
iVar7 = 0;
|
|
iVar9 = 1;
|
|
uVar11 = 0;
|
|
lVar5 = local_18b0;
|
|
}
|
|
}
|
|
goto LAB_14020c5e5;
|
|
}
|
|
|