diff options
Diffstat (limited to 'src/wrapper')
-rw-r--r-- | src/wrapper/wrapper.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/wrapper/wrapper.c b/src/wrapper/wrapper.c index b3249b6..9b2ed96 100644 --- a/src/wrapper/wrapper.c +++ b/src/wrapper/wrapper.c @@ -103,13 +103,18 @@ wrapper_create(const char *const symbol, void *function) return NULL; } + const size_t len = strlen(symbol) + 1; + char *copy = malloc(len); + assert(copy && "welp, malloc failed"); + memcpy(copy, symbol, len); + #ifdef WRAPPER_TRACE const size_t sz = &wrapper_end - &wrapper_start; unsigned char *fun = mmap(NULL, sz, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); assert(fun != MAP_FAILED); memcpy(fun, &wrapper_start, sz); #ifdef ANDROID_X86_LINKER - memcpy(fun + (&wrapper_symbol - &wrapper_start) + 1, &symbol, sizeof(symbol)); + memcpy(fun + (&wrapper_symbol - &wrapper_start) + 1, ©, sizeof(symbol)); memcpy(fun + (&wrapper_trace - &wrapper_start) + 1, (uintptr_t[]){ (uintptr_t)trace }, sizeof(uintptr_t)); memcpy(fun + (&wrapper_call - &wrapper_start) + 1, &function, sizeof(function)); #else |