478 lines
15 KiB
C
478 lines
15 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x1401d7b70 FUN_1401d7b70
|
|
* Pseudocode, not original source. */
|
|
|
|
void FUN_1401d7b70(longlong *param_1,int *param_2,byte *param_3,byte *param_4,int *param_5,
|
|
int *param_6)
|
|
|
|
{
|
|
char cVar1;
|
|
byte bVar2;
|
|
int iVar3;
|
|
undefined8 uVar4;
|
|
longlong lVar5;
|
|
undefined8 uVar6;
|
|
int *piVar7;
|
|
longlong *plVar8;
|
|
int iVar9;
|
|
undefined4 *puVar10;
|
|
undefined8 uVar11;
|
|
undefined4 *puVar12;
|
|
undefined4 *puVar13;
|
|
int *piVar14;
|
|
int iVar15;
|
|
int iVar16;
|
|
int iVar17;
|
|
ulonglong local_res10;
|
|
byte *local_res18;
|
|
byte *local_res20;
|
|
undefined8 in_stack_fffffffffffffdd8;
|
|
undefined4 uVar18;
|
|
int *local_218;
|
|
int *local_210;
|
|
int local_208;
|
|
undefined8 local_200;
|
|
int local_1f8;
|
|
undefined8 local_1e8;
|
|
undefined8 local_1e0;
|
|
undefined8 local_1d8;
|
|
undefined8 local_1d0;
|
|
undefined8 local_1c8;
|
|
undefined8 local_1b0;
|
|
longlong local_188;
|
|
undefined1 local_180;
|
|
int *local_178;
|
|
undefined8 local_170;
|
|
undefined1 local_168 [8];
|
|
undefined1 local_160 [8];
|
|
undefined1 local_158 [8];
|
|
undefined **local_150;
|
|
undefined8 local_148;
|
|
undefined8 local_140;
|
|
undefined8 local_138;
|
|
undefined8 local_130;
|
|
undefined **local_128;
|
|
undefined8 local_120;
|
|
undefined8 local_118;
|
|
undefined8 local_110;
|
|
undefined8 local_108;
|
|
undefined **local_100;
|
|
undefined8 local_f8;
|
|
undefined8 local_f0;
|
|
undefined8 local_e8;
|
|
undefined8 local_e0;
|
|
undefined8 local_c8;
|
|
|
|
uVar18 = (undefined4)((ulonglong)in_stack_fffffffffffffdd8 >> 0x20);
|
|
local_c8 = 0xfffffffffffffffe;
|
|
iVar15 = *param_2;
|
|
local_res18 = param_3;
|
|
local_res20 = param_4;
|
|
if (iVar15 != 0) {
|
|
if (iVar15 == 1) {
|
|
piVar7 = param_2 + 2;
|
|
local_1f8 = (int)(*piVar7 + (*piVar7 >> 0x1f & 7U)) >> 3;
|
|
local_res10 = local_res10 & 0xffffffffffffff00;
|
|
local_218 = piVar7;
|
|
local_188 = FUN_1401d3b20(param_1,param_2[0xc]);
|
|
(**(code **)(param_1[0xf] + 0x18))();
|
|
iVar15 = 0;
|
|
local_200 = (int *)((ulonglong)local_200._4_4_ << 0x20);
|
|
local_178 = piVar7;
|
|
cVar1 = FUN_14016bd20(piVar7,&local_200);
|
|
if (cVar1 != '\0') {
|
|
for (; local_208 = iVar15, iVar15 < (int)param_1[9]; iVar15 = iVar15 + 1) {
|
|
if ((iVar15 < 0) || ((int)param_1[9] <= iVar15)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6e0();
|
|
}
|
|
plVar8 = *(longlong **)(param_1[8] + (longlong)iVar15 * 8);
|
|
FUN_14016b040(local_178,local_1f8);
|
|
*(undefined2 *)(plVar8 + 1) = 0;
|
|
bVar2 = (**(code **)(*plVar8 + 0x10))(plVar8,piVar7,local_188);
|
|
local_res10 = CONCAT71(local_res10._1_7_,(byte)local_res10 | bVar2);
|
|
*param_3 = *param_3 | *(byte *)(plVar8 + 1);
|
|
*param_4 = *param_4 | *(byte *)((longlong)plVar8 + 9);
|
|
if (((bVar2 != 0) && (plVar8 != param_1 + 0x307)) && (plVar8 != param_1 + 0x2fe)) {
|
|
*param_5 = *param_5 + 1;
|
|
}
|
|
}
|
|
if ((byte)local_res10 != '\0') {
|
|
return;
|
|
}
|
|
}
|
|
FUN_14016b040(local_178,local_1f8);
|
|
if (param_1[0x2b0] == 0) {
|
|
return;
|
|
}
|
|
*param_6 = *param_6 + 1;
|
|
(**(code **)(*(longlong *)param_1[0x2b0] + 0x28))
|
|
((longlong *)param_1[0x2b0],(ulonglong)local_200 & 0xffffffff);
|
|
return;
|
|
}
|
|
if (iVar15 != 2) {
|
|
return;
|
|
}
|
|
piVar7 = param_2 + 2;
|
|
local_218 = piVar7;
|
|
uVar4 = FUN_1401d3b20(param_1,param_2[0xc]);
|
|
(**(code **)(param_1[0xf] + 0x18))();
|
|
if (param_1[0x2b0] == 0) {
|
|
return;
|
|
}
|
|
cVar1 = FUN_14016ba10(piVar7,&local_res10);
|
|
if (cVar1 != '\0') {
|
|
iVar15 = *piVar7;
|
|
iVar3 = FUN_14016afd0(piVar7);
|
|
if ((int)local_res10 == iVar3 - ((int)((iVar15 >> 0x1f & 7U) + iVar15) >> 3)) {
|
|
*(undefined1 *)(param_1[0x2b0] + 8) = 0;
|
|
*(undefined1 *)(param_1[0x2b0] + 9) = 0;
|
|
FUN_14016ec40(&local_1e8);
|
|
local_1e8 = (undefined **)CONCAT44(param_2[0xc],(undefined4)local_1e8);
|
|
local_1e8 = (undefined **)CONCAT71(local_1e8._1_7_,(char)param_2[0x12]);
|
|
iVar15 = *piVar7;
|
|
local_1b0 = uVar4;
|
|
lVar5 = FUN_14016b000(piVar7);
|
|
(**(code **)(*(longlong *)param_1[0x2b0] + 0x30))
|
|
((longlong *)param_1[0x2b0],param_2[0xc],&local_1e8,
|
|
lVar5 + ((int)(iVar15 + (iVar15 >> 0x1f & 7U)) >> 3),
|
|
CONCAT44(uVar18,(int)local_res10));
|
|
*param_3 = *param_3 | *(byte *)(param_1[0x2b0] + 8);
|
|
*param_4 = *param_4 | *(byte *)(param_1[0x2b0] + 9);
|
|
*param_5 = *param_5 + 1;
|
|
return;
|
|
}
|
|
}
|
|
local_188 = FUN_14016d940(0x60);
|
|
if (local_188 == 0) {
|
|
uVar4 = 0;
|
|
}
|
|
else {
|
|
uVar4 = FUN_140198ee0(local_188);
|
|
}
|
|
puVar10 = (undefined4 *)0x0;
|
|
FUN_140154b80(&local_res10,uVar4);
|
|
puVar12 = puVar10;
|
|
if (local_res10 != 0) {
|
|
puVar12 = *(undefined4 **)(local_res10 + 0x38);
|
|
}
|
|
*puVar12 = 0x1f;
|
|
if (local_res10 != 0) {
|
|
puVar10 = *(undefined4 **)(local_res10 + 0x38);
|
|
}
|
|
FUN_14004c050(puVar10 + 4,L"Invalid payload size in User Message!");
|
|
local_170 = 0;
|
|
FUN_140184b90(&local_170,&local_res10);
|
|
(**(code **)(*param_1 + 0x80))(param_1,&local_170);
|
|
FUN_140154b00(&local_res10);
|
|
return;
|
|
}
|
|
(**(code **)(param_1[0xf] + 0x18))();
|
|
if (param_1[0x2b0] == 0) {
|
|
return;
|
|
}
|
|
local_200 = param_2 + 0x14;
|
|
*(undefined1 *)(param_1[0x2b0] + 8) = 0;
|
|
*(undefined1 *)(param_1[0x2b0] + 9) = 0;
|
|
switch(*local_200) {
|
|
case 1:
|
|
iVar15 = FUN_14016af20(param_2 + 0x28);
|
|
uVar6 = FUN_14016dd50(param_2 + 0x28);
|
|
local_1e8 = Proud::CFastArray<unsigned_char,1>::vftable;
|
|
uVar4 = 0;
|
|
local_1e0 = 0;
|
|
local_1d8 = 0;
|
|
local_1d0 = 0;
|
|
local_1c8 = 0;
|
|
if (iVar15 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
FUN_14004f0e0(&local_1e8,iVar15);
|
|
uVar11 = local_1d8;
|
|
if ((int)local_1d0 == 0) {
|
|
uVar11 = uVar4;
|
|
}
|
|
FUN_14004f1a0(uVar11,uVar6,(longlong)iVar15);
|
|
local_1e8 = Proud::ByteArray::vftable;
|
|
local_res10 = FUN_14016d940(0x60);
|
|
uVar6 = uVar4;
|
|
if (local_res10 != 0) {
|
|
uVar6 = FUN_140198ee0(local_res10);
|
|
}
|
|
plVar8 = (longlong *)FUN_140154b80(local_158,uVar6);
|
|
if (*plVar8 != 0) {
|
|
uVar4 = *(undefined8 *)(*plVar8 + 0x38);
|
|
}
|
|
(**(code **)(*(longlong *)param_1[0x2b0] + 0x38))((longlong *)param_1[0x2b0],uVar4,&local_1e8);
|
|
FUN_140154b00(local_158);
|
|
FUN_14019a9e0(&local_1e8);
|
|
break;
|
|
case 2:
|
|
FUN_14016d8c0();
|
|
local_210 = (int *)PTR_DAT_1403440a0;
|
|
iVar3 = FUN_14016d740(&DAT_1402a4aa0);
|
|
local_res10 = CONCAT44(local_res10._4_4_,iVar3);
|
|
puVar10 = (undefined4 *)0x0;
|
|
iVar16 = 0;
|
|
iVar15 = iVar16;
|
|
if ((local_210 != (int *)0x0) && (local_210 != (int *)PTR_DAT_1403440a0)) {
|
|
iVar15 = local_210[-2];
|
|
}
|
|
iVar17 = 0;
|
|
iVar9 = iVar3;
|
|
if (((iVar3 <= iVar15) && (iVar9 = iVar17, local_210 != (int *)0x0)) &&
|
|
(local_210 != (int *)PTR_DAT_1403440a0)) {
|
|
iVar9 = local_210[-2];
|
|
}
|
|
iVar15 = 1;
|
|
if (1 < iVar9) {
|
|
iVar15 = iVar9;
|
|
}
|
|
puVar12 = puVar10;
|
|
if ((local_210 != (int *)0x0) &&
|
|
(puVar12 = (undefined4 *)0x0, local_210 != (int *)PTR_DAT_1403440a0)) {
|
|
puVar12 = (undefined4 *)(ulonglong)(uint)local_210[-2];
|
|
}
|
|
if ((int)puVar12 < iVar15) {
|
|
if (local_210 == (int *)0x0) {
|
|
local_210 = (int *)PTR_DAT_1403440a0;
|
|
}
|
|
if (iVar15 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
if (iVar15 == 0) {
|
|
FUN_14004eb70(&local_210);
|
|
}
|
|
else {
|
|
iVar9 = iVar17;
|
|
if ((local_210 != (int *)0x0) && (local_210 != (int *)PTR_DAT_1403440a0)) {
|
|
iVar9 = local_210[-2];
|
|
}
|
|
if (iVar15 != iVar9) {
|
|
piVar7 = (int *)FUN_14016d940((longlong)iVar15 * 2 + 10);
|
|
if (piVar7 != (int *)0x0) {
|
|
*piVar7 = 0;
|
|
piVar7[1] = 1;
|
|
}
|
|
*piVar7 = iVar15;
|
|
iVar3 = iVar17;
|
|
if ((local_210 != (int *)0x0) && (local_210 != (int *)PTR_DAT_1403440a0)) {
|
|
iVar3 = local_210[-2];
|
|
}
|
|
piVar14 = (int *)PTR_DAT_1403440a0;
|
|
if (iVar15 < iVar3) {
|
|
LAB_1401d8164:
|
|
if (local_210 != (int *)0x0) {
|
|
piVar14 = local_210;
|
|
}
|
|
}
|
|
else {
|
|
iVar15 = iVar16;
|
|
if (local_210 != (int *)0x0) {
|
|
if (local_210 != (int *)PTR_DAT_1403440a0) {
|
|
iVar15 = local_210[-2];
|
|
}
|
|
goto LAB_1401d8164;
|
|
}
|
|
}
|
|
FUN_14016d770(piVar7 + 2,piVar14,iVar15);
|
|
FUN_14004eb70(&local_210);
|
|
local_210 = piVar7 + 2;
|
|
iVar3 = (int)local_res10;
|
|
}
|
|
}
|
|
}
|
|
FUN_14004e850(&local_210);
|
|
piVar7 = local_210;
|
|
if (local_210 == (int *)0x0) {
|
|
piVar7 = (int *)PTR_DAT_1403440a0;
|
|
}
|
|
FUN_14016d770(piVar7,&DAT_1402a4aa0,iVar3);
|
|
piVar7 = local_210;
|
|
if (local_210 == (int *)0x0) {
|
|
piVar7 = (int *)PTR_DAT_1403440a0;
|
|
}
|
|
iVar3 = FUN_14016d740(piVar7);
|
|
iVar15 = 0;
|
|
if (0 < iVar3) {
|
|
iVar15 = iVar3;
|
|
}
|
|
if ((local_210 != (int *)0x0) && (local_210 != (int *)PTR_DAT_1403440a0)) {
|
|
iVar17 = local_210[-2];
|
|
}
|
|
if ((iVar15 < iVar17) || (iVar15 = iVar16, local_210 == (int *)0x0)) {
|
|
LAB_1401d8208:
|
|
if (((local_210 != (int *)PTR_DAT_1403440a0) && (local_210 != (int *)0x0)) &&
|
|
(local_210 + -2 != (int *)0x0)) {
|
|
local_210[-2] = iVar15;
|
|
*(undefined2 *)((longlong)local_210 + (longlong)iVar15 * 2) = 0;
|
|
}
|
|
}
|
|
else if (local_210 != (int *)PTR_DAT_1403440a0) {
|
|
iVar15 = local_210[-2];
|
|
goto LAB_1401d8208;
|
|
}
|
|
local_120 = 0;
|
|
local_118 = 0;
|
|
local_110 = 0;
|
|
local_108 = 0;
|
|
local_128 = Proud::ByteArray::vftable;
|
|
puVar12 = puVar10;
|
|
if (*(longlong *)(param_2 + 0x16) != 0) {
|
|
puVar12 = *(undefined4 **)(*(longlong *)(param_2 + 0x16) + 0x38);
|
|
}
|
|
FUN_140198f80(&local_218,*puVar12,1,&local_210,&local_128);
|
|
FUN_14019a9e0(&local_128);
|
|
piVar7 = local_210;
|
|
if (((local_210 != (int *)0x0) && (local_210 != (int *)PTR_DAT_1403440a0)) &&
|
|
(piVar14 = local_210 + -2, piVar14 != (int *)0x0)) {
|
|
uVar4 = FUN_14016d8c0();
|
|
local_180 = 0;
|
|
local_188 = uVar4;
|
|
FUN_14016db50(uVar4);
|
|
local_180 = 1;
|
|
piVar7 = piVar7 + -1;
|
|
*piVar7 = *piVar7 + -1;
|
|
if (*piVar7 == 0) {
|
|
FUN_14016d970(piVar14);
|
|
}
|
|
FUN_14016dbe0(uVar4);
|
|
param_3 = local_res18;
|
|
}
|
|
local_210 = (int *)PTR_DAT_1403440a0;
|
|
puVar12 = puVar10;
|
|
if (local_218 != (int *)0x0) {
|
|
puVar12 = *(undefined4 **)(local_218 + 0xe);
|
|
}
|
|
puVar12[8] = param_2[0x40];
|
|
*(short *)(puVar12 + 9) = (short)param_2[0x41];
|
|
puVar12 = puVar10;
|
|
if (local_218 != (int *)0x0) {
|
|
puVar12 = *(undefined4 **)(local_218 + 0xe);
|
|
}
|
|
puVar12[2] = param_2[0x42];
|
|
local_1e0 = 0;
|
|
local_1d8 = 0;
|
|
local_1d0 = 0;
|
|
local_1c8 = 0;
|
|
local_1e8 = Proud::ByteArray::vftable;
|
|
if (*(longlong *)(param_2 + 0x28) != 0) {
|
|
iVar15 = *(int *)(*(longlong *)(param_2 + 0x28) + 0x18);
|
|
LAB_1401d83db:
|
|
if (iVar15 < 1) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6e0();
|
|
}
|
|
if (*(longlong *)(param_2 + 0x2a) != 0) {
|
|
if (*(longlong *)(param_2 + 0x2a) == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d1e0();
|
|
}
|
|
iVar15 = param_2[0x2c];
|
|
goto LAB_1401d83db;
|
|
}
|
|
if (local_218 != (int *)0x0) {
|
|
puVar10 = *(undefined4 **)(local_218 + 0xe);
|
|
}
|
|
(**(code **)(*(longlong *)param_1[0x2b0] + 0x38))((longlong *)param_1[0x2b0],puVar10,&local_1e8)
|
|
;
|
|
FUN_14019a9e0(&local_1e8);
|
|
FUN_140154b00(&local_218);
|
|
break;
|
|
case 3:
|
|
uVar4 = 0;
|
|
if (*(longlong *)(param_2 + 0x16) != 0) {
|
|
uVar4 = *(undefined8 *)(*(longlong *)(param_2 + 0x16) + 0x38);
|
|
}
|
|
(**(code **)(*(longlong *)param_1[0x2b0] + 0x40))((longlong *)param_1[0x2b0],uVar4);
|
|
break;
|
|
default:
|
|
goto switchD_1401d7f5b_caseD_4;
|
|
case 8:
|
|
(**(code **)(*(longlong *)param_1[0x2b0] + 0x48))
|
|
((longlong *)param_1[0x2b0],param_2[0x2f],param_2[0x2e],param_2[0x3c],param_2 + 0x32);
|
|
break;
|
|
case 9:
|
|
(**(code **)(*(longlong *)param_1[0x2b0] + 0x50))
|
|
((longlong *)param_1[0x2b0],param_2[0x2f],param_2[0x2e],param_2[0x3c]);
|
|
FUN_1401d3910(param_1,param_2[0x2f]);
|
|
break;
|
|
case 10:
|
|
(**(code **)(*(longlong *)param_1[0x2b0] + 0x58))((longlong *)param_1[0x2b0],param_2[0x30],0);
|
|
break;
|
|
case 0xb:
|
|
puVar10 = (undefined4 *)0x0;
|
|
if (*(longlong *)(param_2 + 0x16) != 0) {
|
|
puVar10 = *(undefined4 **)(*(longlong *)(param_2 + 0x16) + 0x38);
|
|
}
|
|
(**(code **)(*(longlong *)param_1[0x2b0] + 0x58))
|
|
((longlong *)param_1[0x2b0],param_2[0x30],*puVar10);
|
|
break;
|
|
case 0xd:
|
|
if (param_1[0x2b0] != 0) {
|
|
puVar10 = (undefined4 *)0x0;
|
|
if (*(longlong *)(param_2 + 0x16) != 0) {
|
|
puVar10 = *(undefined4 **)(*(longlong *)(param_2 + 0x16) + 0x38);
|
|
}
|
|
(**(code **)(*(longlong *)param_1[0x2b0] + 0x60))((longlong *)param_1[0x2b0],*puVar10);
|
|
}
|
|
break;
|
|
case 0xe:
|
|
(**(code **)(*(longlong *)param_1[0x2b0] + 0x68))();
|
|
break;
|
|
case 0x14:
|
|
puVar10 = (undefined4 *)0x0;
|
|
local_f8 = 0;
|
|
local_f0 = 0;
|
|
local_e8 = 0;
|
|
local_e0 = 0;
|
|
local_100 = Proud::ByteArray::vftable;
|
|
lVar5 = *(longlong *)(param_2 + 0x16);
|
|
puVar13 = puVar10;
|
|
puVar12 = puVar10;
|
|
if (lVar5 != 0) {
|
|
puVar13 = *(undefined4 **)(lVar5 + 0x38);
|
|
puVar12 = *(undefined4 **)(lVar5 + 0x38);
|
|
}
|
|
plVar8 = (longlong *)FUN_140198f80(local_160,*puVar13,param_2[0x30],puVar12 + 4,&local_100);
|
|
if (*plVar8 != 0) {
|
|
puVar10 = *(undefined4 **)(*plVar8 + 0x38);
|
|
}
|
|
(**(code **)(*(longlong *)param_1[0x2b0] + 8))((longlong *)param_1[0x2b0],puVar10);
|
|
FUN_140154b00(local_160);
|
|
FUN_14019a9e0(&local_100);
|
|
break;
|
|
case 0x15:
|
|
puVar10 = (undefined4 *)0x0;
|
|
local_148 = 0;
|
|
local_140 = 0;
|
|
local_138 = 0;
|
|
local_130 = 0;
|
|
local_150 = Proud::ByteArray::vftable;
|
|
lVar5 = *(longlong *)(param_2 + 0x16);
|
|
puVar13 = puVar10;
|
|
puVar12 = puVar10;
|
|
if (lVar5 != 0) {
|
|
puVar13 = *(undefined4 **)(lVar5 + 0x38);
|
|
puVar12 = *(undefined4 **)(lVar5 + 0x38);
|
|
}
|
|
plVar8 = (longlong *)FUN_140198f80(local_168,*puVar13,param_2[0x30],puVar12 + 4,&local_150);
|
|
if (*plVar8 != 0) {
|
|
puVar10 = *(undefined4 **)(*plVar8 + 0x38);
|
|
}
|
|
(**(code **)(*(longlong *)param_1[0x2b0] + 0x10))((longlong *)param_1[0x2b0],puVar10);
|
|
FUN_140154b00(local_168);
|
|
FUN_14019a9e0(&local_150);
|
|
}
|
|
*param_3 = *(byte *)(param_1[0x2b0] + 8);
|
|
*param_4 = *(byte *)(param_1[0x2b0] + 9);
|
|
*param_6 = *param_6 + 1;
|
|
switchD_1401d7f5b_caseD_4:
|
|
return;
|
|
}
|
|
|