155 lines
5.5 KiB
C
155 lines
5.5 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x1400d2050 FUN_1400d2050
|
|
* Pseudocode, not original source. */
|
|
|
|
void FUN_1400d2050(uint *param_1,uint *param_2,undefined8 param_3,ulonglong param_4)
|
|
|
|
{
|
|
longlong lVar1;
|
|
uint *puVar2;
|
|
undefined8 uVar3;
|
|
uint *puVar4;
|
|
undefined *puVar5;
|
|
int *piVar6;
|
|
uint *puVar7;
|
|
uint *puVar8;
|
|
uint *puVar9;
|
|
uint *puVar10;
|
|
uint *puVar11;
|
|
ulonglong uVar12;
|
|
ulonglong uVar13;
|
|
uint uVar14;
|
|
|
|
param_2[0xc] = param_1[0x1be];
|
|
uVar14 = param_1[0x1c5];
|
|
param_2[6] = param_1[0x1c4];
|
|
*(short *)(param_2 + 7) = (short)uVar14;
|
|
uVar12 = *(ulonglong *)(param_1 + 0x1d2);
|
|
param_2[2] = *(uint *)(uVar12 + 0x130);
|
|
*(undefined2 *)(param_2 + 3) = *(undefined2 *)(uVar12 + 0x134);
|
|
param_2[10] = param_1[0x1c8];
|
|
*(short *)(param_2 + 0xb) = (short)param_1[0x1c9];
|
|
*(undefined8 *)(param_2 + 0x28) = *(undefined8 *)(param_1 + 0x72);
|
|
param_2[0x2a] = param_1[0x7a];
|
|
*(char *)((longlong)param_2 + 0x91) = (char)param_1[0x1c0];
|
|
puVar11 = (uint *)0x0;
|
|
puVar2 = param_1;
|
|
puVar9 = param_2;
|
|
puVar10 = puVar11;
|
|
if (*(longlong *)(param_1 + 0x1a) != 0) {
|
|
puVar10 = *(uint **)(param_1 + 0x16);
|
|
}
|
|
for (; puVar10 != (uint *)0x0; puVar10 = *(uint **)(puVar10 + 4)) {
|
|
uVar12 = (ulonglong)param_2[0x18];
|
|
uVar14 = *puVar10;
|
|
param_4 = (ulonglong)uVar14;
|
|
lVar1 = *(longlong *)(param_2 + 0x10);
|
|
if (lVar1 != 0) {
|
|
puVar2 = *(uint **)(lVar1 + (param_4 % uVar12) * 8);
|
|
while ((puVar2 != (uint *)0x0 &&
|
|
(puVar9 = (uint *)((ulonglong)puVar2[6] % uVar12),
|
|
(int)(param_4 % uVar12) == (int)puVar9))) {
|
|
if (*puVar2 == uVar14) goto LAB_1400d21a1;
|
|
puVar2 = *(uint **)(puVar2 + 2);
|
|
}
|
|
}
|
|
uVar13 = param_4 % uVar12;
|
|
if (lVar1 != 0) {
|
|
puVar2 = *(uint **)(lVar1 + uVar13 * 8);
|
|
while ((puVar2 != (uint *)0x0 &&
|
|
(puVar9 = (uint *)((ulonglong)puVar2[6] % uVar12), (uint)uVar13 == (uint)puVar9))) {
|
|
if (*puVar2 == uVar14) goto LAB_1400d219d;
|
|
puVar2 = *(uint **)(puVar2 + 2);
|
|
}
|
|
}
|
|
puVar9 = puVar10;
|
|
puVar2 = FUN_1400802f0((char *)(param_2 + 0xe),puVar10,(uint)uVar13,uVar14);
|
|
uVar12 = uVar13;
|
|
LAB_1400d219d:
|
|
*(char *)(puVar2 + 1) = '\0';
|
|
LAB_1400d21a1:
|
|
}
|
|
puVar10 = puVar11;
|
|
if (0 < (int)param_1[0x96]) {
|
|
do {
|
|
if (((longlong)puVar11 < 0) || ((int)param_1[0x96] <= (int)puVar10)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(puVar2,puVar9,uVar12,param_4);
|
|
}
|
|
puVar8 = (uint *)(*(longlong *)(param_1 + 0x94) + (longlong)puVar11 * 4);
|
|
puVar7 = param_2 + 0xe;
|
|
uVar14 = *puVar8;
|
|
param_4 = (ulonglong)param_2[0x18];
|
|
uVar12 = (ulonglong)uVar14 % param_4;
|
|
lVar1 = *(longlong *)(param_2 + 0x10);
|
|
if (lVar1 != 0) {
|
|
puVar2 = *(uint **)(lVar1 + uVar12 * 8);
|
|
while ((puVar2 != (uint *)0x0 &&
|
|
(puVar9 = (uint *)((ulonglong)puVar2[6] % param_4), (int)uVar12 == (int)puVar9))) {
|
|
if (*puVar2 == uVar14) goto LAB_1400d229e;
|
|
puVar2 = *(uint **)(puVar2 + 2);
|
|
}
|
|
}
|
|
uVar13 = (ulonglong)uVar14 % param_4;
|
|
if (lVar1 == 0) {
|
|
LAB_1400d225f:
|
|
uVar3 = FUN_1400a1910((longlong)puVar7,param_2[0x18],'\x01');
|
|
if ((char)uVar3 == '\0') {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_1400064e0(0x8007000e);
|
|
}
|
|
}
|
|
else {
|
|
puVar4 = *(uint **)(lVar1 + uVar13 * 8);
|
|
while ((puVar4 != (uint *)0x0 &&
|
|
((uint)uVar13 == (uint)(uint *)((ulonglong)puVar4[6] % param_4)))) {
|
|
puVar9 = (uint *)((ulonglong)puVar4[6] % param_4);
|
|
if (*puVar4 == uVar14) goto LAB_1400d2295;
|
|
puVar4 = *(uint **)(puVar4 + 2);
|
|
}
|
|
if (lVar1 == 0) goto LAB_1400d225f;
|
|
}
|
|
FUN_1400cadd0((char *)puVar7);
|
|
param_4 = (ulonglong)uVar14;
|
|
puVar4 = FUN_14007d400((char *)puVar7,puVar8,(uint)uVar13,uVar14);
|
|
FUN_1400cadd0((char *)puVar7);
|
|
puVar2 = puVar7;
|
|
puVar9 = puVar8;
|
|
uVar12 = uVar13;
|
|
LAB_1400d2295:
|
|
*(undefined1 *)(puVar4 + 1) = 0;
|
|
LAB_1400d229e:
|
|
uVar14 = (int)puVar10 + 1;
|
|
puVar10 = (uint *)(ulonglong)uVar14;
|
|
puVar11 = (uint *)((longlong)puVar11 + 1);
|
|
} while ((int)uVar14 < (int)param_1[0x96]);
|
|
}
|
|
*(undefined1 *)(param_2 + 0xd) = 0;
|
|
*(bool *)(param_2 + 0x24) = param_1[0x1c4] != param_1[0x1c8];
|
|
puVar5 = *(undefined **)(param_2 + 0x26);
|
|
if (*(undefined **)(param_2 + 0x26) == (undefined *)0x0) {
|
|
puVar5 = PTR_DAT_1401ac010;
|
|
}
|
|
*(undefined **)(param_2 + 0x26) = puVar5;
|
|
if (*(undefined **)(param_1 + 0x7c) != puVar5) {
|
|
piVar6 = (int *)FUN_14006cb70(puVar2,puVar9,uVar12,param_4);
|
|
FUN_14006b350(piVar6);
|
|
FUN_1400031e0((longlong *)(param_2 + 0x26),puVar9,uVar12,param_4);
|
|
puVar5 = *(undefined **)(param_1 + 0x7c);
|
|
*(undefined **)(param_2 + 0x26) = puVar5;
|
|
if (((puVar5 != PTR_DAT_1401ac010) && (puVar5 != (undefined *)0x0)) &&
|
|
(puVar5 != (undefined *)0x8)) {
|
|
*(int *)(puVar5 + -4) = *(int *)(puVar5 + -4) + 1;
|
|
}
|
|
FUN_14006b3e0((longlong)piVar6);
|
|
}
|
|
*(undefined8 *)(param_2 + 0x2c) = *(undefined8 *)(param_1 + 0xc);
|
|
*(undefined8 *)(param_2 + 0x2e) = *(undefined8 *)(param_1 + 0x78);
|
|
uVar14 = (**(code **)(**(longlong **)(*(longlong *)(param_1 + 0x8e) + 0x478) + 0x18))
|
|
(*(longlong **)(*(longlong *)(param_1 + 0x8e) + 0x478),param_1[0x1be]);
|
|
param_2[0x32] = uVar14;
|
|
param_2[0x30] = param_1[0x76];
|
|
param_2[0x31] = param_1[0x77];
|
|
return;
|
|
}
|
|
|