724 lines
24 KiB
C
724 lines
24 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x140091f40 FUN_140091f40
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
|
|
ulonglong FUN_140091f40(longlong param_1,longlong *param_2,undefined ***param_3,ulonglong param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined *puVar2;
|
|
void *pvVar3;
|
|
int iVar4;
|
|
DWORD DVar5;
|
|
DWORD DVar6;
|
|
DWORD DVar7;
|
|
byte *pbVar8;
|
|
uint *puVar9;
|
|
longlong *plVar10;
|
|
undefined ***pppuVar11;
|
|
byte **ppbVar12;
|
|
int *piVar13;
|
|
undefined8 *puVar14;
|
|
byte *pbVar15;
|
|
ulonglong uVar16;
|
|
byte *pbVar17;
|
|
byte *pbVar18;
|
|
uint uVar19;
|
|
byte *pbVar20;
|
|
uint *puVar21;
|
|
wchar_t *pwVar22;
|
|
LPCWSTR pWVar23;
|
|
longlong *plVar24;
|
|
uint uVar25;
|
|
longlong lVar26;
|
|
undefined *puVar27;
|
|
SIZE_T SVar28;
|
|
undefined8 uVar29;
|
|
undefined ***pppuVar30;
|
|
uint **ppuVar31;
|
|
uint *puVar32;
|
|
uint uVar33;
|
|
uint uVar35;
|
|
longlong lVar36;
|
|
double dVar37;
|
|
undefined1 auStackY_488 [32];
|
|
uint *local_458;
|
|
undefined ***local_450;
|
|
byte *local_448;
|
|
char *local_440;
|
|
byte *local_438;
|
|
undefined **local_430;
|
|
longlong *local_428;
|
|
longlong *local_420;
|
|
ulonglong local_418;
|
|
undefined8 local_410;
|
|
undefined *local_408;
|
|
undefined **local_400;
|
|
undefined8 local_3f8;
|
|
byte *local_3f0;
|
|
undefined8 local_3e8;
|
|
undefined8 local_3e0;
|
|
undefined **local_3d8;
|
|
longlong *local_3d0;
|
|
byte *local_3c8;
|
|
ulonglong local_3c0;
|
|
undefined4 local_3b8;
|
|
undefined4 local_3b4;
|
|
undefined **local_3b0;
|
|
undefined8 local_3a8;
|
|
byte *local_3a0;
|
|
undefined8 local_398;
|
|
undefined8 local_390;
|
|
undefined **local_388;
|
|
longlong local_380;
|
|
byte *local_378;
|
|
undefined8 local_370;
|
|
undefined4 local_368;
|
|
undefined4 local_364;
|
|
undefined4 *local_360;
|
|
char *local_358;
|
|
undefined **local_350;
|
|
undefined8 local_348;
|
|
undefined8 local_340;
|
|
undefined8 local_338;
|
|
undefined8 local_330;
|
|
int *local_328;
|
|
undefined1 local_320;
|
|
byte **local_318;
|
|
undefined1 local_310;
|
|
int *local_308;
|
|
undefined1 local_300;
|
|
undefined ***local_2f8;
|
|
undefined1 local_2f0;
|
|
undefined8 local_2e8;
|
|
int *local_2e0;
|
|
undefined1 local_2d8;
|
|
exception local_2d0 [24];
|
|
exception local_2b8 [24];
|
|
exception local_2a0 [72];
|
|
exception local_258 [72];
|
|
exception local_210 [72];
|
|
exception local_1c8 [72];
|
|
undefined8 local_180 [3];
|
|
char *local_168;
|
|
char local_160 [136];
|
|
char *local_d8;
|
|
char local_d0 [136];
|
|
ulonglong local_48;
|
|
byte *pbVar34;
|
|
|
|
pppuVar30 = &local_388;
|
|
local_2e8 = 0xfffffffffffffffe;
|
|
local_48 = DAT_1401ac5a0 ^ (ulonglong)auStackY_488;
|
|
local_2e0 = (int *)(param_1 + 0xb8);
|
|
local_450 = param_3;
|
|
FUN_14006b350(local_2e0);
|
|
local_2d8 = 1;
|
|
if ((*(longlong **)(param_1 + 0x6a0) != (longlong *)0x0) &&
|
|
(**(longlong **)(param_1 + 0x6a0) != 0)) goto LAB_140092d71;
|
|
DVar5 = *(DWORD *)((longlong)param_2 + 0x54);
|
|
if (DVar5 == 0) {
|
|
DVar5 = FUN_14006c0c0();
|
|
*(DWORD *)((longlong)param_2 + 0x54) = DVar5;
|
|
}
|
|
if ((int)DVar5 < 0) {
|
|
FUN_14006ba50(local_210,L"Invalid thread count",param_3,param_4);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_210,(ThrowInfo *)&DAT_1401a93e8);
|
|
}
|
|
uVar16 = (ulonglong)param_3 & 0xffffffffffffff00;
|
|
ppuVar31 = (uint **)(param_4 & 0xffffffffffffff00);
|
|
pbVar15 = (byte *)0x0;
|
|
uVar25 = 0;
|
|
pbVar17 = pbVar15;
|
|
pbVar18 = pbVar15;
|
|
if (0 < (int)param_2[6]) {
|
|
do {
|
|
if (((longlong)pbVar17 < 0) || ((int)param_2[6] <= (int)pbVar18)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(pbVar17,pbVar18,uVar16,ppuVar31);
|
|
}
|
|
if (*(int *)(param_2[5] + (longlong)pbVar17 * 4) == 0) {
|
|
ppuVar31 = (uint **)CONCAT71((int7)((ulonglong)ppuVar31 >> 8),1);
|
|
}
|
|
else {
|
|
uVar16 = CONCAT71((int7)(uVar16 >> 8),1);
|
|
}
|
|
uVar19 = (int)pbVar18 + 1;
|
|
pbVar18 = (byte *)(ulonglong)uVar19;
|
|
pbVar17 = pbVar17 + 1;
|
|
} while ((int)uVar19 < (int)param_2[6]);
|
|
if (((char)ppuVar31 != '\0') && ((char)uVar16 != '\0')) {
|
|
FUN_14006ba50(local_258,
|
|
L"Cannot assign non-zero UDP port number with zero UDP port number! All non-zero or all zero must be guaranteed!"
|
|
,uVar16,ppuVar31);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_258,(ThrowInfo *)&DAT_1401a93e8);
|
|
}
|
|
}
|
|
iVar1 = *(int *)((longlong)param_2 + 0x5c);
|
|
if (((iVar1 != 0x80) && (iVar1 != 0xc0)) && (iVar1 != 0x100)) {
|
|
FUN_14006ba50(local_1c8,L"Invalid key length!",uVar16,ppuVar31);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_1c8,(ThrowInfo *)&DAT_1401a93e8);
|
|
}
|
|
local_3d8 = Proud::CFastArray<int,0>::vftable;
|
|
if (DAT_1401ac8a0 != 5) {
|
|
FUN_140078250();
|
|
}
|
|
local_3d0 = (longlong *)param_2[4];
|
|
local_3b4 = *(undefined4 *)((longlong)param_2 + 0x3c);
|
|
local_3c8 = (byte *)0x0;
|
|
local_3c0 = 0;
|
|
local_3b8 = 0;
|
|
iVar1 = (int)param_2[6];
|
|
lVar36 = (longlong)iVar1;
|
|
if (iVar1 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
FUN_140063f80((longlong)&local_3d8,iVar1,uVar16,(longlong)ppuVar31);
|
|
pbVar17 = local_3c8;
|
|
iVar4 = (int)local_3c0;
|
|
pbVar18 = local_3c8;
|
|
if ((int)local_3c0 == 0) {
|
|
pbVar18 = pbVar15;
|
|
}
|
|
pbVar20 = pbVar15;
|
|
if ((int)param_2[6] != 0) {
|
|
pbVar20 = (byte *)param_2[5];
|
|
}
|
|
if (0 < iVar1) {
|
|
lVar26 = (longlong)pbVar20 - (longlong)pbVar18;
|
|
do {
|
|
*(undefined4 *)pbVar18 = *(undefined4 *)(pbVar18 + lVar26);
|
|
pbVar18 = pbVar18 + 4;
|
|
lVar36 = lVar36 + -1;
|
|
} while (lVar36 != 0);
|
|
}
|
|
pbVar18 = local_3c8;
|
|
if ((int)local_3c0 == 0) {
|
|
pbVar18 = pbVar15;
|
|
}
|
|
pbVar20 = (byte *)(local_3c0 & 0xffffffff);
|
|
FUN_14008cc20((longlong)pbVar18,(int)local_3c0,0);
|
|
uVar19 = iVar4 - 1;
|
|
puVar27 = (undefined *)(ulonglong)uVar19;
|
|
pbVar8 = pbVar15;
|
|
pbVar34 = pbVar15;
|
|
if (0 < (int)uVar19) {
|
|
do {
|
|
if (((longlong)pbVar8 < 0) || (iVar4 <= (int)pbVar34)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(pbVar18,pbVar20,puVar27,ppuVar31);
|
|
}
|
|
pbVar20 = pbVar8 + 1;
|
|
if ((longlong)pbVar20 < 0) {
|
|
LAB_1400921bc:
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(pbVar18,pbVar20,puVar27,ppuVar31);
|
|
}
|
|
uVar33 = (int)pbVar34 + 1;
|
|
pbVar34 = (byte *)(ulonglong)uVar33;
|
|
if (iVar4 <= (int)uVar33) goto LAB_1400921bc;
|
|
uVar35 = *(uint *)(pbVar17 + (longlong)pbVar8 * 4);
|
|
pbVar18 = (byte *)(ulonglong)uVar35;
|
|
if ((uVar35 == *(uint *)(pbVar17 + (longlong)pbVar8 * 4 + 4)) && (uVar35 != 0)) {
|
|
FUN_14006ba50(local_2a0,L"Cannot add duplicated UDP port number!",puVar27,ppuVar31);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_2a0,(ThrowInfo *)&DAT_1401a93e8);
|
|
}
|
|
pbVar8 = pbVar20;
|
|
} while ((int)uVar33 < (int)uVar19);
|
|
}
|
|
local_430 = Proud::CFastArray<Proud::StringT<char,Proud::AnsiStrTraits>,0>::vftable;
|
|
local_428 = (longlong *)0x0;
|
|
local_420 = (longlong *)0x0;
|
|
local_418 = 0;
|
|
local_410 = 0;
|
|
pppuVar11 = &local_430;
|
|
FUN_140071210((longlong)pppuVar11,pbVar20,(ulonglong)puVar27,ppuVar31);
|
|
DVar5 = 0;
|
|
if ((1 < (int)local_418) &&
|
|
(((puVar2 = (undefined *)param_2[1], puVar2 == (undefined *)0x0 ||
|
|
(puVar2 == PTR_DAT_1401ac010)) || (*(int *)(puVar2 + -8) == 0)))) {
|
|
FUN_14006cb70(pppuVar11,pbVar20,puVar27,ppuVar31);
|
|
local_458 = (uint *)PTR_DAT_1401ac010;
|
|
uVar19 = FUN_14006c9f0(
|
|
L"Server has multiple network devices, however, no device is specified for listening. Is it your intention?"
|
|
);
|
|
pbVar18 = pbVar15;
|
|
if ((local_458 != (uint *)0x0) &&
|
|
(pbVar18 = (byte *)0x0, local_458 != (uint *)PTR_DAT_1401ac010)) {
|
|
pbVar18 = (byte *)(ulonglong)local_458[-2];
|
|
}
|
|
uVar33 = uVar19;
|
|
if ((((int)uVar19 <= (int)pbVar18) && (uVar33 = uVar25, local_458 != (uint *)0x0)) &&
|
|
(local_458 != (uint *)PTR_DAT_1401ac010)) {
|
|
uVar33 = local_458[-2];
|
|
}
|
|
uVar35 = 1;
|
|
if (1 < (int)uVar33) {
|
|
uVar35 = uVar33;
|
|
}
|
|
uVar33 = uVar25;
|
|
if ((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1401ac010)) {
|
|
uVar33 = local_458[-2];
|
|
}
|
|
if ((int)uVar33 < (int)uVar35) {
|
|
if (local_458 == (uint *)0x0) {
|
|
local_458 = (uint *)PTR_DAT_1401ac010;
|
|
}
|
|
if ((int)uVar35 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
if (uVar35 == 0) {
|
|
FUN_1400031e0((longlong *)&local_458,PTR_DAT_1401ac010,pbVar18,ppuVar31);
|
|
}
|
|
else {
|
|
uVar33 = uVar25;
|
|
if ((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1401ac010)) {
|
|
uVar33 = local_458[-2];
|
|
}
|
|
if (uVar35 != uVar33) {
|
|
puVar9 = (uint *)FUN_14006cbf0((longlong)(int)uVar35 * 2 + 10);
|
|
if (puVar9 != (uint *)0x0) {
|
|
*puVar9 = 0;
|
|
puVar9[1] = 1;
|
|
}
|
|
*puVar9 = uVar35;
|
|
DVar7 = DVar5;
|
|
if ((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1401ac010)) {
|
|
DVar7 = local_458[-2];
|
|
}
|
|
puVar21 = (uint *)PTR_DAT_1401ac010;
|
|
if ((int)uVar35 < (int)DVar7) {
|
|
LAB_140092321:
|
|
if (local_458 != (uint *)0x0) {
|
|
puVar21 = local_458;
|
|
}
|
|
}
|
|
else {
|
|
uVar35 = uVar25;
|
|
if (local_458 != (uint *)0x0) {
|
|
if (local_458 != (uint *)PTR_DAT_1401ac010) {
|
|
uVar35 = local_458[-2];
|
|
}
|
|
goto LAB_140092321;
|
|
}
|
|
}
|
|
uVar16 = (ulonglong)uVar35;
|
|
puVar32 = puVar21;
|
|
FUN_14006ca20(puVar9 + 2,puVar21,uVar35);
|
|
FUN_1400031e0((longlong *)&local_458,puVar21,uVar16,puVar32);
|
|
local_458 = puVar9 + 2;
|
|
}
|
|
}
|
|
}
|
|
FUN_140002e40((longlong *)&local_458);
|
|
puVar9 = local_458;
|
|
if (local_458 == (uint *)0x0) {
|
|
puVar9 = (uint *)PTR_DAT_1401ac010;
|
|
}
|
|
FUN_14006ca20(puVar9,
|
|
L"Server has multiple network devices, however, no device is specified for listening. Is it your intention?"
|
|
,uVar19);
|
|
puVar9 = local_458;
|
|
if (local_458 == (uint *)0x0) {
|
|
puVar9 = (uint *)PTR_DAT_1401ac010;
|
|
}
|
|
DVar6 = FUN_14006c9f0((short *)puVar9);
|
|
DVar7 = 0;
|
|
if (0 < (int)DVar6) {
|
|
DVar7 = DVar6;
|
|
}
|
|
DVar6 = DVar5;
|
|
if ((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1401ac010)) {
|
|
DVar6 = local_458[-2];
|
|
}
|
|
if (((int)DVar7 < (int)DVar6) || (DVar7 = DVar5, local_458 == (uint *)0x0)) {
|
|
LAB_1400923c4:
|
|
if (((local_458 != (uint *)PTR_DAT_1401ac010) && (local_458 != (uint *)0x0)) &&
|
|
(local_458 + -2 != (DWORD *)0x0)) {
|
|
local_458[-2] = DVar7;
|
|
*(undefined2 *)((longlong)local_458 + (longlong)(int)DVar7 * 2) = 0;
|
|
}
|
|
}
|
|
else if (local_458 != (uint *)PTR_DAT_1401ac010) {
|
|
DVar7 = local_458[-2];
|
|
goto LAB_1400923c4;
|
|
}
|
|
local_348 = 0;
|
|
local_340 = 0;
|
|
local_338 = 0;
|
|
local_330 = 0;
|
|
local_350 = Proud::ByteArray::vftable;
|
|
ppuVar31 = &local_458;
|
|
uVar29 = 0;
|
|
plVar10 = FUN_140078c10((longlong *)&local_360,1,0,(longlong *)ppuVar31,(longlong)&local_350);
|
|
FUN_14008e530(param_1 + -0xa8,plVar10,uVar29,ppuVar31);
|
|
pppuVar11 = &local_350;
|
|
FUN_140078360(pppuVar11);
|
|
puVar9 = local_458;
|
|
if (((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1401ac010)) &&
|
|
(puVar21 = local_458 + -2, puVar21 != (uint *)0x0)) {
|
|
pppuVar11 = (undefined ***)FUN_14006cb70(pppuVar11,plVar10,uVar29,ppuVar31);
|
|
local_2f8 = pppuVar11;
|
|
FUN_14006b350((int *)pppuVar11);
|
|
local_2f0 = 1;
|
|
puVar9 = puVar9 + -1;
|
|
*puVar9 = *puVar9 - 1;
|
|
if (*puVar9 == 0) {
|
|
FUN_14006cc60(puVar21);
|
|
}
|
|
FUN_14006b3e0((longlong)pppuVar11);
|
|
local_2f0 = 0;
|
|
}
|
|
local_458 = (uint *)PTR_DAT_1401ac010;
|
|
FUN_14006cb70(pppuVar11,plVar10,uVar29,ppuVar31);
|
|
local_438 = PTR_DAT_1401ac010;
|
|
plVar10 = FUN_14006c8a0((longlong *)&local_408,plVar10,uVar29,ppuVar31);
|
|
puVar27 = (undefined *)*plVar10;
|
|
if ((undefined *)*plVar10 == (undefined *)0x0) {
|
|
puVar27 = PTR_DAT_1401ac010;
|
|
}
|
|
pwVar22 = L"No NIC binding though multiple NIC detected##Process=%s";
|
|
ppbVar12 = &local_438;
|
|
FUN_140053d20((longlong *)ppbVar12,L"No NIC binding though multiple NIC detected##Process=%s",
|
|
puVar27,ppuVar31);
|
|
if (((local_408 != (undefined *)0x0) && (local_408 != PTR_DAT_1401ac010)) &&
|
|
(local_408 + -8 != (undefined *)0x0)) {
|
|
ppbVar12 = (byte **)FUN_14006cb70(ppbVar12,pwVar22,puVar27,ppuVar31);
|
|
local_318 = ppbVar12;
|
|
FUN_14006b350((int *)ppbVar12);
|
|
local_310 = 1;
|
|
piVar13 = (int *)(local_408 + -4);
|
|
*piVar13 = *piVar13 + -1;
|
|
if (*piVar13 == 0) {
|
|
FUN_14006cc60(local_408 + -8);
|
|
}
|
|
FUN_14006b3e0((longlong)ppbVar12);
|
|
local_310 = 0;
|
|
}
|
|
local_408 = PTR_DAT_1401ac010;
|
|
FUN_14006cb70(ppbVar12,pwVar22,puVar27,ppuVar31);
|
|
pbVar18 = local_438;
|
|
local_448 = PTR_DAT_1401ac010;
|
|
if (PTR_DAT_1401ac010 == (undefined *)0x0) {
|
|
local_448 = pbVar15;
|
|
}
|
|
if (local_438 != PTR_DAT_1401ac010) {
|
|
piVar13 = (int *)FUN_14006cb70(ppbVar12,pwVar22,puVar27,ppuVar31);
|
|
local_308 = piVar13;
|
|
FUN_14006b350(piVar13);
|
|
local_300 = 1;
|
|
FUN_1400031e0((longlong *)&local_448,pwVar22,puVar27,ppuVar31);
|
|
local_448 = pbVar18;
|
|
if (((pbVar18 != PTR_DAT_1401ac010) && (pbVar18 != (byte *)0x0)) && (pbVar18 != (byte *)0x8))
|
|
{
|
|
*(int *)(pbVar18 + -4) = *(int *)(pbVar18 + -4) + 1;
|
|
}
|
|
FUN_14006b3e0((longlong)piVar13);
|
|
local_300 = 0;
|
|
}
|
|
ppbVar12 = &local_448;
|
|
FUN_14006fa80((longlong *)ppbVar12,pwVar22,puVar27,ppuVar31);
|
|
if (((pbVar18 != (byte *)0x0) && (pbVar18 != PTR_DAT_1401ac010)) &&
|
|
(pbVar18 + -8 != (byte *)0x0)) {
|
|
piVar13 = (int *)FUN_14006cb70(ppbVar12,pwVar22,puVar27,ppuVar31);
|
|
local_328 = piVar13;
|
|
FUN_14006b350(piVar13);
|
|
local_320 = 1;
|
|
pbVar20 = pbVar18 + -4;
|
|
*(int *)pbVar20 = *(int *)pbVar20 + -1;
|
|
if (*(int *)pbVar20 == 0) {
|
|
FUN_14006cc60(pbVar18 + -8);
|
|
}
|
|
FUN_14006b3e0((longlong)piVar13);
|
|
local_320 = 0;
|
|
}
|
|
local_438 = PTR_DAT_1401ac010;
|
|
}
|
|
dVar37 = (double)param_2[0x16];
|
|
if ((double)param_2[0x16] <= 0.0) {
|
|
dVar37 = DAT_1401ac1a0;
|
|
}
|
|
*(double *)(param_1 + 0x778) = dVar37;
|
|
*(undefined1 *)(param_1 + 0x1a4) = *(undefined1 *)((longlong)param_2 + 0x65);
|
|
*(undefined1 *)(param_1 + 0x1a5) = *(undefined1 *)((longlong)param_2 + 100);
|
|
*(undefined1 *)(param_1 + 0x1a6) = *(undefined1 *)((longlong)param_2 + 0x67);
|
|
*(char *)(param_1 + 0x198) = (char)param_2[0xf];
|
|
*(char *)(param_1 + 0x1c0) = (char)param_2[0xd];
|
|
iVar1 = *(int *)((longlong)param_2 + 0x5c);
|
|
*(int *)(param_1 + 0x19c) = iVar1;
|
|
if (((iVar1 != 0x80) && (iVar1 != 0xc0)) && (iVar1 != 0x100)) {
|
|
local_358 =
|
|
"CStartServerParameter::m_encryptedMessageKeyLength Incorrect key length, only 128,192,256";
|
|
std::exception::exception(local_2d0,&local_358);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_2d0,(ThrowInfo *)&DAT_1401a9298);
|
|
}
|
|
iVar1 = (int)param_2[0xc];
|
|
*(int *)(param_1 + 0x1a0) = iVar1;
|
|
if ((((iVar1 != 0) && (iVar1 != 0x200)) && (iVar1 != 0x400)) && (iVar1 != 0x800)) {
|
|
local_440 =
|
|
"CStartServerParameter::m_fastEncryptedMessageKeyLength Incorrect key lengt, MaxSize is 2048, MinSize is 8"
|
|
;
|
|
std::exception::exception(local_2b8,&local_440);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_2b8,(ThrowInfo *)&DAT_1401a9298);
|
|
}
|
|
*(int *)(param_1 + 0x1a8) = (int)param_2[0x10];
|
|
*(undefined1 *)(param_1 + 0x1ac) = *(undefined1 *)((longlong)param_2 + 0x84);
|
|
*(undefined1 *)(param_1 + 0x1ad) = *(undefined1 *)((longlong)param_2 + 0x85);
|
|
FUN_1400dd700((undefined8 *)(param_1 + 0xba0),param_1 + 0xba8,puVar27,ppuVar31);
|
|
local_3a8 = 0;
|
|
local_3a0 = (byte *)0x0;
|
|
local_398 = 0;
|
|
local_390 = 0;
|
|
local_3b0 = Proud::ByteArray::vftable;
|
|
FUN_1400dd5d0((longlong)&local_3b0,*(int *)(param_1 + 0x19c),(SIZE_T)puVar27,ppuVar31);
|
|
pbVar18 = local_3a0;
|
|
if ((int)local_398 == 0) {
|
|
pbVar18 = pbVar15;
|
|
}
|
|
SVar28 = (SIZE_T)(*(uint *)(param_1 + 0x19c) >> 3);
|
|
lVar36 = 0x10;
|
|
FUN_1400cd030((void *)(param_1 + 0x798),pbVar18,SVar28,0x10);
|
|
local_3f8 = 0;
|
|
local_3f0 = (byte *)0x0;
|
|
local_3e8 = 0;
|
|
local_3e0 = 0;
|
|
local_400 = Proud::ByteArray::vftable;
|
|
FUN_1400dd5d0((longlong)&local_400,*(int *)(param_1 + 0x1a0),SVar28,lVar36);
|
|
pbVar18 = local_3f0;
|
|
if ((int)local_3e8 == 0) {
|
|
pbVar18 = pbVar15;
|
|
}
|
|
uVar16 = (ulonglong)(*(uint *)(param_1 + 0x1a0) >> 3);
|
|
FUN_1400dccc0(param_1 + 0xb68,(longlong)pbVar18,uVar16,lVar36);
|
|
*(undefined4 *)(param_1 + 0xb98) = 0;
|
|
local_440 = operator_new(0xa8);
|
|
pbVar18 = pbVar15;
|
|
if (local_440 != (char *)0x0) {
|
|
pbVar18 = (byte *)(param_1 + -0x40);
|
|
if (param_1 == 0xa8) {
|
|
pbVar18 = pbVar15;
|
|
}
|
|
uVar16 = CONCAT71((int7)(uVar16 >> 8),1);
|
|
pbVar18 = (byte *)FUN_1400761a0(local_440,pbVar18,uVar16,lVar36);
|
|
}
|
|
*(byte **)(param_1 + 0x6e0) = pbVar18;
|
|
local_440 = operator_new(0xa8);
|
|
pbVar18 = pbVar15;
|
|
if (local_440 != (char *)0x0) {
|
|
pbVar18 = (byte *)(param_1 + -0x40);
|
|
if (param_1 == 0xa8) {
|
|
pbVar18 = pbVar15;
|
|
}
|
|
pbVar18 = (byte *)FUN_1400761a0(local_440,pbVar18,CONCAT71((int7)(uVar16 >> 8),1),lVar36);
|
|
}
|
|
*(byte **)(param_1 + 0x6e8) = pbVar18;
|
|
FUN_140076ec0((char *)(param_1 + 0x6b8));
|
|
dVar37 = FUN_140076f50((char *)(param_1 + 0x6b8));
|
|
*(double *)(param_1 + 0x158) = dVar37;
|
|
*(undefined8 *)(param_1 + 0x118) = 0;
|
|
puVar14 = FUN_140074230(local_180);
|
|
*(undefined4 *)(param_1 + 0x1c4) = *(undefined4 *)puVar14;
|
|
*(undefined4 *)(param_1 + 0x1c8) = *(undefined4 *)((longlong)puVar14 + 4);
|
|
*(undefined4 *)(param_1 + 0x1cc) = *(undefined4 *)(puVar14 + 1);
|
|
*(undefined4 *)(param_1 + 0x1d0) = *(undefined4 *)((longlong)puVar14 + 0xc);
|
|
*(int *)(param_1 + 0x179c) = (int)param_2[8];
|
|
*(undefined4 *)(param_1 + 0x340) = *(undefined4 *)((longlong)param_2 + 0x44);
|
|
*(int *)(param_1 + 0x344) = (int)param_2[9];
|
|
*(undefined4 *)(param_1 + 0x348) = *(undefined4 *)((longlong)param_2 + 0x4c);
|
|
*(int *)(param_1 + 0x34c) = (int)param_2[10];
|
|
pWVar23 = (LPCWSTR)*param_2;
|
|
if ((LPCWSTR)*param_2 == (LPCWSTR)0x0) {
|
|
pWVar23 = (LPCWSTR)PTR_DAT_1401ac010;
|
|
}
|
|
local_168 = local_160;
|
|
FUN_14006b570((longlong *)&local_168,pWVar23,3);
|
|
FUN_14006b850((longlong *)(param_1 + 0x168),local_168);
|
|
if (local_168 != local_160) {
|
|
free(local_168);
|
|
}
|
|
pWVar23 = (LPCWSTR)param_2[1];
|
|
if ((LPCWSTR)param_2[1] == (LPCWSTR)0x0) {
|
|
pWVar23 = (LPCWSTR)PTR_DAT_1401ac010;
|
|
}
|
|
local_d8 = local_d0;
|
|
uVar29 = 3;
|
|
FUN_14006b570((longlong *)&local_d8,pWVar23,3);
|
|
FUN_14006b850((longlong *)(param_1 + 0x170),local_d8);
|
|
if (local_d8 != local_d0) {
|
|
free(local_d8);
|
|
}
|
|
*(undefined4 *)(param_1 + 0x1b0) = *(undefined4 *)((longlong)param_2 + 0x6c);
|
|
*(longlong *)(param_1 + 0x1b8) = param_2[0xe];
|
|
local_388 = Proud::CFastArray<int,0>::vftable;
|
|
if (DAT_1401ac8a0 != 5) {
|
|
FUN_140078250();
|
|
}
|
|
local_380 = param_2[4];
|
|
local_364 = *(undefined4 *)((longlong)param_2 + 0x3c);
|
|
local_378 = (byte *)0x0;
|
|
local_370 = 0;
|
|
local_368 = 0;
|
|
iVar1 = (int)param_2[6];
|
|
lVar26 = (longlong)iVar1;
|
|
if (iVar1 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
FUN_140063f80((longlong)pppuVar30,iVar1,uVar29,lVar36);
|
|
pppuVar11 = local_450;
|
|
pbVar18 = local_378;
|
|
if ((int)local_370 == 0) {
|
|
pbVar18 = pbVar15;
|
|
}
|
|
pbVar20 = pbVar15;
|
|
if ((int)param_2[6] != 0) {
|
|
pbVar20 = (byte *)param_2[5];
|
|
}
|
|
if (0 < iVar1) {
|
|
lVar36 = (longlong)pbVar20 - (longlong)pbVar18;
|
|
do {
|
|
*(undefined4 *)pbVar18 = *(undefined4 *)(pbVar18 + lVar36);
|
|
pbVar18 = pbVar18 + 4;
|
|
lVar26 = lVar26 + -1;
|
|
} while (lVar26 != 0);
|
|
}
|
|
plVar10 = param_2 + 0x11;
|
|
plVar24 = (longlong *)(ulonglong)*(uint *)(param_2 + 8);
|
|
uVar29 = FUN_14008fb10((longlong *)(param_1 + -0xa8),*(uint *)(param_2 + 8),(longlong **)pppuVar30
|
|
,(longlong)plVar10,(ulonglong *)local_450);
|
|
if ((char)uVar29 != '\0') {
|
|
plVar24 = (longlong *)(ulonglong)*(uint *)(param_2 + 2);
|
|
uVar29 = FUN_14008f270(param_1 + -0xa8,(ulonglong)plVar24,(ulonglong *)pppuVar11,plVar10);
|
|
pppuVar30 = pppuVar11;
|
|
if ((char)uVar29 != '\0') {
|
|
pbVar18 = pbVar15;
|
|
if (*(int *)((longlong)param_2 + 0x7c) == 0) {
|
|
local_450 = operator_new(0x10);
|
|
if (local_450 != (undefined ***)0x0) {
|
|
pbVar18 = (byte *)FUN_1400dbf10(local_450);
|
|
}
|
|
}
|
|
else {
|
|
local_450 = operator_new(0x90);
|
|
if (local_450 != (undefined ***)0x0) {
|
|
pbVar18 = (byte *)FUN_1400dc550(local_450,DAT_1401ac1a8);
|
|
}
|
|
}
|
|
*(byte **)(param_1 + 0x3d0) = pbVar18;
|
|
*(undefined4 *)(param_1 + 0x175c) = 0;
|
|
FUN_140008030((longlong *)(param_1 + 0x1760),&DAT_14015cd00,pppuVar11,plVar10);
|
|
*(undefined8 *)(param_1 + 0x1768) = 0;
|
|
*(undefined4 *)(param_1 + 0x1798) = 0;
|
|
DVar7 = *(DWORD *)(param_2 + 0xb);
|
|
DVar6 = FUN_14006c0c0();
|
|
if ((int)DVar6 <= (int)DVar7) {
|
|
DVar7 = FUN_14006c0c0();
|
|
}
|
|
if (0 < (int)DVar7) {
|
|
DVar5 = DVar7;
|
|
}
|
|
*(DWORD *)(param_2 + 0xb) = DVar5;
|
|
if (DVar5 == 0) {
|
|
DVar5 = FUN_14006c0c0();
|
|
*(DWORD *)(param_2 + 0xb) = DVar5;
|
|
}
|
|
local_360 = operator_new(0x280);
|
|
if (local_360 != (undefined4 *)0x0) {
|
|
pbVar15 = (byte *)FUN_1400c6740(local_360,param_1 + -0xa8,pppuVar11,plVar10);
|
|
}
|
|
*(byte **)(param_1 + 0x338) = pbVar15;
|
|
FUN_1400ca800((int *)pbVar15,*(int *)((longlong)param_2 + 0x54),
|
|
(int *)(ulonglong)*(uint *)(param_2 + 0xb));
|
|
Sleep(100);
|
|
FUN_140078360(&local_400);
|
|
FUN_140078360(&local_3b0);
|
|
local_430 = Proud::CFastArray<Proud::StringT<char,Proud::AnsiStrTraits>,0>::vftable;
|
|
if (0 < (int)local_418) {
|
|
uVar16 = local_418 & 0xffffffff;
|
|
plVar10 = local_420;
|
|
do {
|
|
FUN_140008440(plVar10);
|
|
plVar10 = plVar10 + 1;
|
|
uVar16 = uVar16 - 1;
|
|
} while (uVar16 != 0);
|
|
}
|
|
if (local_420 != (longlong *)0x0) {
|
|
if (local_428 == (longlong *)0x0) {
|
|
FUN_14006cc60(local_420);
|
|
}
|
|
else {
|
|
(**(code **)(*local_428 + 0x18))(local_428,local_420);
|
|
}
|
|
}
|
|
if (pbVar17 != (byte *)0x0) {
|
|
if (local_3d0 == (longlong *)0x0) {
|
|
FUN_14006cc60(pbVar17);
|
|
}
|
|
else {
|
|
(**(code **)(*local_3d0 + 0x18))(local_3d0,pbVar17);
|
|
}
|
|
}
|
|
uVar29 = FUN_14006b3e0(param_1 + 0xb8);
|
|
return CONCAT71((int7)((ulonglong)uVar29 >> 8),1);
|
|
}
|
|
}
|
|
FUN_140076f10((char *)(param_1 + 0x6b8));
|
|
pvVar3 = *(void **)(param_1 + 0x6e0);
|
|
if (pvVar3 != (void *)0x0) {
|
|
FUN_140076380((longlong)pvVar3,plVar24,(longlong *)pppuVar30,plVar10);
|
|
operator_delete(pvVar3);
|
|
}
|
|
*(undefined8 *)(param_1 + 0x6e0) = 0;
|
|
pvVar3 = *(void **)(param_1 + 0x6e8);
|
|
if (pvVar3 != (void *)0x0) {
|
|
FUN_140076380((longlong)pvVar3,plVar24,(longlong *)pppuVar30,plVar10);
|
|
operator_delete(pvVar3);
|
|
}
|
|
*(undefined8 *)(param_1 + 0x6e8) = 0;
|
|
*(undefined4 *)(param_1 + 0x1c4) = 0;
|
|
*(undefined4 *)(param_1 + 0x1c8) = 0;
|
|
*(undefined4 *)(param_1 + 0x1cc) = 0;
|
|
*(undefined4 *)(param_1 + 0x1d0) = 0;
|
|
FUN_140078360(&local_400);
|
|
FUN_140078360(&local_3b0);
|
|
local_430 = Proud::CFastArray<Proud::StringT<char,Proud::AnsiStrTraits>,0>::vftable;
|
|
if (0 < (int)local_418) {
|
|
uVar16 = local_418 & 0xffffffff;
|
|
plVar10 = local_420;
|
|
do {
|
|
FUN_140008440(plVar10);
|
|
plVar10 = plVar10 + 1;
|
|
uVar16 = uVar16 - 1;
|
|
} while (uVar16 != 0);
|
|
}
|
|
if (local_420 != (longlong *)0x0) {
|
|
if (local_428 == (longlong *)0x0) {
|
|
FUN_14006cc60(local_420);
|
|
}
|
|
else {
|
|
(**(code **)(*local_428 + 0x18))(local_428,local_420);
|
|
}
|
|
}
|
|
if (pbVar17 != (byte *)0x0) {
|
|
if (local_3d0 == (longlong *)0x0) {
|
|
FUN_14006cc60(pbVar17);
|
|
}
|
|
else {
|
|
(**(code **)(*local_3d0 + 0x18))(local_3d0,pbVar17);
|
|
}
|
|
}
|
|
LAB_140092d71:
|
|
uVar16 = FUN_14006b3e0(param_1 + 0xb8);
|
|
return uVar16 & 0xffffffffffffff00;
|
|
}
|
|
|