Gudenau's Sick RWE patch

master
James 2017-11-20 23:49:23 -05:00
parent cbf427a9c8
commit 56691f48a6
6 changed files with 9 additions and 9 deletions

View File

@ -134,15 +134,15 @@ void WriteProtectMemory(void* ptr, size_t size, bool allowExecute)
#endif
}
void UnWriteProtectMemory(void* ptr, size_t size, bool allowExecute)
// Do not modify this to allow execution, allowing RWE is a bad idea
void UnWriteProtectMemory(void* ptr, size_t size)
{
#ifdef _WIN32
DWORD oldValue;
if (!VirtualProtect(ptr, size, allowExecute ? PAGE_EXECUTE_READWRITE : PAGE_READWRITE, &oldValue))
if (!VirtualProtect(ptr, size, PAGE_READWRITE, &oldValue))
PanicAlert("UnWriteProtectMemory failed!\nVirtualProtect: %s", GetLastErrorString().c_str());
#else
if (mprotect(ptr, size,
allowExecute ? (PROT_READ | PROT_WRITE | PROT_EXEC) : PROT_WRITE | PROT_READ) != 0)
if (mprotect(ptr, size, PROT_WRITE | PROT_READ) != 0)
{
PanicAlert("UnWriteProtectMemory failed!\nmprotect: %s", LastStrerrorString().c_str());
}

View File

@ -16,7 +16,7 @@ void* AllocateAlignedMemory(size_t size, size_t alignment);
void FreeAlignedMemory(void* ptr);
void ReadProtectMemory(void* ptr, size_t size);
void WriteProtectMemory(void* ptr, size_t size, bool executable = false);
void UnWriteProtectMemory(void* ptr, size_t size, bool allowExecute = false);
void UnWriteProtectMemory(void* ptr, size_t size);
size_t MemPhysical();
} // namespace Common

View File

@ -288,7 +288,7 @@ static const u8* gdsp_idma_in(u16 dsp_addr, u32 addr, u32 size)
const u8* code = &g_dsp.cpu_ram[addr & 0x0fffffff];
g_dsp.iram_crc = HashEctor(code, size);
Common::UnWriteProtectMemory(g_dsp.iram, DSP_IRAM_BYTE_SIZE, false);
Common::UnWriteProtectMemory(g_dsp.iram, DSP_IRAM_BYTE_SIZE);
memcpy(dst, code, size);
for (size_t i = 0; i < size / 2; i++)
dst[i] = Common::swap16(dst[i]);

View File

@ -75,7 +75,7 @@ void DSPLLE::DoState(PointerWrap& p)
g_dsp.accelerator->DoState(p);
p.Do(g_dsp.mbox[0]);
p.Do(g_dsp.mbox[1]);
Common::UnWriteProtectMemory(g_dsp.iram, DSP_IRAM_BYTE_SIZE, false);
Common::UnWriteProtectMemory(g_dsp.iram, DSP_IRAM_BYTE_SIZE);
p.DoArray(g_dsp.iram, DSP_IRAM_SIZE);
Common::WriteProtectMemory(g_dsp.iram, DSP_IRAM_BYTE_SIZE, false);
if (p.GetMode() == PointerWrap::MODE_READ)

View File

@ -26,7 +26,7 @@ void WriteProtectMemory(void* ptr, size_t size, bool allowExecute)
{
}
void UnWriteProtectMemory(void* ptr, size_t size, bool allowExecute)
void UnWriteProtectMemory(void* ptr, size_t size)
{
}

View File

@ -38,7 +38,7 @@ public:
virtual bool HandleFault(uintptr_t access_address, SContext* ctx) override
{
m_pre_unprotect_time = std::chrono::high_resolution_clock::now();
Common::UnWriteProtectMemory(m_data, PAGE_GRAN, /*allowExecute*/ false);
Common::UnWriteProtectMemory(m_data, PAGE_GRAN);
m_post_unprotect_time = std::chrono::high_resolution_clock::now();
return true;
}