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
403
decomp/MessageServer_Release_x64/full/functions/0x1400c8ed0.c
Normal file
403
decomp/MessageServer_Release_x64/full/functions/0x1400c8ed0.c
Normal file
|
|
@ -0,0 +1,403 @@
|
|||
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
||||
* Ghidra 12.1.2 decompiler output for 0x1400c8ed0 FUN_1400c8ed0
|
||||
* Pseudocode, not original source. */
|
||||
|
||||
undefined8
|
||||
FUN_1400c8ed0(longlong *param_1,IMAGE_DOS_HEADER *param_2,IMAGE_DOS_HEADER *param_3,
|
||||
IMAGE_DOS_HEADER *param_4)
|
||||
|
||||
{
|
||||
uint uVar1;
|
||||
int iVar2;
|
||||
undefined8 uVar3;
|
||||
longlong *plVar4;
|
||||
int *piVar5;
|
||||
uint *puVar6;
|
||||
ulonglong uVar7;
|
||||
undefined8 *puVar8;
|
||||
uint uVar9;
|
||||
IMAGE_DOS_HEADER *pIVar10;
|
||||
uint *puVar11;
|
||||
uint uVar16;
|
||||
IMAGE_DOS_HEADER *pIVar12;
|
||||
ulonglong uVar13;
|
||||
undefined *puVar14;
|
||||
longlong lVar15;
|
||||
uint **ppuVar17;
|
||||
undefined8 *local_res10 [2];
|
||||
IMAGE_DOS_HEADER *local_res20;
|
||||
uint *local_c8;
|
||||
uint local_c0;
|
||||
uint local_bc;
|
||||
undefined1 local_b8 [16];
|
||||
undefined8 *local_a8;
|
||||
undefined8 local_a0;
|
||||
undefined8 local_98;
|
||||
word local_90 [4];
|
||||
undefined **local_88;
|
||||
word local_80 [2];
|
||||
undefined2 local_7c;
|
||||
byte local_78;
|
||||
undefined **local_68;
|
||||
undefined1 local_60;
|
||||
undefined3 uStack_5f;
|
||||
word local_5c;
|
||||
undefined **local_58;
|
||||
undefined4 local_50;
|
||||
word local_4c;
|
||||
undefined **local_48;
|
||||
word local_40 [2];
|
||||
word local_3c;
|
||||
undefined **local_38;
|
||||
word local_30 [2];
|
||||
word local_2c;
|
||||
byte local_28 [16];
|
||||
|
||||
local_28[0] = 0xfe;
|
||||
local_28[1] = 0xff;
|
||||
local_28[2] = 0xff;
|
||||
local_28[3] = 0xff;
|
||||
local_28[4] = 0xff;
|
||||
local_28[5] = 0xff;
|
||||
local_28[6] = 0xff;
|
||||
local_28[7] = 0xff;
|
||||
local_c0 = (int)(*(int *)param_2 + (*(int *)param_2 >> 0x1f & 7U)) >> 3;
|
||||
pIVar12 = param_3;
|
||||
local_res20 = param_4;
|
||||
uVar3 = FUN_1400bd260((uint *)param_2,&local_bc,param_3,param_4);
|
||||
if ((char)uVar3 == '\0') goto switchD_1400c8f57_caseD_3;
|
||||
local_res10[0] = (undefined8 *)((ulonglong)local_res10[0] & 0xffffffffffffff00);
|
||||
pIVar12 = &IMAGE_DOS_HEADER_140000000;
|
||||
plVar4 = param_1;
|
||||
pIVar10 = param_2;
|
||||
switch(local_bc) {
|
||||
case 1:
|
||||
pIVar12 = (IMAGE_DOS_HEADER *)0x0;
|
||||
FUN_1400c8ae0((longlong)param_1,(int *)param_2,0,(longlong)param_3,
|
||||
local_res20 != (IMAGE_DOS_HEADER *)0x0);
|
||||
param_4 = param_3;
|
||||
default:
|
||||
switchD_1400c8f57_caseD_3:
|
||||
uVar7 = FUN_1400bc600((int *)param_2,(ulonglong)local_c0,pIVar12,param_4);
|
||||
return uVar7 & 0xffffffffffffff00;
|
||||
case 2:
|
||||
pIVar12 = (IMAGE_DOS_HEADER *)0x0;
|
||||
FUN_1400c8d00((longlong)param_1,(int *)param_2,0,(longlong)param_3,
|
||||
local_res20 != (IMAGE_DOS_HEADER *)0x0);
|
||||
param_4 = param_3;
|
||||
goto switchD_1400c8f57_caseD_3;
|
||||
case 5:
|
||||
FUN_1400c7630((int *)param_1,(uint *)param_2,(longlong *)param_3,param_4);
|
||||
break;
|
||||
case 7:
|
||||
FUN_1400c5c90((longlong)param_1,(uint *)param_2,(uint *)param_3,param_4);
|
||||
break;
|
||||
case 0xc:
|
||||
local_58 = Proud::AddrPort::vftable;
|
||||
local_50._0_2_ = param_2->e_res2_10_[8];
|
||||
local_50._2_2_ = param_2->e_res2_10_[9];
|
||||
local_4c = (word)param_2->e_lfanew;
|
||||
uVar7 = FUN_14006fbe0((longlong)&local_58);
|
||||
if ((char)uVar7 == '\0') {
|
||||
FUN_14009b0d0((longlong *)param_1[0x29],(wchar_t *)param_3,
|
||||
"receivedInfo.GetRemoteAddr().IsUnicastEndpoint()",2);
|
||||
}
|
||||
local_48 = Proud::AddrPort::vftable;
|
||||
local_40 = *(word (*) [2])(param_2->e_res2_10_ + 8);
|
||||
local_3c = (word)param_2->e_lfanew;
|
||||
param_3 = (IMAGE_DOS_HEADER *)&local_48;
|
||||
param_4 = local_res20;
|
||||
FUN_1400c3820((longlong)param_1,(uint *)param_2,(longlong)param_3,(longlong)local_res20);
|
||||
break;
|
||||
case 0xe:
|
||||
FUN_1400c2ec0((longlong)param_1,(uint *)param_2,(longlong)param_3,(TypeDescriptor *)param_4);
|
||||
break;
|
||||
case 0x10:
|
||||
local_38 = Proud::AddrPort::vftable;
|
||||
local_30 = *(word (*) [2])(param_2->e_res2_10_ + 8);
|
||||
local_2c = (word)param_2->e_lfanew;
|
||||
uVar7 = FUN_14006fbe0((longlong)&local_38);
|
||||
if ((char)uVar7 == '\0') {
|
||||
FUN_14009b0d0((longlong *)param_1[0x29],(wchar_t *)param_3,
|
||||
"receivedInfo.GetRemoteAddr().IsUnicastEndpoint()",2);
|
||||
}
|
||||
local_68 = Proud::AddrPort::vftable;
|
||||
_local_60 = param_2->e_res2_10_[8];
|
||||
unique0x00023d02 = param_2->e_res2_10_[9];
|
||||
local_5c = (word)param_2->e_lfanew;
|
||||
param_3 = (IMAGE_DOS_HEADER *)&local_68;
|
||||
param_4 = local_res20;
|
||||
FUN_1400c3bc0((longlong)param_1,(uint *)param_2,(longlong)param_3,(longlong)local_res20);
|
||||
break;
|
||||
case 0x12:
|
||||
FUN_1400c3340((longlong)param_1,(uint *)param_2,(longlong)param_3,param_4);
|
||||
break;
|
||||
case 0x14:
|
||||
FUN_1400c3fb0((longlong)param_1,(uint *)param_2,(wchar_t *)param_3,(longlong)param_4);
|
||||
break;
|
||||
case 0x15:
|
||||
FUN_1400c4810((longlong)param_1,(uint *)param_2,(wchar_t *)param_3,(uint **)param_4);
|
||||
break;
|
||||
case 0x16:
|
||||
FUN_1400c4f80((longlong)param_1,(uint *)param_2,(wchar_t *)param_3,param_4);
|
||||
break;
|
||||
case 0x1a:
|
||||
FUN_1400c5350((longlong)param_1,(uint *)param_2,(longlong *)param_3,param_4);
|
||||
break;
|
||||
case 0x1b:
|
||||
FUN_1400c1c10((longlong)param_1,param_2,(wchar_t *)param_3,param_4);
|
||||
break;
|
||||
case 0x24:
|
||||
case 0x25:
|
||||
FUN_1400bca00((undefined4 *)local_b8);
|
||||
local_88 = Proud::AddrPort::vftable;
|
||||
local_78 = 0;
|
||||
local_90[0] = 0;
|
||||
local_90[1] = 0;
|
||||
local_80[0] = (word)DAT_1401ac3d0;
|
||||
local_80[1] = DAT_1401ac3d0._2_2_;
|
||||
local_7c = DAT_1401ac3d4;
|
||||
param_4 = (IMAGE_DOS_HEADER *)local_b8;
|
||||
pIVar10 = (IMAGE_DOS_HEADER *)(ulonglong)local_bc;
|
||||
pIVar12 = param_2;
|
||||
uVar3 = FUN_1400c0610((uint *)param_1[0x29],local_bc,(uint *)param_2,(uint *)param_4);
|
||||
if ((char)uVar3 != '\0') {
|
||||
local_78 = param_2->e_program[0];
|
||||
local_80 = *(word (*) [2])(param_2->e_res2_10_ + 8);
|
||||
local_7c = (undefined2)param_2->e_lfanew;
|
||||
local_90._0_4_ = *(undefined4 *)param_2->e_res2_10_;
|
||||
pIVar10 = (IMAGE_DOS_HEADER *)local_b8;
|
||||
param_4 = local_res20;
|
||||
uVar3 = FUN_1400c8ed0(param_1,pIVar10,param_3,local_res20);
|
||||
local_res10[0] = (undefined8 *)CONCAT71(local_res10[0]._1_7_,(char)uVar3);
|
||||
pIVar12 = param_3;
|
||||
}
|
||||
local_c8 = (uint *)(local_b8 + 8);
|
||||
plVar4 = (longlong *)(local_b8 + 8);
|
||||
FUN_1400d1800(plVar4);
|
||||
if ((local_a8 != (undefined8 *)0x0) && (local_a0._4_4_ < 0)) {
|
||||
/* WARNING: Subroutine does not return */
|
||||
FUN_14006be00();
|
||||
}
|
||||
goto LAB_1400c9265;
|
||||
case 0x26:
|
||||
FUN_1400bca00((undefined4 *)local_b8);
|
||||
local_88 = Proud::AddrPort::vftable;
|
||||
local_78 = 0;
|
||||
local_90[0] = 0;
|
||||
local_90[1] = 0;
|
||||
local_80[0] = (word)DAT_1401ac3d0;
|
||||
local_80[1] = DAT_1401ac3d0._2_2_;
|
||||
local_7c = DAT_1401ac3d4;
|
||||
pIVar12 = (IMAGE_DOS_HEADER *)local_b8;
|
||||
uVar3 = FUN_1400bea40((longlong *)param_1[0x29],(uint *)param_2,(int *)pIVar12,
|
||||
(ulonglong)param_4);
|
||||
if ((char)uVar3 != '\0') {
|
||||
local_78 = param_2->e_program[0];
|
||||
local_80 = *(word (*) [2])(param_2->e_res2_10_ + 8);
|
||||
local_7c = (undefined2)param_2->e_lfanew;
|
||||
local_90._0_4_ = *(undefined4 *)param_2->e_res2_10_;
|
||||
pIVar10 = (IMAGE_DOS_HEADER *)local_b8;
|
||||
param_4 = local_res20;
|
||||
uVar3 = FUN_1400c8ed0(param_1,pIVar10,param_3,local_res20);
|
||||
local_res10[0] = (undefined8 *)CONCAT71(local_res10[0]._1_7_,(char)uVar3);
|
||||
pIVar12 = param_3;
|
||||
}
|
||||
local_c8 = (uint *)(local_b8 + 8);
|
||||
plVar4 = (longlong *)(local_b8 + 8);
|
||||
FUN_1400d1800(plVar4);
|
||||
if ((local_a8 != (undefined8 *)0x0) && (local_a0._4_4_ < 0)) {
|
||||
/* WARNING: Subroutine does not return */
|
||||
FUN_14006be00();
|
||||
}
|
||||
LAB_1400c9265:
|
||||
puVar6 = (uint *)0x0;
|
||||
param_3 = pIVar12;
|
||||
if ((char)local_res10[0] != '\x01') {
|
||||
if ((char)local_res10[0] == '\0') goto switchD_1400c8f57_caseD_3;
|
||||
goto LAB_1400c9595;
|
||||
}
|
||||
break;
|
||||
case 0x27:
|
||||
FUN_1400c5820((longlong)param_1,param_2,(longlong *)param_3,param_4);
|
||||
break;
|
||||
case 0x28:
|
||||
FUN_1400c1ca0((longlong)param_1,(uint *)param_2,(longlong)param_3,param_4);
|
||||
}
|
||||
if (*(longlong *)¶m_2->e_cparhdr == 0) {
|
||||
lVar15._0_2_ = param_2->e_sp;
|
||||
lVar15._2_2_ = param_2->e_csum;
|
||||
lVar15._4_2_ = param_2->e_ip;
|
||||
lVar15._6_2_ = param_2->e_cs;
|
||||
if (lVar15 == 0) {
|
||||
/* WARNING: Subroutine does not return */
|
||||
FUN_1400d1900(plVar4,pIVar10,param_3,param_4);
|
||||
}
|
||||
uVar16._0_2_ = param_2->e_lfarlc;
|
||||
uVar16._2_2_ = param_2->e_ovno;
|
||||
}
|
||||
else {
|
||||
uVar16 = *(uint *)(*(longlong *)¶m_2->e_cparhdr + 0x18);
|
||||
}
|
||||
uVar9 = *(int *)param_2 >> 0x1f & 7;
|
||||
uVar1 = (int)(*(int *)param_2 + uVar9) >> 3;
|
||||
puVar6 = (uint *)(ulonglong)uVar1;
|
||||
if (((uVar16 == uVar1) || (puVar6 = (uint *)(ulonglong)local_bc, local_bc == 0x24)) ||
|
||||
(local_bc == 0x25)) goto LAB_1400c9595;
|
||||
FUN_14006cb70((ulonglong)uVar16,(ulonglong)uVar9,param_3,param_4);
|
||||
local_c8 = (uint *)PTR_DAT_1401ac010;
|
||||
local_c0 = FUN_14006c9f0(L"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_ProudNetLayer");
|
||||
uVar16 = 0;
|
||||
uVar7 = 0;
|
||||
if ((local_c8 != (uint *)0x0) && (uVar7 = 0, local_c8 != (uint *)PTR_DAT_1401ac010)) {
|
||||
uVar7 = (ulonglong)local_c8[-2];
|
||||
}
|
||||
uVar1 = local_c0;
|
||||
if ((((int)local_c0 <= (int)uVar7) && (uVar1 = uVar16, local_c8 != (uint *)0x0)) &&
|
||||
(local_c8 != (uint *)PTR_DAT_1401ac010)) {
|
||||
uVar1 = local_c8[-2];
|
||||
}
|
||||
uVar9 = 1;
|
||||
if (1 < (int)uVar1) {
|
||||
uVar9 = uVar1;
|
||||
}
|
||||
if ((local_c8 != (uint *)0x0) && (local_c8 != (uint *)PTR_DAT_1401ac010)) {
|
||||
uVar16 = local_c8[-2];
|
||||
}
|
||||
if ((int)uVar16 < (int)uVar9) {
|
||||
if (local_c8 == (uint *)0x0) {
|
||||
local_c8 = (uint *)PTR_DAT_1401ac010;
|
||||
}
|
||||
if ((int)uVar9 < 0) {
|
||||
/* WARNING: Subroutine does not return */
|
||||
FUN_14006be00();
|
||||
}
|
||||
if (uVar9 == 0) {
|
||||
FUN_1400031e0((longlong *)&local_c8,PTR_DAT_1401ac010,uVar7,0);
|
||||
}
|
||||
else {
|
||||
uVar16 = 0;
|
||||
if ((local_c8 != (uint *)0x0) && (local_c8 != (uint *)PTR_DAT_1401ac010)) {
|
||||
uVar16 = local_c8[-2];
|
||||
}
|
||||
if (uVar9 != uVar16) {
|
||||
puVar6 = (uint *)FUN_14006cbf0((longlong)(int)uVar9 * 2 + 10);
|
||||
uVar7 = 0;
|
||||
uVar16 = 0;
|
||||
if (puVar6 != (uint *)0x0) {
|
||||
*puVar6 = 0;
|
||||
puVar6[1] = 1;
|
||||
}
|
||||
*puVar6 = uVar9;
|
||||
if ((local_c8 != (uint *)0x0) && (local_c8 != (uint *)PTR_DAT_1401ac010)) {
|
||||
uVar16 = local_c8[-2];
|
||||
}
|
||||
puVar11 = (uint *)PTR_DAT_1401ac010;
|
||||
if ((int)uVar9 < (int)uVar16) {
|
||||
uVar13 = (ulonglong)uVar9;
|
||||
LAB_1400c93e2:
|
||||
if (local_c8 != (uint *)0x0) {
|
||||
puVar11 = local_c8;
|
||||
}
|
||||
}
|
||||
else {
|
||||
uVar13 = uVar7;
|
||||
if (local_c8 != (uint *)0x0) {
|
||||
if (local_c8 != (uint *)PTR_DAT_1401ac010) {
|
||||
uVar13 = (ulonglong)local_c8[-2];
|
||||
}
|
||||
goto LAB_1400c93e2;
|
||||
}
|
||||
}
|
||||
FUN_14006ca20(puVar6 + 2,puVar11,(int)uVar13);
|
||||
FUN_1400031e0((longlong *)&local_c8,puVar11,uVar13,uVar7);
|
||||
local_c8 = puVar6 + 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
FUN_140002e40((longlong *)&local_c8);
|
||||
puVar6 = local_c8;
|
||||
if (local_c8 == (uint *)0x0) {
|
||||
puVar6 = (uint *)PTR_DAT_1401ac010;
|
||||
}
|
||||
FUN_14006ca20(puVar6,L"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_ProudNetLayer",
|
||||
local_c0);
|
||||
puVar6 = local_c8;
|
||||
if (local_c8 == (uint *)0x0) {
|
||||
puVar6 = (uint *)PTR_DAT_1401ac010;
|
||||
}
|
||||
uVar1 = FUN_14006c9f0((short *)puVar6);
|
||||
puVar14 = PTR_DAT_1401ac010;
|
||||
puVar6 = (uint *)0x0;
|
||||
uVar16 = 0;
|
||||
if (0 < (int)uVar1) {
|
||||
uVar16 = uVar1;
|
||||
}
|
||||
puVar11 = puVar6;
|
||||
if ((local_c8 != (uint *)0x0) && (puVar11 = (uint *)0x0, local_c8 != (uint *)PTR_DAT_1401ac010)) {
|
||||
puVar11 = (uint *)(ulonglong)local_c8[-2];
|
||||
}
|
||||
if (((int)uVar16 < (int)puVar11) || (uVar16 = 0, local_c8 == (uint *)0x0)) {
|
||||
LAB_1400c9479:
|
||||
if (((local_c8 != (uint *)PTR_DAT_1401ac010) && (local_c8 != (uint *)0x0)) &&
|
||||
(puVar11 = local_c8 + -2, puVar11 != (uint *)0x0)) {
|
||||
*puVar11 = uVar16;
|
||||
*(short *)((longlong)local_c8 + (longlong)(int)uVar16 * 2) = 0;
|
||||
}
|
||||
}
|
||||
else if (local_c8 != (uint *)PTR_DAT_1401ac010) {
|
||||
uVar16 = local_c8[-2];
|
||||
goto LAB_1400c9479;
|
||||
}
|
||||
iVar2 = FUN_14007c120((longlong)param_2,puVar11,puVar14,0);
|
||||
local_res10[0] = (undefined8 *)FUN_1400a1cc0((longlong)param_2,puVar11,puVar14,puVar6);
|
||||
local_b8._0_8_ = Proud::CFastArray<unsigned_char,1>::vftable;
|
||||
local_b8._8_2_ = 0;
|
||||
local_b8._10_2_ = 0;
|
||||
local_b8._12_2_ = 0;
|
||||
local_b8._14_2_ = 0;
|
||||
local_a8 = (undefined8 *)0x0;
|
||||
local_a0._0_2_ = 0;
|
||||
local_a0._2_2_ = 0;
|
||||
local_a0._4_2_ = 0;
|
||||
local_a0._6_2_ = 0;
|
||||
local_98._0_2_ = 0;
|
||||
local_98._2_2_ = 0;
|
||||
local_98._4_2_ = 0;
|
||||
local_98._6_2_ = 0;
|
||||
if (iVar2 < 0) {
|
||||
/* WARNING: Subroutine does not return */
|
||||
FUN_14006be00();
|
||||
}
|
||||
FUN_1400146f0((longlong)local_b8,iVar2,(SIZE_T)puVar14);
|
||||
puVar8 = local_a8;
|
||||
if ((int)local_a0 == 0) {
|
||||
puVar8 = (undefined8 *)0x0;
|
||||
}
|
||||
FUN_140006500(puVar8,local_res10[0],(longlong)iVar2);
|
||||
local_b8._0_8_ = Proud::ByteArray::vftable;
|
||||
ppuVar17 = &local_c8;
|
||||
plVar4 = FUN_140078c10((longlong *)local_res10,0x1f,(ulonglong)*(uint *)param_2->e_res2_10_,
|
||||
(longlong *)ppuVar17,(longlong)local_b8);
|
||||
lVar15 = *(longlong *)param_1[0x29];
|
||||
(**(code **)(lVar15 + 0x80))();
|
||||
puVar8 = (undefined8 *)local_b8;
|
||||
FUN_140078360(puVar8);
|
||||
puVar6 = local_c8;
|
||||
if (((local_c8 != (uint *)0x0) && (local_c8 != (uint *)PTR_DAT_1401ac010)) &&
|
||||
(puVar11 = local_c8 + -2, puVar11 != (uint *)0x0)) {
|
||||
piVar5 = (int *)FUN_14006cb70(puVar8,plVar4,lVar15,ppuVar17);
|
||||
local_68 = (undefined **)piVar5;
|
||||
FUN_14006b350(piVar5);
|
||||
local_60 = 1;
|
||||
puVar6 = puVar6 + -1;
|
||||
*puVar6 = *puVar6 - 1;
|
||||
if (*puVar6 == 0) {
|
||||
FUN_14006cc60(puVar11);
|
||||
}
|
||||
puVar6 = (uint *)FUN_14006b3e0((longlong)piVar5);
|
||||
}
|
||||
LAB_1400c9595:
|
||||
return CONCAT71((int7)((ulonglong)puVar6 >> 8),1);
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue