88 lines
2.7 KiB
C
88 lines
2.7 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x1401e5d90 FUN_1401e5d90
|
|
* Pseudocode, not original source. */
|
|
|
|
uint FUN_1401e5d90(longlong param_1,uint param_2)
|
|
|
|
{
|
|
char *pcVar1;
|
|
char *pcVar2;
|
|
ushort uVar3;
|
|
uint uVar4;
|
|
longlong lVar5;
|
|
char *pcVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
char *pcVar9;
|
|
char *pcVar10;
|
|
int iVar11;
|
|
uint uVar12;
|
|
ulonglong uVar13;
|
|
ulonglong uVar14;
|
|
char cVar15;
|
|
char cVar16;
|
|
uint uVar17;
|
|
|
|
uVar8 = *(uint *)(param_1 + 0x94);
|
|
uVar7 = *(uint *)(param_1 + 0xa4);
|
|
lVar5 = *(longlong *)(param_1 + 0x50);
|
|
uVar13 = (ulonglong)(int)*(uint *)(param_1 + 0xa0);
|
|
uVar14 = (ulonglong)param_2;
|
|
pcVar2 = (char *)((ulonglong)uVar8 + lVar5);
|
|
if (*(int *)(param_1 + 0x44) - 0x106U < uVar8) {
|
|
uVar8 = (uVar8 - *(int *)(param_1 + 0x44)) + 0x106;
|
|
}
|
|
else {
|
|
uVar8 = 0;
|
|
}
|
|
cVar15 = pcVar2[uVar13 - 1];
|
|
cVar16 = pcVar2[uVar13];
|
|
if (*(uint *)(param_1 + 0xb4) <= *(uint *)(param_1 + 0xa0)) {
|
|
uVar7 = uVar7 >> 2;
|
|
}
|
|
uVar4 = *(uint *)(param_1 + 0x9c);
|
|
uVar17 = *(uint *)(param_1 + 0xb8);
|
|
if (uVar4 < *(uint *)(param_1 + 0xb8)) {
|
|
uVar17 = uVar4;
|
|
}
|
|
do {
|
|
iVar11 = (int)uVar13;
|
|
pcVar6 = (char *)(lVar5 + uVar14);
|
|
if ((((pcVar6[iVar11] == cVar16) && (pcVar6[(longlong)iVar11 + -1] == cVar15)) &&
|
|
(*pcVar6 == *pcVar2)) && (pcVar6[1] == pcVar2[1])) {
|
|
pcVar6 = pcVar6 + 2;
|
|
pcVar9 = pcVar2 + 2;
|
|
while (((((pcVar10 = pcVar9 + 1, *pcVar10 == pcVar6[1] &&
|
|
(pcVar10 = pcVar9 + 2, *pcVar10 == pcVar6[2])) &&
|
|
((pcVar10 = pcVar9 + 3, *pcVar10 == pcVar6[3] &&
|
|
((pcVar10 = pcVar9 + 4, *pcVar10 == pcVar6[4] &&
|
|
(pcVar10 = pcVar9 + 5, *pcVar10 == pcVar6[5])))))) &&
|
|
(pcVar10 = pcVar9 + 6, *pcVar10 == pcVar6[6])) &&
|
|
(pcVar10 = pcVar9 + 7, *pcVar10 == pcVar6[7]))) {
|
|
pcVar1 = pcVar6 + 8;
|
|
pcVar6 = pcVar6 + 8;
|
|
pcVar10 = pcVar9 + 8;
|
|
if ((*pcVar10 != *pcVar1) || (pcVar9 = pcVar10, pcVar2 + 0x102 <= pcVar10)) break;
|
|
}
|
|
uVar12 = ((int)pcVar10 - (int)(pcVar2 + 0x102)) + 0x102;
|
|
if (iVar11 < (int)uVar12) {
|
|
*(int *)(param_1 + 0x98) = (int)uVar14;
|
|
uVar13 = (ulonglong)uVar12;
|
|
if ((int)uVar17 <= (int)uVar12) break;
|
|
cVar15 = pcVar2[(longlong)(int)uVar12 + -1];
|
|
cVar16 = pcVar2[(int)uVar12];
|
|
}
|
|
}
|
|
uVar12 = (uint)uVar13;
|
|
uVar3 = *(ushort *)(*(longlong *)(param_1 + 0x60) + (*(uint *)(param_1 + 0x4c) & uVar14) * 2);
|
|
uVar14 = (ulonglong)uVar3;
|
|
if (uVar3 <= uVar8) break;
|
|
uVar7 = uVar7 - 1;
|
|
lVar5 = *(longlong *)(param_1 + 0x50);
|
|
} while (uVar7 != 0);
|
|
if (uVar12 <= uVar4) {
|
|
uVar4 = uVar12;
|
|
}
|
|
return uVar4;
|
|
}
|
|
|