pyt*_*nic 2 c linux gcc x86-64 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 $$',就没有这样的错误。知道这里发生了什么。