I have a shared library - plugin.so
, which is dlopen
-ed by the host program with flag RTLD_LOCAL
, I have my own memory operation functions defined in that library:
void *plugin_malloc(size_t size) { /* ... */ }
void plugin_free(void *ptr) { /* ... */ }
What I need is to replace ALL malloc/free
calls in plugin.so
with my own plugin_malloc/plugin_free
, I tried using GCC's alias attribute extension:
void *malloc(size_t) __attribute__((alias("plugin_malloc"), used))
void free(void*) __attribute__((alias("plugin_free"), used))
However, this only works when the library is linked into the host program, but not work with the dlopen
way.
I'm on Linux with compiler GCC-4.8.5, and I have the source code of plugin.so
and can modify it as I like, but I cannot modify the host program, and replace malloc/free
not only in plugin.so
but also in entire program is also acceptable.
So, is there any solution? Thanks.
EDIT: I also have no permission to modify the host program's startup arguments, environment variables, what I can do is just providing the plugin.so
to guys who own the host program, and they run the host program and dlopen
my plugin.so
.