351 lines
11 KiB
C
351 lines
11 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x1401a2700 FUN_1401a2700
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
|
|
undefined8 FUN_1401a2700(longlong param_1,longlong param_2,uint *param_3,uint param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
longlong lVar2;
|
|
undefined8 *puVar3;
|
|
longlong *plVar4;
|
|
longlong lVar5;
|
|
longlong *plVar6;
|
|
bool bVar7;
|
|
undefined4 uVar8;
|
|
undefined2 uVar9;
|
|
char cVar10;
|
|
int iVar11;
|
|
longlong lVar12;
|
|
undefined8 *puVar13;
|
|
undefined8 *puVar14;
|
|
undefined8 uVar15;
|
|
ulonglong uVar16;
|
|
ulonglong uVar17;
|
|
longlong *plVar18;
|
|
double dVar19;
|
|
double dVar20;
|
|
undefined1 auStack_2a8 [32];
|
|
uint local_288;
|
|
undefined4 local_280;
|
|
uint local_278 [2];
|
|
undefined8 local_270;
|
|
undefined4 local_268;
|
|
undefined4 uStack_264;
|
|
undefined4 local_260;
|
|
undefined2 local_25c;
|
|
ulonglong local_258;
|
|
undefined4 local_250;
|
|
undefined **local_248;
|
|
undefined4 local_240;
|
|
undefined2 local_23c;
|
|
int local_238;
|
|
uint local_234;
|
|
longlong local_230;
|
|
undefined8 local_228;
|
|
undefined8 local_220;
|
|
undefined4 local_218;
|
|
undefined8 local_210;
|
|
undefined4 local_208;
|
|
undefined **local_200;
|
|
undefined4 local_1f8;
|
|
undefined2 local_1f4;
|
|
longlong local_1f0;
|
|
uint *local_1e8;
|
|
longlong local_1e0;
|
|
longlong local_1d8;
|
|
undefined1 local_1d0;
|
|
undefined8 local_1c8;
|
|
longlong local_1b8 [3];
|
|
undefined4 auStack_1a0 [74];
|
|
ulonglong local_78;
|
|
|
|
local_1c8 = 0xfffffffffffffffe;
|
|
local_78 = DAT_1403463c0 ^ (ulonglong)auStack_2a8;
|
|
if (9 < *(uint *)(param_2 + 0x18)) {
|
|
local_234 = param_4;
|
|
local_1f0 = param_2;
|
|
local_1e8 = param_3;
|
|
if (*(longlong *)(param_1 + 0x28) == 0) {
|
|
SetLastError(0);
|
|
dVar19 = (double)FUN_1401a1eb0(param_1);
|
|
local_278[0] = 0;
|
|
*param_3 = 0;
|
|
local_230 = param_1 + 0x50;
|
|
plVar18 = (longlong *)(param_1 + 0x38);
|
|
do {
|
|
local_1d8 = param_1 + 0x50;
|
|
FUN_14016db50(local_1d8);
|
|
local_1d0 = 1;
|
|
local_238 = *(int *)(param_1 + 0x48) * 3 + 3;
|
|
puVar13 = (undefined8 *)*plVar18;
|
|
local_268 = 0x402776a0;
|
|
uStack_264 = 1;
|
|
local_258 = local_258 & 0xffffffff00000000;
|
|
local_270 = 0;
|
|
puVar3 = puVar13;
|
|
local_260 = DAT_140344450;
|
|
local_25c = DAT_140344454;
|
|
do {
|
|
if (puVar3 == (undefined8 *)0x0) break;
|
|
local_200 = Proud::AddrPort::vftable;
|
|
local_228 = 0;
|
|
local_210 = 0;
|
|
local_220 = 0;
|
|
local_218 = 5;
|
|
local_208 = 0;
|
|
local_1f8 = DAT_140344450;
|
|
local_1f4 = DAT_140344454;
|
|
cVar10 = FUN_14019c560(puVar3,0,&local_270);
|
|
if (cVar10 == '\0') {
|
|
cVar10 = FUN_14019c2f0(puVar3,0,&local_270);
|
|
if (cVar10 != '\0') {
|
|
local_218 = 2;
|
|
local_208 = *(undefined4 *)((longlong)puVar3 + 0x304);
|
|
FUN_14016f840(&local_200);
|
|
puVar14 = puVar3 + 0x30;
|
|
goto LAB_1401a2b38;
|
|
}
|
|
cVar10 = FUN_14019c3c0(puVar3,0,&local_270);
|
|
if (cVar10 != '\0') {
|
|
local_218 = 3;
|
|
puVar14 = puVar3 + 0x18;
|
|
goto LAB_1401a2b38;
|
|
}
|
|
cVar10 = FUN_14019c490(puVar3,0,&local_270);
|
|
if (cVar10 != '\0') {
|
|
local_218 = 4;
|
|
puVar14 = puVar3 + 0x68;
|
|
goto LAB_1401a2b38;
|
|
}
|
|
}
|
|
else {
|
|
local_218 = 1;
|
|
puVar14 = puVar3 + 0x48;
|
|
LAB_1401a2b38:
|
|
FUN_14019bbb0(puVar14,0,0);
|
|
local_228 = puVar3[0x5d];
|
|
local_220 = CONCAT44((int)((ulonglong)local_270 >> 0x20),(undefined4)local_258);
|
|
if (puVar3[2] != 0) {
|
|
FUN_14019c130();
|
|
}
|
|
if (puVar3[2] != 0) {
|
|
FUN_14019c130(plVar18);
|
|
}
|
|
if (*(longlong *)(param_1 + 0x40) == 0) {
|
|
*plVar18 = (longlong)puVar3;
|
|
}
|
|
else {
|
|
*(undefined8 **)(*(longlong *)(param_1 + 0x40) + 8) = puVar3;
|
|
*puVar3 = *(undefined8 *)(param_1 + 0x40);
|
|
}
|
|
*(undefined8 **)(param_1 + 0x40) = puVar3;
|
|
puVar3[2] = plVar18;
|
|
*(int *)(param_1 + 0x48) = *(int *)(param_1 + 0x48) + 1;
|
|
uVar1 = *param_3;
|
|
if (((int)uVar1 < 0) || (*(int *)(param_2 + 0x18) <= (int)uVar1)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6e0();
|
|
}
|
|
puVar14 = (undefined8 *)((longlong)(int)uVar1 * 0x38 + *(longlong *)(param_2 + 0x10));
|
|
*puVar14 = local_228;
|
|
*(undefined4 *)(puVar14 + 1) = (undefined4)local_220;
|
|
*(undefined4 *)((longlong)puVar14 + 0xc) = local_220._4_4_;
|
|
*(undefined4 *)(puVar14 + 2) = local_218;
|
|
puVar14[3] = local_210;
|
|
*(undefined4 *)(puVar14 + 4) = local_208;
|
|
*(undefined4 *)(puVar14 + 6) = local_1f8;
|
|
*(undefined2 *)((longlong)puVar14 + 0x34) = local_1f4;
|
|
*param_3 = *param_3 + 1;
|
|
if (9 < *param_3) goto LAB_1401a2db3;
|
|
}
|
|
puVar3 = (undefined8 *)puVar3[1];
|
|
} while (puVar3 != puVar13);
|
|
lVar12 = *(longlong *)(param_1 + 0xa0);
|
|
uVar8 = DAT_140344450;
|
|
uVar9 = DAT_140344454;
|
|
while (DAT_140344450 = uVar8, DAT_140344454 = uVar9, lVar12 != 0) {
|
|
plVar4 = *(longlong **)(param_1 + 0x90);
|
|
if (plVar4 == (longlong *)0x0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x80004005);
|
|
}
|
|
lVar12 = plVar4[2];
|
|
lVar2 = plVar4[3];
|
|
local_1e0 = plVar4[4];
|
|
lVar5 = *plVar4;
|
|
*(longlong *)(param_1 + 0x90) = lVar5;
|
|
if (lVar5 == 0) {
|
|
*(undefined8 *)(param_1 + 0x98) = 0;
|
|
}
|
|
else {
|
|
*(undefined8 *)(lVar5 + 8) = 0;
|
|
}
|
|
plVar6 = *(longlong **)(param_1 + 0x88);
|
|
if (plVar6 == (longlong *)0x0) {
|
|
FUN_14016d970();
|
|
}
|
|
else {
|
|
(**(code **)(*plVar6 + 0x10))(plVar6,plVar4);
|
|
}
|
|
*(longlong *)(param_1 + 0xa0) = *(longlong *)(param_1 + 0xa0) + -1;
|
|
uVar15 = 0;
|
|
if (lVar12 != 0) {
|
|
uVar15 = *(undefined8 *)(lVar12 + 0x2e8);
|
|
}
|
|
uVar1 = *local_1e8;
|
|
if (((int)uVar1 < 0) || (*(int *)(local_1f0 + 0x18) <= (int)uVar1)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6e0();
|
|
}
|
|
puVar13 = (undefined8 *)((longlong)(int)uVar1 * 0x38 + *(longlong *)(local_1f0 + 0x10));
|
|
*puVar13 = uVar15;
|
|
puVar13[1] = 0;
|
|
*(int *)(puVar13 + 2) = (int)local_1e0;
|
|
puVar13[3] = lVar2;
|
|
*(undefined4 *)(puVar13 + 4) = 0;
|
|
*(undefined4 *)(puVar13 + 6) = uVar8;
|
|
*(undefined2 *)((longlong)puVar13 + 0x34) = uVar9;
|
|
*local_1e8 = *local_1e8 + 1;
|
|
if (9 < *local_1e8) goto LAB_1401a2db3;
|
|
param_3 = local_1e8;
|
|
param_2 = local_1f0;
|
|
uVar8 = DAT_140344450;
|
|
uVar9 = DAT_140344454;
|
|
lVar12 = *(longlong *)(param_1 + 0xa0);
|
|
}
|
|
if (*param_3 != 0) {
|
|
LAB_1401a2db3:
|
|
FUN_14016dbe0(local_230);
|
|
return 1;
|
|
}
|
|
FUN_14016dbe0(param_1 + 0x50);
|
|
local_1d0 = 0;
|
|
uVar16 = (ulonglong)local_234;
|
|
if ((local_234 == 0) ||
|
|
((local_234 != 0xffffffff &&
|
|
(dVar20 = (double)FUN_1401a1eb0(param_1), (double)uVar16 < (dVar20 - dVar19) * 1000.0)))
|
|
) {
|
|
return 0;
|
|
}
|
|
bVar7 = local_238 <= (int)local_278[0];
|
|
if (bVar7) {
|
|
local_278[0] = 0;
|
|
}
|
|
else {
|
|
local_278[0] = local_278[0] + 1;
|
|
}
|
|
Sleep((uint)bVar7);
|
|
} while( true );
|
|
}
|
|
uVar16 = 0;
|
|
local_278[0] = 0;
|
|
SetLastError(0);
|
|
lVar12 = FUN_14016f040();
|
|
local_280 = 0;
|
|
local_288 = param_4;
|
|
iVar11 = (**(code **)(lVar12 + 0x20))(*(undefined8 *)(param_1 + 0x28),local_1b8,10,local_278);
|
|
if (iVar11 == 0) {
|
|
GetLastError();
|
|
}
|
|
else if (local_278[0] != 0) {
|
|
*param_3 = local_278[0];
|
|
plVar18 = local_1b8 + 1;
|
|
uVar17 = uVar16;
|
|
do {
|
|
local_248 = Proud::AddrPort::vftable;
|
|
local_270 = 0;
|
|
local_258 = 0;
|
|
local_268 = 0;
|
|
uStack_264 = 0;
|
|
local_260 = 5;
|
|
local_250 = 0;
|
|
local_240 = DAT_140344450;
|
|
local_23c = DAT_140344454;
|
|
lVar12 = *plVar18;
|
|
iVar11 = (int)uVar17;
|
|
if (lVar12 == 0) {
|
|
uStack_264 = 0xffffffff;
|
|
if ((iVar11 < 0) || (*(int *)(param_2 + 0x18) <= iVar11)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6e0();
|
|
}
|
|
lVar12 = *(longlong *)(param_2 + 0x10);
|
|
*(undefined8 *)(uVar16 + lVar12) = 0;
|
|
}
|
|
else {
|
|
lVar2 = plVar18[-1];
|
|
if (lVar2 == 0) {
|
|
local_270 = 0;
|
|
}
|
|
else {
|
|
local_270 = *(undefined8 *)(lVar2 + 0x2e8);
|
|
}
|
|
if (lVar12 < 0) {
|
|
local_268 = (undefined4)plVar18[2];
|
|
uStack_264 = 0;
|
|
local_260 = 0;
|
|
local_250 = 0;
|
|
if ((iVar11 < 0) || (local_258 = lVar12, *(int *)(param_2 + 0x18) <= iVar11)) {
|
|
local_258 = lVar12;
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6e0();
|
|
}
|
|
}
|
|
else {
|
|
if (lVar2 == 0) {
|
|
LAB_1401a2935:
|
|
local_260 = 0;
|
|
local_258 = lVar12;
|
|
}
|
|
else if (lVar12 == lVar2 + 0x180) {
|
|
local_260 = 2;
|
|
local_250 = *(undefined4 *)(lVar2 + 0x304);
|
|
FUN_14016f840(&local_248,lVar2 + 0x2f0);
|
|
FUN_14019bbb0(lVar2 + 0x180,0,0);
|
|
}
|
|
else if (lVar12 == lVar2 + 0x240) {
|
|
local_260 = 1;
|
|
FUN_14019bbb0(lVar2 + 0x240,0,0);
|
|
}
|
|
else if (lVar12 == lVar2 + 0xc0) {
|
|
local_260 = 3;
|
|
FUN_14019bbb0(lVar2 + 0xc0,0,0);
|
|
}
|
|
else {
|
|
if (lVar12 != lVar2 + 0x340) goto LAB_1401a2935;
|
|
local_260 = 4;
|
|
FUN_14019bbb0(lVar2 + 0x340,0,0);
|
|
}
|
|
local_268 = (undefined4)plVar18[2];
|
|
uStack_264 = 0;
|
|
if ((iVar11 < 0) || (*(int *)(param_2 + 0x18) <= iVar11)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6e0();
|
|
}
|
|
}
|
|
uStack_264 = 0;
|
|
lVar12 = *(longlong *)(param_2 + 0x10);
|
|
*(undefined8 *)(uVar16 + lVar12) = local_270;
|
|
}
|
|
*(undefined4 *)(uVar16 + 8 + lVar12) = local_268;
|
|
*(undefined4 *)(uVar16 + 0xc + lVar12) = uStack_264;
|
|
*(undefined4 *)(uVar16 + 0x10 + lVar12) = local_260;
|
|
*(ulonglong *)(uVar16 + 0x18 + lVar12) = local_258;
|
|
*(undefined4 *)(uVar16 + 0x20 + lVar12) = local_250;
|
|
*(undefined4 *)(uVar16 + 0x30 + lVar12) = local_240;
|
|
*(undefined2 *)(uVar16 + 0x34 + lVar12) = local_23c;
|
|
uVar17 = (ulonglong)(iVar11 + 1U);
|
|
plVar18 = plVar18 + 4;
|
|
uVar16 = uVar16 + 0x38;
|
|
if (local_278[0] <= iVar11 + 1U) {
|
|
return 1;
|
|
}
|
|
} while( true );
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|