LD_PRELOAD无法使用我的程序

时间:2012-05-22 13:49:03

标签: c linux gcc x86-64 ld-preload

为了测试LD_PRELOAD,我编写了自己的getpid,它在使用dlsym调用原始getpid之前打印了一些东西。代码如下。

#define _GNU_SOURCE

#include <unistd.h>
#include <stdio.h>
#include <dlfcn.h>

typedef pid_t (*getpidType)(void);

pid_t getpid(void)
{
    printf("Hello, getpid!\n");
    getpidType f = (getpidType)dlsym(RTLD_NEXT, "getpid");
    return f();
}

但是当我在我的程序中使用这样的getpid并使用LD_PRELOAD运行它时,通过键入LD_PRELOAD=./prelib.so ./prog,我得到以下错误。

./prog: symbol lookup error: ./prelib.so: undefined symbol: dlsym

但如果我LD_PRELOAD=./prelib.so bash -c 'echo $$',则没有这样的错误。不知道这里发生了什么。

1 个答案:

答案 0 :(得分:4)

使用makefile中的libdl.so.2将其与-ldl相关联解决了问题。