diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/custommem.c | 3 | ||||
| -rw-r--r-- | src/mallochook.c | 32 | ||||
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 5 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedtcmallocminimaltypes.h | 7 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.c | 4 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.h | 2 | ||||
| -rw-r--r-- | src/wrapped/wrappedlibc.c | 4 | ||||
| -rw-r--r-- | src/wrapped/wrappedtcmallocminimal_private.h | 4 |
8 files changed, 27 insertions, 34 deletions
diff --git a/src/custommem.c b/src/custommem.c index 1a729fe9..7e73a23d 100644 --- a/src/custommem.c +++ b/src/custommem.c @@ -1300,6 +1300,9 @@ void setProtection(uintptr_t addr, size_t size, uint32_t prot) void setProtection_mmap(uintptr_t addr, size_t size, uint32_t prot) { + if(!size) + return; + size = (size+box64_pagesize-1)&~(box64_pagesize-1); // round size mutex_lock(&mutex_prot); addMapMem(mmapmem, addr, addr+size-1); mutex_unlock(&mutex_prot); diff --git a/src/mallochook.c b/src/mallochook.c index b4f91a60..52a09c74 100644 --- a/src/mallochook.c +++ b/src/mallochook.c @@ -193,11 +193,11 @@ EXPORT void* malloc(size_t l) EXPORT void free(void* p) { - if(malloc_hack_2 && FREE && p) { + if(malloc_hack_2 && p) { if(getMmapped((uintptr_t)p)) { printf_log(LOG_DEBUG, "%04d|Malloc_Hack_2: not freeing %p\n", GetTID(), p); // Mmaped, free with original function - if(real_free) + if(real_free && FREE) RunFunctionFmt(real_free, "p", p); return; } @@ -218,7 +218,7 @@ EXPORT void* realloc(void* p, size_t s) if(malloc_hack_2) if(getMmapped((uintptr_t)p) || (!p && ALLOC && real_realloc)) { void* ret = p; - if(real_realloc) { + if(real_realloc && ALLOC) { ret = (void*)RunFunctionFmt(real_realloc, "pL", p, s); } else { // found! Will realloc using regular malloc then copy from old address as much as possible, but need to check size first @@ -228,7 +228,7 @@ EXPORT void* realloc(void* p, size_t s) memcpy(ret, p, s); printf_log(LOG_DEBUG, " -> %p (copied %zu from old)\n", ret, s); // Mmaped, free with original function - if(real_free) + if(real_free && FREE) RunFunctionFmt(real_free, "p", p); } return ret; @@ -284,11 +284,11 @@ EXPORT void* pvalloc(size_t size) EXPORT void cfree(void* p) { - if(malloc_hack_2 && FREE && p) { + if(malloc_hack_2 && p) { if(getMmapped((uintptr_t)p)) { printf_log(LOG_DEBUG, "%04d|Malloc_Hack_2: not freeing %p\n", GetTID(), p); // Mmaped, free with original function - if(real_free) + if(real_free && FREE) RunFunctionFmt(real_free, "p", p); return; } @@ -461,8 +461,8 @@ EXPORT void my__ZdaPvSt11align_val_tRKSt9nothrow_t(void* p, size_t align, void* if(getMmapped((uintptr_t)p)) { printf_log(LOG_DEBUG, "%04d|Malloc_Hack_2: not freeing %p\n", GetTID(), p); // Mmaped, free with original function - if(real_free) - RunFunctionFmt(real_free, "p", p); + if(real__ZdaPvSt11align_val_tRKSt9nothrow_t) + RunFunctionFmt(real__ZdaPvSt11align_val_tRKSt9nothrow_t, "p", p); return; } } @@ -475,8 +475,8 @@ EXPORT void my__ZdlPvmSt11align_val_t(void* p, size_t sz, size_t align) //oper if(getMmapped((uintptr_t)p)) { printf_log(LOG_DEBUG, "%04d|Malloc_Hack_2: not freeing %p\n", GetTID(), p); // Mmaped, free with original function - if(real_free) - RunFunctionFmt(real_free, "p", p); + if(real__ZdlPvmSt11align_val_t) + RunFunctionFmt(real__ZdlPvmSt11align_val_t, "p", p); return; } } @@ -489,8 +489,8 @@ EXPORT void my__ZdaPvRKSt9nothrow_t(void* p, void* n) //operator delete[](void if(getMmapped((uintptr_t)p)) { printf_log(LOG_DEBUG, "%04d|Malloc_Hack_2: not freeing %p\n", GetTID(), p); // Mmaped, free with original function - if(real_free) - RunFunctionFmt(real_free, "p", p); + if(real__ZdaPvRKSt9nothrow_t) + RunFunctionFmt(real__ZdaPvRKSt9nothrow_t, "p", p); return; } } @@ -503,8 +503,8 @@ EXPORT void my__ZdaPvSt11align_val_t(void* p, size_t align) //operator delete[ if(getMmapped((uintptr_t)p)) { printf_log(LOG_DEBUG, "%04d|Malloc_Hack_2: not freeing %p\n", GetTID(), p); // Mmaped, free with original function - if(real_free) - RunFunctionFmt(real_free, "p", p); + if(real__ZdaPvSt11align_val_t) + RunFunctionFmt(real__ZdaPvSt11align_val_t, "p", p); return; } } @@ -517,8 +517,8 @@ EXPORT void my__ZdlPvSt11align_val_t(void* p, size_t align) //operator delete( if(getMmapped((uintptr_t)p)) { printf_log(LOG_DEBUG, "%04d|Malloc_Hack_2: not freeing %p\n", GetTID(), p); // Mmaped, free with original function - if(real_free) - RunFunctionFmt(real_free, "p", p); + if(real__ZdlPvSt11align_val_t) + RunFunctionFmt(real__ZdlPvSt11align_val_t, "p", p); return; } } diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt index 3d56e9ae..94528335 100644 --- a/src/wrapped/generated/functions_list.txt +++ b/src/wrapped/generated/functions_list.txt @@ -2343,8 +2343,6 @@ #() LFpLLuupp #() LFpLLppuu #() pFEpupppp -#() pFEpLiiii -#() pFEpLiiiI #() pFEpLiiil #() pFEppuipp #() pFEppppip @@ -5358,9 +5356,8 @@ wrappedtcmallocminimal: - mallinfo - iFpL: - munmap -- pFpLiiii: +- pFpLiiil: - mmap -- pFpLiiiI: - mmap64 wrappedudev0: - vFpp: diff --git a/src/wrapped/generated/wrappedtcmallocminimaltypes.h b/src/wrapped/generated/wrappedtcmallocminimaltypes.h index 88049970..282096ac 100644 --- a/src/wrapped/generated/wrappedtcmallocminimaltypes.h +++ b/src/wrapped/generated/wrappedtcmallocminimaltypes.h @@ -13,13 +13,12 @@ typedef void* (*pFp_t)(void*); typedef int32_t (*iFpL_t)(void*, uintptr_t); -typedef void* (*pFpLiiii_t)(void*, uintptr_t, int32_t, int32_t, int32_t, int32_t); -typedef void* (*pFpLiiiI_t)(void*, uintptr_t, int32_t, int32_t, int32_t, int64_t); +typedef void* (*pFpLiiil_t)(void*, uintptr_t, int32_t, int32_t, int32_t, intptr_t); #define SUPER() ADDED_FUNCTIONS() \ GO(mallinfo, pFp_t) \ GO(munmap, iFpL_t) \ - GO(mmap, pFpLiiii_t) \ - GO(mmap64, pFpLiiiI_t) + GO(mmap, pFpLiiil_t) \ + GO(mmap64, pFpLiiil_t) #endif // __wrappedtcmallocminimalTYPES_H_ diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c index 8145d821..cfbc714b 100644 --- a/src/wrapped/generated/wrapper.c +++ b/src/wrapped/generated/wrapper.c @@ -2379,8 +2379,6 @@ typedef uintptr_t (*LFEpppppu_t)(x64emu_t*, void*, void*, void*, void*, void*, u typedef uintptr_t (*LFpLLuupp_t)(void*, uintptr_t, uintptr_t, uint32_t, uint32_t, void*, void*); typedef uintptr_t (*LFpLLppuu_t)(void*, uintptr_t, uintptr_t, void*, void*, uint32_t, uint32_t); typedef void* (*pFEpupppp_t)(x64emu_t*, void*, uint32_t, void*, void*, void*, void*); -typedef void* (*pFEpLiiii_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, int32_t, int32_t); -typedef void* (*pFEpLiiiI_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, int32_t, int64_t); typedef void* (*pFEpLiiil_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, int32_t, intptr_t); typedef void* (*pFEppuipp_t)(x64emu_t*, void*, void*, uint32_t, int32_t, void*, void*); typedef void* (*pFEppppip_t)(x64emu_t*, void*, void*, void*, void*, int32_t, void*); @@ -5360,8 +5358,6 @@ void LFEpppppu(x64emu_t *emu, uintptr_t fcn) { LFEpppppu_t fn = (LFEpppppu_t)fcn void LFpLLuupp(x64emu_t *emu, uintptr_t fcn) { LFpLLuupp_t fn = (LFpLLuupp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void LFpLLppuu(x64emu_t *emu, uintptr_t fcn) { LFpLLppuu_t fn = (LFpLLppuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } void pFEpupppp(x64emu_t *emu, uintptr_t fcn) { pFEpupppp_t fn = (pFEpupppp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void pFEpLiiii(x64emu_t *emu, uintptr_t fcn) { pFEpLiiii_t fn = (pFEpLiiii_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } -void pFEpLiiiI(x64emu_t *emu, uintptr_t fcn) { pFEpLiiiI_t fn = (pFEpLiiiI_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int64_t)R_R9); } void pFEpLiiil(x64emu_t *emu, uintptr_t fcn) { pFEpLiiil_t fn = (pFEpLiiil_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (intptr_t)R_R9); } void pFEppuipp(x64emu_t *emu, uintptr_t fcn) { pFEppuipp_t fn = (pFEppuipp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } void pFEppppip(x64emu_t *emu, uintptr_t fcn) { pFEppppip_t fn = (pFEppppip_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h index c3c9897b..d79e5903 100644 --- a/src/wrapped/generated/wrapper.h +++ b/src/wrapped/generated/wrapper.h @@ -2380,8 +2380,6 @@ void LFEpppppu(x64emu_t *emu, uintptr_t fnc); void LFpLLuupp(x64emu_t *emu, uintptr_t fnc); void LFpLLppuu(x64emu_t *emu, uintptr_t fnc); void pFEpupppp(x64emu_t *emu, uintptr_t fnc); -void pFEpLiiii(x64emu_t *emu, uintptr_t fnc); -void pFEpLiiiI(x64emu_t *emu, uintptr_t fnc); void pFEpLiiil(x64emu_t *emu, uintptr_t fnc); void pFEppuipp(x64emu_t *emu, uintptr_t fnc); void pFEppppip(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c index 6a76eab1..b0e7dbd8 100644 --- a/src/wrapped/wrappedlibc.c +++ b/src/wrapped/wrappedlibc.c @@ -2557,7 +2557,7 @@ EXPORT int my_readlinkat(x64emu_t* emu, int fd, void* path, void* buf, size_t bu #ifndef MAP_32BIT #define MAP_32BIT 0x40 #endif -EXPORT void* my_mmap64(x64emu_t* emu, void *addr, unsigned long length, int prot, int flags, int fd, int64_t offset) +EXPORT void* my_mmap64(x64emu_t* emu, void *addr, unsigned long length, int prot, int flags, int fd, ssize_t offset) { (void)emu; if(prot&PROT_WRITE) @@ -2627,7 +2627,7 @@ EXPORT void* my_mmap64(x64emu_t* emu, void *addr, unsigned long length, int prot } return ret; } -EXPORT void* my_mmap(x64emu_t* emu, void *addr, unsigned long length, int prot, int flags, int fd, int64_t offset) __attribute__((alias("my_mmap64"))); +EXPORT void* my_mmap(x64emu_t* emu, void *addr, unsigned long length, int prot, int flags, int fd, ssize_t offset) __attribute__((alias("my_mmap64"))); EXPORT void* my_mremap(x64emu_t* emu, void* old_addr, size_t old_size, size_t new_size, int flags, void* new_addr) { diff --git a/src/wrapped/wrappedtcmallocminimal_private.h b/src/wrapped/wrappedtcmallocminimal_private.h index b1f6b1e8..ce2b019d 100644 --- a/src/wrapped/wrappedtcmallocminimal_private.h +++ b/src/wrapped/wrappedtcmallocminimal_private.h @@ -69,8 +69,8 @@ GO(malloc_stats, vFv) GO(malloc_usable_size, LFp) GO(mallopt, iFii) GO(memalign, pFuu) -GOM(mmap, pFEpLiiii) // use the my_mmap from wrappedlibc.c -GOM(mmap64, pFEpLiiiI) +GOM(mmap, pFEpLiiil) // use the my_mmap from wrappedlibc.c +GOM(mmap64, pFEpLiiil) GO(mremap, pFpuuip) GOM(munmap, iFEpL) GO(nallocx, LFLi) |