From 9eeaaf0a03b494f0e44ae3c2c2d4a605e4a49638 Mon Sep 17 00:00:00 2001 From: wannacu Date: Fri, 1 Jul 2022 15:18:05 +0800 Subject: Align address when call mprotect --- src/elfs/elfloader.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c index 8b46ad3c..07328726 100755 --- a/src/elfs/elfloader.c +++ b/src/elfs/elfloader.c @@ -354,8 +354,9 @@ int ReloadElfMemory(FILE* f, box64context_t* context, elfheader_t* head) #ifdef DYNAREC cleanDBFromAddressRange((uintptr_t)dest, e->p_memsz, 0); #endif - mprotect(dest, e->p_memsz, PROT_READ | PROT_WRITE | PROT_EXEC); - setProtection((uintptr_t)dest, e->p_memsz, PROT_READ | PROT_WRITE | PROT_EXEC); + uint32_t page_offset = (uintptr_t)dest & (box64_pagesize - 1); + mprotect(dest - page_offset, e->p_memsz + page_offset, PROT_READ | PROT_WRITE | PROT_EXEC); + setProtection((uintptr_t)dest - page_offset, e->p_memsz + page_offset, PROT_READ | PROT_WRITE | PROT_EXEC); if(e->p_filesz) { ssize_t r = -1; if((r=fread(dest, e->p_filesz, 1, f))!=1) { -- cgit 1.4.1