我试图在CentOS上提供内存包装并使用clang编译器/链接器.我为分配函数(malloc等)编写了包装器,并使用-Wl,-wrap,malloc重新路由调用.
这一切都很好,我可以看到它在行动.
void* mem = malloc(10); // routes to __wrap_malloc
free(mem);// routes to __wrap_free
但是,我看到的问题是,在libc中分配的任何内存都没有被路由到我的包装器,但是应用程序正在进行被拦截的免费调用(并因此崩溃).例如,
char* newStr = strdup("foo"); // The internal malloc in libcdoes not come to wrapper
free(newStr); // The free call makes it to the wrapper
我的程序是用C++编写的.我创建了一个mallocimpl.cpp并做了类似的事情
extern "C"{
void* __wrap_malloc(size_t size)
{
// Route memory via custom memory allocator
}
//Similarly, __wrap_calloc, __wrap_realloc, __wrap_memalign and __wrap_free
我有什么想法我做错了吗?我需要任何特殊的编译器/链接器标志吗?
提前致谢.