diff options
author | Tavis Ormandy <taviso@gmail.com> | 2019-08-21 02:12:43 +0300 |
---|---|---|
committer | Tavis Ormandy <taviso@gmail.com> | 2019-08-21 02:12:43 +0300 |
commit | f517d284f0d63f78fe9e79f06734cd6f36c0f95a (patch) | |
tree | 31510f9e9618ac4b11e5f24fb811230080ebf049 | |
parent | 165a9657cbee264bd3ae0de333054211d5639b84 (diff) |
I don't think we need MAP_SHARED
-rw-r--r-- | peloader/pe_linker.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/peloader/pe_linker.c b/peloader/pe_linker.c index 77567b6..f0e4737 100644 --- a/peloader/pe_linker.c +++ b/peloader/pe_linker.c @@ -455,15 +455,21 @@ static int fix_pe_image(struct pe_image *pe) } image_size = pe->opt_hdr->SizeOfImage; - image = mmap((void *)pe->opt_hdr->ImageBase, image_size + getpagesize(), PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANONYMOUS | MAP_FIXED | MAP_SHARED, -1, 0); - // Round to page size? - //image = (PVOID)(ROUND_UP((ULONG)(image), getpagesize())); + // TODO: If image does not have DYNAMIC_BASE, add MAP_FIXED. + + image = mmap((PVOID)(pe->opt_hdr->ImageBase), + image_size + getpagesize(), + PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_ANONYMOUS | MAP_PRIVATE, + -1, + 0); if (image == MAP_FAILED) { ERROR("failed to mmap desired space for image: %d bytes, image base %p, %m", image_size, pe->opt_hdr->ImageBase); return -ENOMEM; } + memset(image, 0, image_size); /* Copy all the headers, ie everything before the first section. */ |