/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401f79c0 FUN_1401f79c0 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_1401f79c0(longlong param_1,longlong param_2) { ulonglong uVar1; undefined1 *puVar2; char cVar3; uint uVar4; uint uVar5; int iVar6; undefined8 *puVar7; void *_Src; uint *puVar8; undefined8 uVar9; uint *puVar10; uint *puVar11; undefined8 *puVar12; longlong *plVar13; undefined *puVar14; uint uVar15; size_t _Size; uint uVar16; uint uVar17; longlong *plVar19; uint *puVar20; uint uVar21; longlong lVar22; double dVar23; undefined1 auStack_218 [32]; uint *local_1f8; uint *local_1f0; longlong *local_1e8; uint *local_1e0; longlong local_1d8; undefined8 local_1d0; undefined **local_1c8; undefined4 local_1c0; undefined2 local_1bc; int local_1b8; longlong local_1b0; undefined8 local_1a8; undefined8 *local_1a0; undefined8 local_198; undefined1 local_190; undefined8 local_188; undefined1 local_180; longlong *local_178; longlong local_170; longlong *local_168; longlong local_160; undefined8 local_158; undefined1 local_150; undefined8 local_148; undefined1 local_140; undefined8 local_138; undefined1 local_130; undefined8 local_128; undefined1 local_120; undefined8 local_118; uint **local_110; uint *local_108; undefined8 local_100; undefined1 local_f8; undefined1 *local_e8; undefined1 local_e0 [136]; ulonglong local_58; uint *puVar18; local_118 = 0xfffffffffffffffe; local_58 = DAT_1403463c0 ^ (ulonglong)auStack_218; puVar12 = (undefined8 *)(param_2 + 0x10); puVar18 = (uint *)0x0; uVar16 = 0; local_1d8 = param_1; local_1b0 = param_2; local_1a0 = puVar12; do { local_1c8 = Proud::AddrPort::vftable; uVar17 = 0; local_1b8 = 0; local_1d0 = 0; local_1c0 = DAT_140344450; local_1bc = DAT_140344454; puVar8 = puVar18; if ((undefined8 *)*puVar12 != (undefined8 *)0x0) { puVar8 = *(uint **)*puVar12; } cVar3 = FUN_14019c2f0(puVar8,0,&local_1d0); if (cVar3 == '\0') { return; } *(undefined1 *)(param_2 + 0xc0) = 0; if ((local_1d0._4_4_ != 0) || (local_1b8 == 0)) { *(undefined4 *)(param_2 + 0x18) = 3; local_1a8 = 0; FUN_1401786c0(puVar12,&local_1a8); return; } FUN_14016d8c0(); local_1f8 = (uint *)PTR_DAT_140344098; local_110 = &local_1f8; uVar5 = local_1b8 + 2U; if ((int)(local_1b8 + 2U) < 1) { uVar5 = uVar17; } uVar4 = 1; if (1 < (int)uVar5) { uVar4 = uVar5; } puVar8 = local_1f8; if (0 < (int)uVar4) { if ((int)uVar4 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } if (uVar4 == 0) { puVar8 = local_1f8; } else { puVar8 = (uint *)FUN_14016d940((longlong)(int)uVar4 + 9); if (puVar8 != (uint *)0x0) { *puVar8 = 0; puVar8[1] = 1; } *puVar8 = uVar4; uVar5 = uVar17; if ((local_1f8 != (uint *)0x0) && (local_1f8 != (uint *)PTR_DAT_140344098)) { uVar5 = local_1f8[-2]; } puVar10 = (uint *)PTR_DAT_140344098; if ((int)uVar4 < (int)uVar5) { LAB_1401f7b37: if (local_1f8 != (uint *)0x0) { puVar10 = local_1f8; } } else { uVar4 = uVar17; if (local_1f8 != (uint *)0x0) { if (local_1f8 != (uint *)PTR_DAT_140344098) { uVar4 = local_1f8[-2]; } goto LAB_1401f7b37; } } puVar8 = puVar8 + 2; FUN_14016d810(puVar8,puVar10,uVar4); puVar10 = local_1f8; if (((local_1f8 != (uint *)0x0) && (local_1f8 != (uint *)PTR_DAT_140344098)) && (puVar11 = local_1f8 + -2, puVar11 != (uint *)0x0)) { uVar9 = FUN_14016d8c0(); local_138 = uVar9; FUN_14016db50(uVar9); local_130 = 1; puVar10 = puVar10 + -1; *puVar10 = *puVar10 - 1; if (*puVar10 == 0) { FUN_14016d970(puVar11); } FUN_14016dbe0(uVar9); local_130 = 0; } } } local_1f8 = puVar8; puVar8 = (uint *)PTR_DAT_140344098; if (((local_1f8 == (uint *)0x0) || (puVar8 = local_1f8, local_1f8 == (uint *)PTR_DAT_140344098)) || (local_1f8 + -2 == (uint *)0x0)) { local_1f8 = puVar8; puVar7 = (undefined8 *)FUN_14016d940(); *puVar7 = 0; *(undefined1 *)(puVar7 + 1) = 0; if (puVar7 != (undefined8 *)0x0) { *(undefined4 *)puVar7 = 0; *(undefined4 *)((longlong)puVar7 + 4) = 1; } *(undefined1 *)(puVar7 + 1) = 0; puVar8 = (uint *)(puVar7 + 1); } else if (1 < (int)local_1f8[-1]) { uVar5 = local_1f8[-2]; if ((int)uVar5 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } puVar8 = (uint *)FUN_14016d940((longlong)(int)uVar5 + 9); if (puVar8 != (uint *)0x0) { *puVar8 = 0; puVar8[1] = 1; } uVar5 = uVar16; if ((local_1f8 != (uint *)0x0) && (local_1f8 != (uint *)PTR_DAT_140344098)) { uVar5 = local_1f8[-2]; } *puVar8 = uVar5; puVar10 = (uint *)PTR_DAT_140344098; puVar11 = puVar18; if ((local_1f8 != (uint *)0x0) && (puVar10 = local_1f8, puVar11 = (uint *)0x0, local_1f8 != (uint *)PTR_DAT_140344098)) { puVar11 = (uint *)(ulonglong)local_1f8[-2]; } puVar8 = puVar8 + 2; FUN_14016d810(puVar8,puVar10,puVar11); puVar10 = local_1f8; if (((local_1f8 != (uint *)0x0) && (local_1f8 != (uint *)PTR_DAT_140344098)) && (puVar11 = local_1f8 + -2, puVar11 != (uint *)0x0)) { uVar9 = FUN_14016d8c0(); local_198 = uVar9; FUN_14016db50(uVar9); local_190 = 1; puVar10 = puVar10 + -1; *puVar10 = *puVar10 - 1; if (*puVar10 == 0) { FUN_14016d970(puVar11); } FUN_14016dbe0(uVar9); local_190 = 0; } } local_1f8 = puVar8; puVar8 = local_1f8; if (local_1f8 == (uint *)0x0) { puVar8 = (uint *)PTR_DAT_140344098; } puVar10 = puVar18; if ((undefined8 *)*puVar12 != (undefined8 *)0x0) { puVar10 = *(uint **)*puVar12; } _Size = (size_t)local_1b8; local_108 = puVar8; _Src = (void *)FUN_14019c8b0(puVar10); memcpy(puVar8,_Src,_Size); *(undefined1 *)((longlong)local_1b8 + (longlong)puVar8) = 0; puVar8 = local_1f8; if (local_1f8 == (uint *)0x0) { puVar8 = (uint *)PTR_DAT_140344098; } uVar4 = FUN_14016d7e0(puVar8); uVar5 = uVar16; if (0 < (int)uVar4) { uVar5 = uVar4; } uVar15 = 0; uVar4 = uVar15; if ((local_1f8 != (uint *)0x0) && (local_1f8 != (uint *)PTR_DAT_140344098)) { uVar4 = local_1f8[-2]; } if (((int)uVar5 < (int)uVar4) || (uVar5 = uVar15, local_1f8 == (uint *)0x0)) { LAB_1401f7d5a: if (((local_1f8 != (uint *)PTR_DAT_140344098) && (local_1f8 != (uint *)0x0)) && (puVar8 = local_1f8 + -2, puVar8 != (uint *)0x0)) { *puVar8 = uVar5; *(undefined1 *)((longlong)(int)uVar5 + 8 + (longlong)puVar8) = 0; } } else if (local_1f8 != (uint *)PTR_DAT_140344098) { uVar5 = local_1f8[-2]; goto LAB_1401f7d5a; } local_1e8 = operator_new(0x2540); puVar8 = puVar18; if (local_1e8 != (void *)0x0) { puVar8 = (uint *)FUN_1401f5800(local_1e8); } if (puVar8 == (uint *)0x0) { local_1e8 = (longlong *)0x0; } else { local_1e8 = (longlong *)FUN_14016d940(0x10); local_1e8[1] = 1; *local_1e8 = (longlong)puVar8; } plVar19 = local_1e8; FUN_14016d8c0(); local_1e0 = (uint *)PTR_DAT_140344098; if (PTR_DAT_140344098 == (undefined *)0x0) { local_1e0 = puVar18; } if (local_1f8 != (uint *)PTR_DAT_140344098) { uVar9 = FUN_14016d8c0(); local_148 = uVar9; FUN_14016db50(uVar9); local_140 = 1; FUN_14004f5a0(&local_1e0); local_1e0 = local_1f8; if (((local_1f8 != (uint *)PTR_DAT_140344098) && (local_1f8 != (uint *)0x0)) && (local_1f8 != (uint *)0x8)) { local_1f8[-1] = local_1f8[-1] + 1; } FUN_14016dbe0(uVar9); local_140 = 0; } puVar8 = puVar18; if (plVar19 != (longlong *)0x0) { puVar8 = (uint *)*plVar19; } cVar3 = FUN_1401f5340(puVar8,&local_1e0); if ((cVar3 != '\0') && (*(ulonglong *)(param_1 + 0x70) < 0x14)) { puVar8 = puVar18; if (plVar19 != (longlong *)0x0) { puVar8 = (uint *)*plVar19; } local_e8 = local_e0; FUN_14016ac90(&local_e8,(undefined1 *)((longlong)puVar8 + 0x52),3); puVar2 = local_e8; FUN_14016d8c0(); puVar8 = (uint *)PTR_DAT_140344098; local_1f0 = (uint *)PTR_DAT_140344098; uVar5 = FUN_14016d7e0(puVar2); puVar10 = puVar18; if ((puVar8 != (uint *)0x0) && (puVar10 = (uint *)0x0, puVar8 != (uint *)PTR_DAT_140344098)) { puVar10 = (uint *)(ulonglong)*(uint *)((longlong)puVar8 + -8); } uVar4 = uVar5; if ((((int)uVar5 <= (int)puVar10) && (uVar4 = uVar15, puVar8 != (uint *)0x0)) && (puVar8 != (uint *)PTR_DAT_140344098)) { uVar4 = *(uint *)((longlong)puVar8 + -8); } uVar21 = 1; if (1 < (int)uVar4) { uVar21 = uVar4; } uVar4 = uVar15; if ((puVar8 != (uint *)0x0) && (puVar8 != (uint *)PTR_DAT_140344098)) { uVar4 = *(uint *)((longlong)puVar8 + -8); } if ((int)uVar4 < (int)uVar21) { if (puVar8 == (uint *)0x0) { puVar8 = (uint *)PTR_DAT_140344098; } local_1f0 = puVar8; if ((int)uVar21 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } if (uVar21 == 0) { FUN_14004f5a0(&local_1f0); puVar8 = local_1f0; } else { uVar4 = uVar15; if ((puVar8 != (uint *)0x0) && (puVar8 != (uint *)PTR_DAT_140344098)) { uVar4 = puVar8[-2]; } if (uVar21 != uVar4) { puVar10 = (uint *)FUN_14016d940((longlong)(int)uVar21 + 9); if (puVar10 != (uint *)0x0) { *puVar10 = 0; puVar10[1] = 1; } *puVar10 = uVar21; uVar4 = uVar16; if ((puVar8 != (uint *)0x0) && (puVar8 != (uint *)PTR_DAT_140344098)) { uVar4 = puVar8[-2]; } puVar11 = (uint *)PTR_DAT_140344098; if ((int)uVar21 < (int)uVar4) { LAB_1401f7f82: if (puVar8 != (uint *)0x0) { puVar11 = puVar8; } } else { uVar21 = uVar17; if (puVar8 != (uint *)0x0) { if (puVar8 != (uint *)PTR_DAT_140344098) { uVar21 = puVar8[-2]; } goto LAB_1401f7f82; } } puVar8 = puVar10 + 2; FUN_14016d810(puVar8,puVar11,uVar21); FUN_14004f5a0(&local_1f0); local_1f0 = puVar8; } } } if (((puVar8 == (uint *)0x0) || (puVar8 == (uint *)PTR_DAT_140344098)) || (puVar10 = puVar8 + -2, puVar10 == (uint *)0x0)) { puVar12 = (undefined8 *)FUN_14016d940(); *puVar12 = 0; *(undefined1 *)(puVar12 + 1) = 0; if (puVar12 != (undefined8 *)0x0) { *(undefined4 *)puVar12 = 0; *(undefined4 *)((longlong)puVar12 + 4) = 1; } puVar11 = (uint *)(puVar12 + 1); *(undefined1 *)puVar11 = 0; puVar20 = puVar11; } else { puVar11 = puVar8; puVar20 = local_1f0; if (1 < (int)puVar8[-1]) { if ((int)*puVar10 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } puVar11 = (uint *)FUN_14016d940((longlong)(int)*puVar10 + 9); if (puVar11 != (uint *)0x0) { *puVar11 = 0; puVar11[1] = 1; } uVar17 = uVar16; if (puVar8 != (uint *)PTR_DAT_140344098) { uVar17 = *puVar10; } *puVar11 = uVar17; puVar20 = puVar18; if (puVar8 != (uint *)PTR_DAT_140344098) { puVar20 = (uint *)(ulonglong)*puVar10; } puVar11 = puVar11 + 2; FUN_14016d810(puVar11,puVar8,puVar20); param_1 = local_1d8; puVar20 = puVar11; if ((puVar8 != (uint *)PTR_DAT_140344098) && (puVar10 != (uint *)0x0)) { uVar9 = FUN_14016d8c0(); local_158 = uVar9; FUN_14016db50(uVar9); local_150 = 1; puVar8 = puVar8 + -1; *puVar8 = *puVar8 - 1; if (*puVar8 == 0) { FUN_14016d970(puVar10); } FUN_14016dbe0(uVar9); local_150 = 0; param_1 = local_1d8; } } } local_1f0 = puVar20; puVar8 = puVar11; if (puVar11 == (uint *)0x0) { puVar8 = (uint *)PTR_DAT_140344098; } FUN_14016d810(puVar8,puVar2,uVar5); puVar8 = puVar11; if (puVar11 == (uint *)0x0) { puVar8 = (uint *)PTR_DAT_140344098; } uVar5 = FUN_14016d7e0(puVar8); uVar17 = uVar16; if (0 < (int)uVar5) { uVar17 = uVar5; } uVar5 = uVar15; if ((puVar11 != (uint *)0x0) && (puVar11 != (uint *)PTR_DAT_140344098)) { uVar5 = puVar11[-2]; } if (((int)uVar17 < (int)uVar5) || (uVar17 = uVar15, puVar11 == (uint *)0x0)) { LAB_1401f810d: if (((puVar11 != (uint *)PTR_DAT_140344098) && (puVar11 != (uint *)0x0)) && (puVar8 = puVar11 + -2, puVar8 != (uint *)0x0)) { *puVar8 = uVar17; *(undefined1 *)((longlong)(int)uVar17 + 8 + (longlong)puVar8) = 0; } } else if (puVar11 != (uint *)PTR_DAT_140344098) { uVar17 = puVar11[-2]; goto LAB_1401f810d; } if (local_e8 != local_e0) { free(local_e8); } lVar22 = param_1 + 0x50; puVar8 = puVar11; if (puVar11 == (uint *)0x0) { puVar8 = (uint *)PTR_DAT_140344098; } local_170 = lVar22; if (puVar8 == (uint *)0x0) { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x80004005); } puVar8 = puVar11; if (puVar11 == (uint *)0x0) { puVar8 = (uint *)PTR_DAT_140344098; } cVar3 = (char)*puVar8; puVar10 = puVar18; while (cVar3 != '\0') { puVar10 = (uint *)(ulonglong)(uint)((int)puVar10 * 0x21 + (int)cVar3); puVar8 = (uint *)((longlong)puVar8 + 1); cVar3 = *(char *)puVar8; } uVar1 = (ulonglong)puVar10 % (ulonglong)*(uint *)(param_1 + 0x78); if (*(longlong *)(param_1 + 0x58) != 0) { for (plVar13 = *(longlong **)(*(longlong *)(param_1 + 0x58) + uVar1 * 8); (plVar13 != (longlong *)0x0 && ((uint)uVar1 == *(uint *)(plVar13 + 4) % *(uint *)(param_1 + 0x78))); plVar13 = (longlong *)plVar13[2]) { puVar14 = (undefined *)*plVar13; if ((undefined *)*plVar13 == (undefined *)0x0) { puVar14 = PTR_DAT_140344098; } iVar6 = FUN_14016d840(puVar14); if (iVar6 == 0) { local_178 = plVar13; if (plVar13 != (longlong *)0x0) goto LAB_1401f8342; goto LAB_1401f820b; } } } local_178 = (longlong *)0x0; LAB_1401f820b: puVar8 = puVar11; if (puVar11 == (uint *)0x0) { puVar8 = (uint *)PTR_DAT_140344098; } local_160 = lVar22; if (puVar8 == (uint *)0x0) { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x80004005); } puVar8 = puVar11; if (puVar11 == (uint *)0x0) { puVar8 = (uint *)PTR_DAT_140344098; } cVar3 = (char)*puVar8; puVar10 = puVar18; while (cVar3 != '\0') { puVar10 = (uint *)(ulonglong)(uint)((int)puVar10 * 0x21 + (int)cVar3); puVar8 = (uint *)((longlong)puVar8 + 1); cVar3 = *(char *)puVar8; } uVar1 = (ulonglong)puVar10 % (ulonglong)*(uint *)(param_1 + 0x78); if (*(longlong *)(param_1 + 0x58) != 0) { for (plVar13 = *(longlong **)(*(longlong *)(param_1 + 0x58) + uVar1 * 8); (plVar13 != (longlong *)0x0 && ((uint)uVar1 == *(uint *)(plVar13 + 4) % *(uint *)(param_1 + 0x78))); plVar13 = (longlong *)plVar13[2]) { puVar14 = (undefined *)*plVar13; if ((undefined *)*plVar13 == (undefined *)0x0) { puVar14 = PTR_DAT_140344098; } iVar6 = FUN_14016d840(puVar14); if (iVar6 == 0) { local_168 = plVar13; if (plVar13 != (longlong *)0x0) goto LAB_1401f8342; goto LAB_1401f82c4; } } } local_168 = (longlong *)0x0; LAB_1401f82c4: plVar13 = (longlong *)FUN_1401f7560(lVar22,&local_1f0); if (plVar19 != (longlong *)*plVar13) { if (plVar19 != (longlong *)0x0) { plVar19[1] = plVar19[1] + 1; puVar11 = local_1f0; plVar19 = local_1e8; } puVar8 = puVar18; if ((*plVar13 != 0) && (*(longlong *)(*plVar13 + 8) = *(longlong *)(*plVar13 + 8) + -1, puVar11 = local_1f0, plVar19 = local_1e8, *(longlong *)(*plVar13 + 8) == 0)) { puVar8 = (uint *)*plVar13; } *plVar13 = (longlong)plVar19; if (puVar8 != (uint *)0x0) { puVar12 = *(undefined8 **)puVar8; if (puVar12 != (undefined8 *)0x0) { (**(code **)*puVar12)(puVar12,1); } FUN_14016d970(puVar8); } } LAB_1401f8342: if (((puVar11 != (uint *)0x0) && (puVar11 != (uint *)PTR_DAT_140344098)) && (puVar11 + -2 != (uint *)0x0)) { uVar9 = FUN_14016d8c0(); local_188 = uVar9; FUN_14016db50(uVar9); local_180 = 1; puVar8 = puVar11 + -1; *puVar8 = *puVar8 - 1; if (*puVar8 == 0) { FUN_14016d970(puVar11 + -2); } FUN_14016dbe0(uVar9); local_180 = 0; } local_1f0 = (uint *)PTR_DAT_140344098; param_1 = local_1d8; puVar12 = local_1a0; } dVar23 = (double)FUN_1401eac50(*(undefined8 *)(param_1 + 8)); param_2 = local_1b0; if (3.0 < dVar23 - *(double *)(local_1b0 + 200)) { if ((undefined8 *)*puVar12 != (undefined8 *)0x0) { puVar18 = *(uint **)*puVar12; } FUN_14019c630(puVar18); plVar13 = local_1e8; *(undefined4 *)(param_2 + 0x18) = 3; if (plVar19 != (longlong *)0x0) { plVar19 = plVar19 + 1; *plVar19 = *plVar19 + -1; if (*plVar19 == 0) { puVar12 = (undefined8 *)*local_1e8; if (puVar12 != (undefined8 *)0x0) { (**(code **)*puVar12)(puVar12,1); } FUN_14016d970(plVar13); } } puVar18 = local_1f8; if (((local_1f8 != (uint *)0x0) && (local_1f8 != (uint *)PTR_DAT_140344098)) && (puVar8 = local_1f8 + -2, puVar8 != (uint *)0x0)) { uVar9 = FUN_14016d8c0(); local_100 = uVar9; FUN_14016db50(uVar9); local_f8 = 1; puVar18 = puVar18 + -1; *puVar18 = *puVar18 - 1; if (*puVar18 == 0) { FUN_14016d970(puVar8); } FUN_14016dbe0(uVar9); } return; } FUN_1401f6490(param_1); plVar13 = local_1e8; if (plVar19 != (longlong *)0x0) { plVar19 = plVar19 + 1; *plVar19 = *plVar19 + -1; if (*plVar19 == 0) { if ((undefined8 *)*local_1e8 != (undefined8 *)0x0) { (*(code *)**(undefined8 **)*local_1e8)(); } FUN_14016d970(plVar13); } } puVar8 = local_1f8; if (((local_1f8 != (uint *)0x0) && (local_1f8 != (uint *)PTR_DAT_140344098)) && (puVar10 = local_1f8 + -2, puVar10 != (uint *)0x0)) { uVar9 = FUN_14016d8c0(); local_128 = uVar9; FUN_14016db50(uVar9); local_120 = 1; puVar8 = puVar8 + -1; *puVar8 = *puVar8 - 1; if (*puVar8 == 0) { FUN_14016d970(puVar10); } FUN_14016dbe0(uVar9); local_120 = 0; } local_1f8 = (uint *)PTR_DAT_140344098; } while( true ); }