繁体   English   中英

LD_PRELOAD无法与我的程序配合使用

[英]LD_PRELOAD not working with my program

为了测试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 $$' ,则不会出现此类错误。 不知道这是怎么回事。

通过在makefile中使用-ldl将其与libdl.so.2链接可以解决该问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM