diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2022-07-01 09:23:46 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-07-01 09:23:46 +0200 |
| commit | b3919fe8197bb2882ba2cda0d8487a8d82ce5cf3 (patch) | |
| tree | bcb2a66e73c7e0fed52e941179bc8a2059996881 | |
| parent | 9328ba79d19c07faa2634ea9bc06e0d400c58edd (diff) | |
| parent | 9eeaaf0a03b494f0e44ae3c2c2d4a605e4a49638 (diff) | |
| download | box64-b3919fe8197bb2882ba2cda0d8487a8d82ce5cf3.tar.gz box64-b3919fe8197bb2882ba2cda0d8487a8d82ce5cf3.zip | |
Merge pull request #336 from wannacu/main
Align address when call mprotect
| -rwxr-xr-x | src/elfs/elfloader.c | 5 |
1 files changed, 3 insertions, 2 deletions
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) { |