LD_PRELOAD在特定文件夹上失败

时间:2016-11-20 21:18:39

标签: linux ld-preload

在Ubuntu 16.04系统上,一直尝试使用ld_preload和自定义编译的libpcap.so并运行tcpdump。

编译libpcap(1.8.0)

./configure --prefix=`pwd`/inst
make install

然后在使用此命令时,tcpdump使用自定义libpcap

LD_PRELOAD=/home/user/tcpdump/inst/libpcap.so.1.8.0 /usr/sbin/tcpdump --version

输出是:

tcpdump version 4.7.4
libpcap version 1.8.0
OpenSSL 1.0.2g  1 Mar 2016

然后,当我将libpcap移动到另一个文件夹时,例如/ usr / local / lib 它已不再适用了。

我收到以下错误:

ERROR: ld.so: object '/usr/local/lib/libpcap.so.1.8.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored

据我所知,它存在某种权限问题。但是我已经知道了,我想到了我能想到的一切。 我错过了什么?

这应该让你知道可能出现的问题。

编辑: 问题似乎特定于某些目录和tcpdump本身。 当LD_PRELOAD在/ bin / true

上时输出strace
LD_PRELOAD=/usr/local/lib/libpcap.so.1.8.0 strace -fF  /bin/true 2>&1 | grep libp
open("/usr/local/lib/libpcap.so.1.8.0", O_RDONLY|O_CLOEXEC) = 3

这是tcpdump

上的strace输出
LD_PRELOAD=/usr/local/lib/libpcap.so.1.8.0 strace -fF  /usr/sbin/tcpdump 2>&1 | grep libp
open("/usr/local/lib/libpcap.so.1.8.0", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)
writev(2, [{"ERROR: ld.so: object '", 22}, {"/usr/local/lib/libpcap.so.1.8.0", 31}, {"' from ", 7}, {"LD_PRELOAD", 10}, {" cannot be preloaded (", 22}, {"cannot open shared object file", 30}, {"): ignored.\n", 12}], 7ERROR: ld.so: object '/usr/local/lib/libpcap.so.1.8.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
open("/usr/lib/x86_64-linux-gnu/libpcap.so.0.8", O_RDONLY|O_CLOEXEC) = 3

这两个命令都以sudo

运行

1 个答案:

答案 0 :(得分:0)

查找文件(perms或不正确的路径)似乎有问题。我看到你提到你已经将文件移动到/ usr / local / lib但我看到错误消息为/usr/local/libpcap.so.1.8.0。也许是一个错字?

如果没有,请运行

LD_PRELOAD=/usr/local/lib/libpcap.so.1.8.0 strace -fF -e open /bin/true 2>&1 | grep libp

要确认的另一件事是/ usr / local / lib是链接器的标准路径(如果您不想使用LD_PRELOAD):

ldconfig -v 2>/dev/null | grep -v ^$'\t'