171 lines
4.5 KiB
C
171 lines
4.5 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x14016c400 FUN_14016c400
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
|
|
undefined1 FUN_14016c400(uint *param_1,int *param_2)
|
|
|
|
{
|
|
char cVar1;
|
|
undefined1 uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
int *piVar5;
|
|
undefined8 uVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
int *piVar9;
|
|
int iVar10;
|
|
int iVar11;
|
|
undefined1 auStack_118 [32];
|
|
char local_f8 [8];
|
|
int *local_f0;
|
|
undefined1 *local_e8;
|
|
int **local_e0;
|
|
int *local_d8;
|
|
undefined8 local_d0;
|
|
undefined1 *local_c8;
|
|
undefined1 local_c0 [136];
|
|
ulonglong local_38;
|
|
|
|
local_d0 = 0xfffffffffffffffe;
|
|
local_38 = DAT_1403463c0 ^ (ulonglong)auStack_118;
|
|
uVar8 = (int)*param_1 >> 0x1f & 7;
|
|
uVar3 = *param_1 + uVar8;
|
|
uVar7 = uVar3 & 0xfffffff8;
|
|
*param_1 = uVar7;
|
|
if (0 < (int)((uVar3 & 7) - uVar8)) {
|
|
*param_1 = uVar7 + 8;
|
|
}
|
|
cVar1 = FUN_14016b100(param_1,local_f8,1);
|
|
if (cVar1 == '\0') {
|
|
return 0;
|
|
}
|
|
FUN_14016b2e0(param_1);
|
|
cVar1 = FUN_14016ba10(param_1,&local_f0);
|
|
piVar5 = local_f0;
|
|
if (cVar1 == '\0') {
|
|
return 0;
|
|
}
|
|
iVar10 = (int)local_f0;
|
|
if ((iVar10 < 0) || (0x100000 < iVar10)) {
|
|
FUN_14016d300(&local_c8,L"CMessage.ReadString failed! length=%d",
|
|
(ulonglong)local_f0 & 0xffffffff);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(&local_c8,(ThrowInfo *)&DAT_1403417f8);
|
|
}
|
|
if (local_f8[0] == '\x01') {
|
|
local_f0 = param_2;
|
|
local_e8 = (undefined1 *)FUN_14013c6f0(param_2,iVar10 + 1);
|
|
*local_e8 = 0;
|
|
local_e8[iVar10] = 0;
|
|
uVar2 = FUN_14016b370(param_1,local_e8,(ulonglong)piVar5 & 0xffffffff);
|
|
FUN_14013c7e0(param_2);
|
|
return uVar2;
|
|
}
|
|
FUN_14016d8c0();
|
|
local_f0 = (int *)PTR_DAT_1403440a0;
|
|
iVar4 = iVar10 + 1;
|
|
local_e0 = &local_f0;
|
|
if (iVar4 < 1) {
|
|
iVar4 = 0;
|
|
}
|
|
iVar11 = 1;
|
|
if (1 < iVar4) {
|
|
iVar11 = iVar4;
|
|
}
|
|
if (iVar11 < 1) goto LAB_14016c5c3;
|
|
local_f0 = (int *)PTR_DAT_1403440a0;
|
|
if (iVar11 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
if (iVar11 == 0) {
|
|
FUN_14004eb70(&local_f0);
|
|
goto LAB_14016c5c3;
|
|
}
|
|
piVar5 = (int *)FUN_14016d940((longlong)iVar11 * 2 + 10);
|
|
if (piVar5 != (int *)0x0) {
|
|
*piVar5 = 0;
|
|
piVar5[1] = 1;
|
|
}
|
|
*piVar5 = iVar11;
|
|
iVar4 = 0;
|
|
if ((local_f0 != (int *)0x0) && (iVar4 = 0, local_f0 != (int *)PTR_DAT_1403440a0)) {
|
|
iVar4 = local_f0[-2];
|
|
}
|
|
piVar9 = (int *)PTR_DAT_1403440a0;
|
|
if (iVar11 < iVar4) {
|
|
LAB_14016c59d:
|
|
if (local_f0 != (int *)0x0) {
|
|
piVar9 = local_f0;
|
|
}
|
|
}
|
|
else {
|
|
iVar11 = 0;
|
|
if (local_f0 != (int *)0x0) {
|
|
if (local_f0 != (int *)PTR_DAT_1403440a0) {
|
|
iVar11 = local_f0[-2];
|
|
}
|
|
goto LAB_14016c59d;
|
|
}
|
|
}
|
|
FUN_14016d770(piVar5 + 2,piVar9,iVar11);
|
|
FUN_14004eb70(&local_f0);
|
|
local_f0 = piVar5 + 2;
|
|
LAB_14016c5c3:
|
|
FUN_14004e850(&local_f0);
|
|
local_d8 = local_f0;
|
|
if (local_f0 == (int *)0x0) {
|
|
local_d8 = (int *)PTR_DAT_1403440a0;
|
|
}
|
|
*(undefined2 *)local_d8 = 0;
|
|
*(undefined2 *)((longlong)local_d8 + (longlong)iVar10 * 2) = 0;
|
|
cVar1 = FUN_14016b370(param_1,local_d8,iVar10 * 2);
|
|
if (cVar1 == '\0') {
|
|
FUN_14004e560(&local_f0);
|
|
piVar5 = local_f0;
|
|
if (((local_f0 != (int *)0x0) && (local_f0 != (int *)PTR_DAT_1403440a0)) &&
|
|
(piVar9 = local_f0 + -2, piVar9 != (int *)0x0)) {
|
|
uVar6 = FUN_14016d8c0();
|
|
local_e0 = (int **)uVar6;
|
|
FUN_14016db50(uVar6);
|
|
local_d8 = (int *)CONCAT71(local_d8._1_7_,1);
|
|
piVar5 = piVar5 + -1;
|
|
*piVar5 = *piVar5 + -1;
|
|
if (*piVar5 == 0) {
|
|
FUN_14016d970(piVar9);
|
|
}
|
|
FUN_14016dbe0(uVar6);
|
|
}
|
|
return 0;
|
|
}
|
|
FUN_14004e560(&local_f0);
|
|
piVar5 = local_f0;
|
|
if (local_f0 == (int *)0x0) {
|
|
piVar5 = (int *)PTR_DAT_1403440a0;
|
|
}
|
|
local_c8 = local_c0;
|
|
FUN_14016ac90(&local_c8,piVar5,3);
|
|
FUN_14016bfb0(param_2,local_c8);
|
|
if (local_c8 != local_c0) {
|
|
free(local_c8);
|
|
}
|
|
piVar5 = local_f0;
|
|
if (((local_f0 != (int *)0x0) && (local_f0 != (int *)PTR_DAT_1403440a0)) &&
|
|
(piVar9 = local_f0 + -2, piVar9 != (int *)0x0)) {
|
|
uVar6 = FUN_14016d8c0();
|
|
local_e0 = (int **)uVar6;
|
|
FUN_14016db50(uVar6);
|
|
local_d8 = (int *)CONCAT71(local_d8._1_7_,1);
|
|
piVar5 = piVar5 + -1;
|
|
*piVar5 = *piVar5 + -1;
|
|
if (*piVar5 == 0) {
|
|
FUN_14016d970(piVar9);
|
|
}
|
|
FUN_14016dbe0(uVar6);
|
|
}
|
|
return 1;
|
|
}
|
|
|