Merge pull request #77 from rafaelrfreitas/fix-write-only-membps

fix: ensure write-only breakpoints trigger on Copy-on-Write pages
This commit is contained in:
Duncan Ogilvie 2026-03-28 20:55:02 +01:00 committed by GitHub
commit 118945fbef
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 7 additions and 3 deletions

View File

@ -183,12 +183,12 @@ namespace GleeBug
#define PAGE_NOACCESS 0x01
#define PAGE_READONLY 0x02
#define PAGE_READWRITE 0x04
#define PAGE_WRITECOPY 0x08 <- not supported
#define PAGE_WRITECOPY 0x08
#define PAGE_EXECUTE 0x10
#define PAGE_EXECUTE_READ 0x20
#define PAGE_EXECUTE_READWRITE 0x40
#define PAGE_EXECUTE_WRITECOPY 0x80 <- not supported
#define PAGE_EXECUTE_WRITECOPY 0x80
#define PAGE_GUARD 0x100 <- not supported with PAGE_NOACCESS
#define PAGE_NOCACHE 0x200 <- not supported with PAGE_GUARD or PAGE_WRITECOMBINE
@ -215,12 +215,16 @@ namespace GleeBug
static DWORD RemoveWriteAccess(DWORD dwAccess)
{
//Removes write permissions and write-on-copy to trigger access violation.
DWORD dwBase = dwAccess & 0xFF;
switch(dwBase)
{
case PAGE_READWRITE:
case PAGE_WRITECOPY:
return (dwAccess & 0xFFFFFF00) | PAGE_READONLY;
case PAGE_EXECUTE_READWRITE:
return (dwAccess & 0xFFFFFF00) | (dwBase >> 1);
case PAGE_EXECUTE_WRITECOPY:
return (dwAccess & 0xFFFFFF00) | PAGE_EXECUTE_READ;
default:
return dwAccess;
}