Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/taviso/loadlibrary.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTavis Ormandy <taviso@gmail.com>2019-08-21 00:59:43 +0300
committerGitHub <noreply@github.com>2019-08-21 00:59:43 +0300
commitc4e905f7296aefe08b581c3f8becc8e55fb64ca0 (patch)
tree87b5340ae9d17c1dfbb207f6fdced57182f00c48
parente364b4c705973c6d0cda72306c9a1f5f07e17963 (diff)
parent2bd384c063060662f895af4da9712fedea011141 (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.c8
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;
}