小编mas*_*rs3的帖子

为什么libc中的内存分配不会路由到我的分配包装器?

我试图在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

我有什么想法我做错了吗?我需要任何特殊的编译器/链接器标志吗?

提前致谢.

c malloc glibc clang

6
推荐指数
1
解决办法
337
查看次数

标签 统计

c ×1

clang ×1

glibc ×1

malloc ×1