summaryrefslogtreecommitdiff
path: root/src/wrapper/wrapper.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/wrapper/wrapper.c')
-rw-r--r--src/wrapper/wrapper.c7
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, &copy, 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