LD_PRELOAD不符合我的计划工作(LD_PRELOAD not working with my

2019-09-17 10:07发布

为了测试LD_PRELOAD,我写我自己getpid ,它调用原来之前打印的东西getpid使用dlsym。 代码如下所示。

#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 $$' ,有没有这样的错误。 任何想法是怎么回事。

Answer 1:

与链接它libdl.so.2使用-ldl在makefile解决了这个问题。



文章来源: LD_PRELOAD not working with my program