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



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

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

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

希望得到您的帮助。

malloc不是Linux的一部分,而是libc的一部分。您可以提供自己的 libc 版本,其中包含不同的 malloc 实现。在这种情况下,您可以通过切换库搜索路径在不同的 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

相关内容

  • 没有找到相关文章

最新更新