Cygwin: Don't dump non-writable image regions

After this, we will end up dumping memory regions where:

- state is MEM_COMMIT (i.e. is not MEM_RESERVE or MEM_FREE), and
-- type is MEM_PRIVATE and protection allows reads (i.e. not a guardpage), or
-- type is MEM_IMAGE and protection allows writes

Making this decision based on the current protection isn't 100% correct,
because it may have been changed using VirtualProtect().  But we don't
know how to determine if a region is shareable.

(As a practical matter, anything which gets us the stack (MEM_PRIVATE)
and .data/.bss (RW MEM_IMAGE) is going to be enough for 99% of cases)
This commit is contained in:
Jon Turney 2020-07-05 14:42:59 +01:00
parent 44103c0621
commit 35227fec97
No known key found for this signature in database
GPG Key ID: C7C86F0370285C81
1 changed files with 6 additions and 0 deletions

View File

@ -292,6 +292,12 @@ dumper::collect_memory_sections ()
int skip_region_p = 0;
const char *disposition = "dumped";
if ((mbi.Type & MEM_IMAGE) && !(mbi.Protect & (PAGE_EXECUTE_READWRITE | PAGE_READWRITE)))
{
skip_region_p = 1;
disposition = "skipped due to non-writeable MEM_IMAGE";
}
if (mbi.Protect & PAGE_NOACCESS)
{
skip_region_p = 1;