如何将自定义的malloc添加到Linux

时间:2017-01-03 08:14:59

标签: c++ linux operating-system malloc

我想添加一个自定义的malloc函数(例如' self_malloc()')和一个选择函数(例如' selec_malloc()')到Linux操作系统。

每当进程需要调用malloc进行内存分配时,操作系统将调用selec_malloc()来决定调用原始malloc或者self_malloc()

也就是说,我想在调用malloc之前添加选择函数 。那么有什么方法可以实现这一点以及我需要做什么?

希望得到你的帮助。

1 个答案:

答案 0 :(得分:1)

malloc不是Linux的一部分,但是它是libc的一部分。您可以使用不同的malloc实现提供自己的libc版本。在这种情况下,您可以通过切换库搜索路径在不同的malloc版本之间切换。

另一种选择是使用LD_PRELOAD。这在启动程序时预加载共享库。通过这种方式,您可以使用预加载库中的版本从共享库中重载函数。您甚至可以使用dlsym和RTLD_NEXT在代码中调用原始版本,如下所示:

typedef void *(*malloc_ptr)(size_t size);

void *malloc(size_t size) {
     malloc_ptr _malloc;
     _malloc=(malloc_ptr)dlsym(RTLD_NEXT,"malloc"); // look up original malloc()
     return malloc_(size);                          // and invoke it
}

选择使用哪个malloc版本取决于LD_PRELOAD的存在。如果已设置,将使用预加载的malloc,如果未设置,将使用标准版本。

调用程序如下所示:

LD_PRELOAD=libmymalloc.so ./a.out