decomp DBCServer_Release and inspect/document database
This commit is contained in:
parent
4b267cbe05
commit
7834b98bf0
28222 changed files with 843300 additions and 144 deletions
317
decomp/MessageServer_Release_x64/full/functions/0x14009dbc0.c
Normal file
317
decomp/MessageServer_Release_x64/full/functions/0x14009dbc0.c
Normal file
|
|
@ -0,0 +1,317 @@
|
|||
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
||||
* Ghidra 12.1.2 decompiler output for 0x14009dbc0 FUN_14009dbc0
|
||||
* Pseudocode, not original source. */
|
||||
|
||||
ulonglong FUN_14009dbc0(SIZE_T *param_1,uint *param_2,SIZE_T param_3,undefined4 param_4,
|
||||
longlong param_5,LPVOID param_6,undefined4 param_7)
|
||||
|
||||
{
|
||||
ulonglong *puVar1;
|
||||
int iVar2;
|
||||
void *pvVar3;
|
||||
uint *puVar4;
|
||||
LPVOID pvVar5;
|
||||
longlong *plVar6;
|
||||
undefined8 uVar7;
|
||||
longlong *plVar8;
|
||||
ulonglong uVar9;
|
||||
uint *puVar10;
|
||||
ulonglong uVar11;
|
||||
uint **ppuVar12;
|
||||
uint uVar13;
|
||||
int *piVar14;
|
||||
SIZE_T SVar15;
|
||||
TypeDescriptor *pTVar16;
|
||||
ulonglong uVar17;
|
||||
longlong *plVar18;
|
||||
longlong lVar19;
|
||||
uint *local_res10;
|
||||
ulonglong *local_78;
|
||||
undefined **local_68;
|
||||
undefined8 local_60;
|
||||
undefined8 local_58;
|
||||
undefined8 local_50;
|
||||
undefined8 local_48;
|
||||
|
||||
plVar18 = (longlong *)0x0;
|
||||
local_res10 = param_2;
|
||||
if (*(longlong *)(param_2 + 0x8a) == 0) {
|
||||
pvVar3 = *(void **)(param_2 + 0x8a);
|
||||
SVar15 = param_3;
|
||||
if (pvVar3 != (void *)0x0) {
|
||||
FUN_140078360((undefined8 *)((longlong)pvVar3 + 8));
|
||||
operator_delete(pvVar3);
|
||||
}
|
||||
param_2[0x8a] = 0;
|
||||
param_2[0x8b] = 0;
|
||||
plVar6 = operator_new(0x40);
|
||||
plVar8 = plVar18;
|
||||
if (plVar6 != (longlong *)0x0) {
|
||||
plVar6[2] = 0;
|
||||
plVar6[3] = 0;
|
||||
plVar6[4] = 0;
|
||||
plVar6[5] = 0;
|
||||
plVar6[1] = (longlong)Proud::ByteArray::vftable;
|
||||
*(undefined4 *)plVar6 = 0;
|
||||
*(undefined4 *)(plVar6 + 7) = 0;
|
||||
plVar6[6] = 0;
|
||||
plVar8 = plVar6;
|
||||
}
|
||||
*(longlong **)(param_2 + 0x8a) = plVar8;
|
||||
*(int *)plVar8 = (int)param_3;
|
||||
*(undefined4 *)(*(longlong *)(param_2 + 0x8a) + 4) = param_4;
|
||||
lVar19 = *(longlong *)(param_2 + 0x8a);
|
||||
iVar2 = *(int *)(param_5 + 0x18);
|
||||
if (iVar2 < 0) {
|
||||
/* WARNING: Subroutine does not return */
|
||||
FUN_14006be00();
|
||||
}
|
||||
FUN_1400146f0(lVar19 + 8,iVar2,SVar15);
|
||||
plVar8 = plVar18;
|
||||
if (*(int *)(param_5 + 0x18) != 0) {
|
||||
plVar8 = *(longlong **)(param_5 + 0x10);
|
||||
}
|
||||
plVar6 = plVar18;
|
||||
if (*(int *)(lVar19 + 0x20) != 0) {
|
||||
plVar6 = *(longlong **)(lVar19 + 0x18);
|
||||
}
|
||||
FUN_140006500(plVar6,plVar8,(longlong)iVar2);
|
||||
*(undefined4 *)(*(longlong *)(param_2 + 0x8a) + 0x38) = param_7;
|
||||
if (param_1[0x2fe] != 0) {
|
||||
FUN_1400cb990(param_1[0x2fe],L"Issuedispose %dclient in %s",(ulonglong)param_2[0x1be],param_6)
|
||||
;
|
||||
}
|
||||
}
|
||||
uVar13 = (uint)param_1[0x55];
|
||||
uVar11 = ((ulonglong)param_2 & 0xffffffff) % (ulonglong)uVar13;
|
||||
if (param_1[0x51] != 0) {
|
||||
for (plVar8 = *(longlong **)(param_1[0x51] + uVar11 * 8);
|
||||
(plVar8 != (longlong *)0x0 && ((uint)uVar11 == *(uint *)(plVar8 + 4) % uVar13));
|
||||
plVar8 = (longlong *)plVar8[2]) {
|
||||
if ((uint *)*plVar8 == param_2) {
|
||||
return (ulonglong)*(uint *)(plVar8 + 4) / (ulonglong)uVar13;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (*(longlong *)(param_2 + 0x8a) == 0) {
|
||||
local_60 = 0;
|
||||
local_58 = 0;
|
||||
local_50 = 0;
|
||||
local_48 = 0;
|
||||
local_68 = Proud::ByteArray::vftable;
|
||||
FUN_140095000((longlong)param_1,param_2,0xc,7,(longlong)&local_68);
|
||||
FUN_140078360(&local_68);
|
||||
}
|
||||
else {
|
||||
puVar4 = *(uint **)(param_2 + 0x8a);
|
||||
FUN_140095000((longlong)param_1,param_2,(ulonglong)*puVar4,(ulonglong)puVar4[1],
|
||||
(longlong)(puVar4 + 2));
|
||||
}
|
||||
lVar19 = (**(code **)(param_1[0x23] + 8))();
|
||||
uVar17 = (ulonglong)(uint)param_1[0x55];
|
||||
uVar9 = ((ulonglong)param_2 & 0xffffffff) % uVar17;
|
||||
uVar11 = param_1[0x51];
|
||||
uVar13 = (uint)uVar9;
|
||||
if (uVar11 != 0) {
|
||||
plVar8 = *(longlong **)(uVar11 + uVar9 * 8);
|
||||
while ((plVar8 != (longlong *)0x0 &&
|
||||
(ppuVar12 = (uint **)((ulonglong)*(uint *)(plVar8 + 4) % uVar17),
|
||||
uVar13 == (uint)ppuVar12))) {
|
||||
if ((uint *)*plVar8 == param_2) goto LAB_14009deba;
|
||||
plVar8 = (longlong *)plVar8[2];
|
||||
}
|
||||
if (uVar11 != 0) {
|
||||
plVar8 = *(longlong **)(uVar11 + uVar9 * 8);
|
||||
while ((plVar8 != (longlong *)0x0 &&
|
||||
(ppuVar12 = (uint **)((ulonglong)*(uint *)(plVar8 + 4) % uVar17),
|
||||
uVar13 == (uint)ppuVar12))) {
|
||||
if ((uint *)*plVar8 == param_2) goto LAB_14009deb5;
|
||||
plVar8 = (longlong *)plVar8[2];
|
||||
}
|
||||
if (uVar11 != 0) goto LAB_14009de80;
|
||||
}
|
||||
}
|
||||
uVar7 = FUN_1400a1910((longlong)(param_1 + 0x50),(uint)param_1[0x55],'\x01');
|
||||
if ((char)uVar7 == '\0') {
|
||||
/* WARNING: Subroutine does not return */
|
||||
FUN_1400064e0(0x8007000e);
|
||||
}
|
||||
LAB_14009de80:
|
||||
FUN_1400e94c0((char *)(param_1 + 0x50));
|
||||
uVar17 = (ulonglong)param_2 & 0xffffffff;
|
||||
ppuVar12 = &local_res10;
|
||||
plVar8 = FUN_14007d680((char *)(param_1 + 0x50),ppuVar12,uVar13,(int)param_2);
|
||||
FUN_1400e94c0((char *)(param_1 + 0x50));
|
||||
uVar11 = uVar9;
|
||||
LAB_14009deb5:
|
||||
plVar8[1] = lVar19;
|
||||
LAB_14009deba:
|
||||
FUN_140071fc0(*(longlong **)(*(longlong *)(param_2 + 0x1d2) + 0x110),ppuVar12,uVar11,uVar17);
|
||||
plVar8 = *(longlong **)(param_2 + 0x1d8);
|
||||
if ((plVar8 != (longlong *)0x0) && (*plVar8 != 0)) {
|
||||
plVar6 = plVar18;
|
||||
if (plVar8 != (longlong *)0x0) {
|
||||
plVar6 = (longlong *)*plVar8;
|
||||
}
|
||||
plVar8 = plVar18;
|
||||
if ((undefined8 *)plVar6[0x2a] != (undefined8 *)0x0) {
|
||||
plVar8 = *(longlong **)plVar6[0x2a];
|
||||
}
|
||||
FUN_140071fc0(plVar8,ppuVar12,uVar11,uVar17);
|
||||
}
|
||||
(**(code **)(*(longlong *)(param_2 + 0x28) + 0x40))();
|
||||
puVar4 = param_2 + 0x12;
|
||||
if (*(longlong *)(param_2 + 0x1a) != 0) {
|
||||
plVar18 = *(longlong **)(param_2 + 0x16);
|
||||
}
|
||||
do {
|
||||
if (plVar18 == (longlong *)0x0) {
|
||||
FUN_140095de0((char *)puVar4,param_6,uVar11,uVar17);
|
||||
uVar11 = FUN_140094470((char *)(param_1 + 0x5b),(longlong)param_2);
|
||||
return uVar11;
|
||||
}
|
||||
if (plVar18 == (longlong *)0x0) {
|
||||
/* WARNING: Subroutine does not return */
|
||||
FUN_1400064e0(0x80004005);
|
||||
}
|
||||
local_78 = (ulonglong *)0x0;
|
||||
if (plVar18[1] != 0) {
|
||||
*(longlong *)(plVar18[1] + 8) = *(longlong *)(plVar18[1] + 8) + 1;
|
||||
local_78 = (ulonglong *)plVar18[1];
|
||||
param_2 = local_res10;
|
||||
}
|
||||
if (local_78 == (ulonglong *)0x0) {
|
||||
puVar10 = (uint *)0x0;
|
||||
}
|
||||
else {
|
||||
puVar10 = (uint *)*local_78;
|
||||
}
|
||||
FUN_140098220((longlong)param_1,puVar10,(ulonglong)param_2[0x1be],0xb);
|
||||
if (local_78 == (ulonglong *)0x0) {
|
||||
uVar11 = 0;
|
||||
}
|
||||
else {
|
||||
uVar11 = *local_78;
|
||||
}
|
||||
if (*(longlong *)(uVar11 + 0x28) == 0) {
|
||||
piVar14 = (int *)0x0;
|
||||
}
|
||||
else {
|
||||
piVar14 = *(int **)(uVar11 + 0x18);
|
||||
}
|
||||
while( true ) {
|
||||
if (local_78 == (ulonglong *)0x0) {
|
||||
uVar9 = 0;
|
||||
}
|
||||
else {
|
||||
uVar9 = *local_78;
|
||||
}
|
||||
if (piVar14 == (int *)0x0) break;
|
||||
if (*piVar14 != 1) {
|
||||
if (local_78 == (ulonglong *)0x0) {
|
||||
uVar9 = 0;
|
||||
}
|
||||
else {
|
||||
uVar9 = *local_78;
|
||||
}
|
||||
(**(code **)(param_1[0x95] + 0x80))
|
||||
(param_1 + 0x95,*piVar14,&DAT_1401b6110,param_2 + 0x1be,uVar9);
|
||||
}
|
||||
piVar14 = *(int **)(piVar14 + 6);
|
||||
}
|
||||
if (uVar11 + 8 != uVar9 + 8) {
|
||||
/* WARNING: Subroutine does not return */
|
||||
FUN_1400064e0(0x80004005);
|
||||
}
|
||||
if (local_78 == (ulonglong *)0x0) {
|
||||
uVar11 = 0;
|
||||
}
|
||||
else {
|
||||
uVar11 = *local_78;
|
||||
}
|
||||
uVar9 = (ulonglong)param_2[0x1be];
|
||||
pTVar16 = (TypeDescriptor *)(uVar9 % (ulonglong)*(uint *)(uVar11 + 0x30));
|
||||
if (*(longlong *)(uVar11 + 0x10) != 0) {
|
||||
puVar10 = *(uint **)(*(longlong *)(uVar11 + 0x10) + (longlong)pTVar16 * 8);
|
||||
while( true ) {
|
||||
if ((puVar10 == (uint *)0x0) || ((uint)pTVar16 != puVar10[10] % *(uint *)(uVar11 + 0x30)))
|
||||
goto LAB_14009e07b;
|
||||
if (*puVar10 == param_2[0x1be]) break;
|
||||
puVar10 = *(uint **)(puVar10 + 6);
|
||||
}
|
||||
uVar9 = 0;
|
||||
FUN_1400d4570((char *)(uVar11 + 8),puVar10,'\0');
|
||||
}
|
||||
LAB_14009e07b:
|
||||
if (local_78 == (ulonglong *)0x0) {
|
||||
uVar11 = 0;
|
||||
}
|
||||
else {
|
||||
uVar11 = *local_78;
|
||||
}
|
||||
if ((*(longlong *)(uVar11 + 0x28) == 0) && ((char)param_1[0x300] == '\0')) {
|
||||
if (local_78 == (ulonglong *)0x0) {
|
||||
puVar10 = (uint *)0x0;
|
||||
}
|
||||
else {
|
||||
puVar10 = (uint *)*local_78;
|
||||
}
|
||||
uVar13 = *puVar10;
|
||||
uVar11 = (ulonglong)(uint)param_1[0x85];
|
||||
if (param_1[0x81] != 0) {
|
||||
puVar10 = *(uint **)(param_1[0x81] + ((ulonglong)uVar13 % uVar11) * 8);
|
||||
while( true ) {
|
||||
if ((puVar10 == (uint *)0x0) ||
|
||||
((uint)((ulonglong)uVar13 % uVar11) != puVar10[8] % (uint)param_1[0x85]))
|
||||
goto LAB_14009e152;
|
||||
if (*puVar10 == uVar13) break;
|
||||
puVar10 = *(uint **)(puVar10 + 4);
|
||||
}
|
||||
FUN_140094db0((char *)(param_1 + 0x80),puVar10,0);
|
||||
plVar8 = (longlong *)param_1[0x8f];
|
||||
lVar19 = *plVar8;
|
||||
uVar7 = (**(code **)(param_1[0x23] + 8))();
|
||||
SVar15 = (SIZE_T)uVar13;
|
||||
(**(code **)(lVar19 + 0x10))(plVar8,uVar7);
|
||||
FUN_14009b3c0(param_1,uVar13,SVar15,uVar11);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (local_78 == (ulonglong *)0x0) {
|
||||
puVar10 = (uint *)0x0;
|
||||
}
|
||||
else {
|
||||
puVar10 = (uint *)*local_78;
|
||||
}
|
||||
FUN_1400887b0((longlong)param_1,puVar10,uVar9,pTVar16);
|
||||
}
|
||||
LAB_14009e152:
|
||||
if (local_78 == (ulonglong *)0x0) {
|
||||
uVar11 = 0;
|
||||
}
|
||||
else {
|
||||
uVar11 = *local_78;
|
||||
}
|
||||
uVar17 = 1;
|
||||
param_6 = (LPVOID)(ulonglong)param_2[0x96];
|
||||
FUN_140063e90((longlong)(param_2 + 0x90),param_2[0x96],uVar11,1);
|
||||
if (local_78 != (ulonglong *)0x0) {
|
||||
puVar1 = local_78 + 1;
|
||||
*puVar1 = *puVar1 - 1;
|
||||
param_2 = local_res10;
|
||||
if (*puVar1 == 0) {
|
||||
pvVar5 = (LPVOID)*local_78;
|
||||
if (pvVar5 != (LPVOID)0x0) {
|
||||
FUN_1400807c0((longlong)pvVar5,param_6,uVar11,uVar17);
|
||||
FUN_14006cc60(pvVar5);
|
||||
}
|
||||
FUN_14006cc60(local_78);
|
||||
param_2 = local_res10;
|
||||
}
|
||||
}
|
||||
if (plVar18 != (longlong *)0x0) {
|
||||
plVar18 = (longlong *)plVar18[2];
|
||||
}
|
||||
} while( true );
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue