diff options
author | Tavis Ormandy <taviso@gmail.com> | 2019-08-21 00:59:43 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-21 00:59:43 +0300 |
commit | c4e905f7296aefe08b581c3f8becc8e55fb64ca0 (patch) | |
tree | 87b5340ae9d17c1dfbb207f6fdced57182f00c48 | |
parent | e364b4c705973c6d0cda72306c9a1f5f07e17963 (diff) | |
parent | 2bd384c063060662f895af4da9712fedea011141 (diff) |
Merge pull request #62 from chrisnew/master
fix_pe_image: replaced code_malloc with mmap to preserve image base
-rw-r--r-- | peloader/pe_linker.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/peloader/pe_linker.c b/peloader/pe_linker.c index f5270ab..707b53c 100644 --- a/peloader/pe_linker.c +++ b/peloader/pe_linker.c @@ -454,13 +454,13 @@ static int fix_pe_image(struct pe_image *pe) } image_size = pe->opt_hdr->SizeOfImage; - image = code_malloc(image_size + getpagesize()); + 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())); - if (image == NULL) { - ERROR("failed to allocate enough space for new image: %d bytes, %m", image_size); + 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); @@ -482,7 +482,7 @@ static int fix_pe_image(struct pe_image *pe) if (sect_hdr->VirtualAddress+sect_hdr->SizeOfRawData > image_size) { ERROR("Invalid section %s in driver", sect_hdr->Name); - code_free(image); + munmap(image, image_size + getpagesize()); return -EINVAL; } |