在C语言中,如何调用我的函数而不是系统库函数

奥斯丁

平台-Linux

我有一个典型的要求,即我需要比系统提供的功能赋予更高的优先级。

可以说我有第三方库或可执行文件。它调用了许多系统函数,例如strcpy或strlen等。由于无法访问代码,因此无法修改可执行文件/库。

现在,我已经实现了自己的strlen或strcpy函数。当第三方库或可执行文件正在执行时,应调用我的函数而不是系统库函数。

可能吗。如果是,有人可以指导我如何执行此操作。

LD_PRELOAD试用结果

根据这里的建议,我尝试使用LD_PRELOAD。我试图覆盖malloc函数。

    #include <string.h>

    void *malloc(int size)
    {
        void *ptr = NULL;
        printf("Inside my malloc function\n");
        ptr = malloc(size);
        return ptr;
    }

我将上面的代码放在ac文件中,并构建了mem.so文件,并在命令下方执行。

导出LD_PRELOAD =。/ mem.so

所以现在我已经覆盖了malloc函数。

如果执行lsclear命令,我将得到以下结果,这是合乎逻辑的。

Inside my malloc function
Inside my malloc function
Inside my malloc function
Inside my malloc function
Inside my malloc function

看来我的重载malloc函数是递归调用的。我只需要打一次电话。我该如何实现。

这里

您的malloc需要调用真正的malloc。使用dlsym(3)查找符号。RTLD_NEXT查找下一个这样的引用。

#include <stdio.h>
#include <dlfcn.h>
void *malloc(size_t size)
{
  static void * (*func)();

  if(!func)
     func = (void *(*)()) dlsym(RTLD_NEXT, "malloc");
  printf("malloc(%d) is called\n", size);
  return(func(size));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章