相关疑难解决方法(0)

为LD_PRELOAD设置我的lib会使某些进程产生加载器错误

当我尝试运行脚本时,我收到以下错误:我只有执行权限:

uname: symbol lookup error: /home/dumindara/random/sotest/a.out: undefined symbol: dlsym

这是在我将LD_PRELOAD环境变量设置为之后/home/dumindara/random/sotest/a.out.

a.out有一个测试malloc功能,并在dlsym内部调用.

跑步时我没有遇到这个问题ls.大多数进程都会出现此错误.为什么会发生这种情况,我该怎么做才能使它发挥作用?

c c++ linux linker dlsym

12
推荐指数
2
解决办法
8331
查看次数

LD_PRELOAD 不适用于我的程序

为了测试 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();
}
Run Code Online (Sandbox Code Playgroud)

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

./prog: symbol lookup error: ./prelib.so: undefined symbol: dlsym
Run Code Online (Sandbox Code Playgroud)

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

c linux gcc x86-64 ld-preload

2
推荐指数
1
解决办法
2349
查看次数

标签 统计

c ×2

linux ×2

c++ ×1

dlsym ×1

gcc ×1

ld-preload ×1

linker ×1

x86-64 ×1