/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x140009b10 FUN_140009b10 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ undefined8 FUN_140009b10(longlong *param_1,wchar_t *param_2,ulonglong param_3,undefined8 param_4) { longlong lVar1; undefined *puVar2; ulonglong uVar3; int *piVar4; int *piVar5; undefined8 uVar6; uint7 extraout_var; undefined **ppuVar7; int *piVar8; undefined8 *puVar9; wchar_t *pwVar10; undefined *puVar11; uint uVar12; longlong lVar13; undefined1 auStack_e8 [32]; int *local_c8; undefined1 local_c0; int *local_b8; undefined1 local_b0; int *local_a8; undefined1 local_a0; undefined8 local_98; undefined *local_88; undefined2 local_80; undefined4 local_7c; undefined4 local_78; undefined4 local_74; undefined4 local_70; undefined8 local_68 [6]; ulonglong local_38; local_98 = 0xfffffffffffffffe; uVar3 = DAT_1401ac5a0 ^ (ulonglong)auStack_e8; uVar12 = 0; if (0 < DAT_1401bcf24) { lVar13 = 0; local_38 = uVar3; do { if (*(longlong *)(*param_1 + lVar13) != 0) { lVar1 = *(longlong *)(*param_1 + lVar13); if (*(longlong *)(lVar1 + 0x10) == 0) { pwVar10 = L"ERROR >> MagiCommonSession::Connect2 | m_NetClient is null!"; LAB_140009d4b: FUN_14000aa90(4,pwVar10,param_3,param_4); } else { puVar2 = *(undefined **)(lVar1 + 0x30); if (((puVar2 == (undefined *)0x0) || (puVar2 == PTR_DAT_1401ac010)) || (*(int *)(puVar2 + -8) < 1)) { pwVar10 = L"ERROR >> MagiCommonSession::Connect2 | m_Address is empty!"; goto LAB_140009d4b; } if (*(char *)(lVar1 + 0x18) == '\0') { pwVar10 = L"ERROR >> MagiCommonSession::Connect2 | IsUse is false!"; goto LAB_140009d4b; } if (*(char *)(lVar1 + 0x19) == '\x01') { do { Sleep(10); param_2 = (wchar_t *)0x0; uVar3 = (**(code **)(**(longlong **)(lVar1 + 0x10) + 0x98))(); } while (*(char *)(lVar1 + 0x19) != '\0'); if (*(char *)(lVar1 + 0x1a) == '\x01') goto LAB_140009d69; } ppuVar7 = &local_88; FUN_1400780f0(ppuVar7,param_2,param_3,param_4); local_7c = DAT_1401bcff0; local_78 = _DAT_1401bcff4; local_74 = _DAT_1401bcff8; local_70 = _DAT_1401bcffc; if (local_88 == (undefined *)0x0) { local_88 = PTR_DAT_1401ac010; } if (*(undefined **)(lVar1 + 0x30) != local_88) { piVar4 = (int *)FUN_14006cb70(ppuVar7,param_2,param_3,param_4); piVar8 = piVar4; local_c8 = piVar4; FUN_14006b350(piVar4); puVar2 = local_88; local_c0 = 1; if (((local_88 != (undefined *)0x0) && (local_88 != PTR_DAT_1401ac010)) && (puVar11 = local_88 + -8, puVar11 != (undefined *)0x0)) { piVar5 = (int *)FUN_14006cb70(piVar8,param_2,param_3,param_4); local_a8 = piVar5; FUN_14006b350(piVar5); local_a0 = 1; piVar8 = (int *)(puVar2 + -4); *piVar8 = *piVar8 + -1; if (*piVar8 == 0) { FUN_14006cc60(puVar11); } FUN_14006b3e0((longlong)piVar5); local_a0 = 0; } local_88 = *(undefined **)(lVar1 + 0x30); if (((local_88 != PTR_DAT_1401ac010) && (local_88 != (undefined *)0x0)) && (local_88 != (undefined *)0x8)) { *(int *)(local_88 + -4) = *(int *)(local_88 + -4) + 1; } FUN_14006b3e0((longlong)piVar4); local_c0 = 0; } local_80 = *(undefined2 *)(lVar1 + 0x38); param_2 = (wchar_t *)&local_88; uVar6 = FUN_140002310(lVar1,param_2,param_3,param_4); puVar9 = local_68; uVar3 = FUN_140078360(puVar9); puVar2 = local_88; if (((local_88 != (undefined *)0x0) && (local_88 != PTR_DAT_1401ac010)) && (puVar11 = local_88 + -8, puVar11 != (undefined *)0x0)) { piVar4 = (int *)FUN_14006cb70(puVar9,param_2,param_3,param_4); local_b8 = piVar4; FUN_14006b350(piVar4); local_b0 = 1; piVar8 = (int *)(puVar2 + -4); *piVar8 = *piVar8 + -1; if (*piVar8 == 0) { FUN_14006cc60(puVar11); } uVar3 = FUN_14006b3e0((longlong)piVar4); local_b0 = 0; } if ((char)uVar6 != '\0') goto LAB_140009d69; } param_3 = (ulonglong)uVar12; param_2 = L"ERROR >> DBC CONNECTION FAILED - [%d]"; FUN_14000aa90(0xc,L"ERROR >> DBC CONNECTION FAILED - [%d]",param_3,param_4); uVar3 = (ulonglong)extraout_var << 8; } LAB_140009d69: uVar12 = uVar12 + 1; lVar13 = lVar13 + 8; } while ((int)uVar12 < DAT_1401bcf24); } return CONCAT71((int7)(uVar3 >> 8),1); }