当我尝试如下使用LD_PRELOAD时,

LD_PRELOAD=getpid.so ./testpid

我收到以下错误...
ERROR: ld.so: object 'getpid.so' from LD_PRELOAD cannot be preloaded: ignored.

我通过使用编译getpid.so
gcc -Wall -fPIC -shared -o getpid.so getpid.c

它包含以下代码...
// getpid.c
#include <sys/syscall.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

pid_t getpid(void)
{
    printf("Hello, world!\n");
    return syscall(SYS_getpid);
}
tespid.c包含使用getpid的代码,如下所示,并且该代码通过以下方式进行编译:
gcc testpid -o testpid.c

这可能是什么问题?为什么LD_PRELOAD不起作用?
// testpid.c
#include <sys/syscall.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

int main()
{
    printf( "pid = %d!\n", getpid() );

    return 0;
}

最佳答案

似乎加载程序无法找到getpid.so,因为您没有提到库的路径。

尝试:

LD_PRELOAD=/full/path/to/getpid.so ./testpid

09-06 04:00