Stop memory modification check when a invalid address is found

This commit is contained in:
gdkchan 2019-12-24 22:43:47 -03:00 committed by Thog
parent a718b60d06
commit 6cf9a04d98

View file

@ -268,33 +268,34 @@ namespace ARMeilleure.Memory
while (address < endAddress) while (address < endAddress)
{ {
if (IsValidPosition((long)address)) // If the address is invalid, we stop and consider all the remaining memory
// as not modified (since the address is invalid, we can't check, and technically
// the memory doesn't exist).
if (!IsValidPosition((long)address))
{ {
byte* ptr = ((byte**)_pageTable)[address >> PageBits]; break;
}
ulong ptrUlong = (ulong)ptr; byte* ptr = ((byte**)_pageTable)[address >> PageBits];
if ((ptrUlong & idMask) == 0) ulong ptrUlong = (ulong)ptr;
{
// Modified.
currSize += PageSize;
SetPtEntryFlag((long)address, (long)idMask); if ((ptrUlong & idMask) == 0)
} {
else // Modified.
{ currSize += PageSize;
if (currSize != 0)
{
ranges.Add((currAddr, currSize));
}
currAddr = address + PageSize; SetPtEntryFlag((long)address, (long)idMask);
currSize = 0;
}
} }
else else
{ {
currSize += PageSize; if (currSize != 0)
{
ranges.Add((currAddr, currSize));
}
currAddr = address + PageSize;
currSize = 0;
} }
address += PageSize; address += PageSize;