From 5f320bcf25935f1e9d752dea1181ec0b3d489953 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 11 Nov 2022 04:41:37 +0200 Subject: [PATCH] Better address check --- Core/Memory/VirtualMemoryManager.cpp | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/Core/Memory/VirtualMemoryManager.cpp b/Core/Memory/VirtualMemoryManager.cpp index fd32698..8376ee5 100644 --- a/Core/Memory/VirtualMemoryManager.cpp +++ b/Core/Memory/VirtualMemoryManager.cpp @@ -13,7 +13,33 @@ namespace Memory PageMapIndexer Index = PageMapIndexer((uint64_t)Address); PageDirectoryEntry PDE = this->Table->Entries[Index.PDPIndex]; - return PDE.GetFlag(Flag); + PageTable *PDP = nullptr; + PageTable *PD = nullptr; + PageTable *PT = nullptr; + if (PDE.GetFlag(Flag)) + PDP = (PageTable *)((uint64_t)PDE.GetAddress() << 12); + else + return false; + + PDE = PDP->Entries[Index.PDIndex]; + if (PDE.GetFlag(Flag)) + PD = (PageTable *)((uint64_t)PDE.GetAddress() << 12); + else + return false; + + PDE = PD->Entries[Index.PTIndex]; + if (PDE.GetFlag(Flag)) + PT = (PageTable *)((uint64_t)PDE.GetAddress() << 12); + else + return false; + + PDE = PT->Entries[Index.PIndex]; + if (PDE.GetFlag(Flag)) + return true; + else + return false; + + return false; } void Virtual::Map(void *VirtualAddress, void *PhysicalAddress, uint64_t Flags)