From 9be89e8ba26dcffc4ae2a6477459dd2c115d1a5b Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Wed, 14 Jul 2021 10:40:09 +0200 Subject: Try to make the 32bits mmap more resiliant --- src/wrapped/wrappedlibc.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src') diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c index 9049851a..54942c7f 100755 --- a/src/wrapped/wrappedlibc.c +++ b/src/wrapped/wrappedlibc.c @@ -2025,6 +2025,15 @@ EXPORT void* my_mmap64(x64emu_t* emu, void *addr, unsigned long length, int prot } #endif void* ret = mmap64(addr, length, prot, flags, fd, offset); + if((ret!=(void*)-1) && (flags&0x40) && ((uintptr_t)ret>0xffffffff)) { + printf_log(LOG_INFO, "Warning, mmap on 32bits didn't worked, ask %p, got %p ", addr, ret); + // the 32bit mmap didn't worded, lets try again + munmap(ret, length); + loadProtectionFromMap(); // reload map, because something went wrong previously + addr = findBlockNearHint(addr, length); // is this the best way? + ret = mmap64(addr, length, prot, flags, fd, offset); + printf_log(LOG_INFO, " tried again with %p, got %p\n", addr, ret); + } if(box64_log