【发布时间】:2016-11-20 21:18:39
【问题描述】:
在 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
据我所知,这是某种权限问题。但是我对我能想到的一切都进行了chown'ed和chmod'ed。 我错过了什么?
这应该让您知道可能出了什么问题。
编辑: 该问题似乎特定于某些目录和 tcpdump 本身。 LD_PRELOAD`ing on /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 运行
【问题讨论】:
-
是错字吗?
/usr/local/libpcap.so.1.8.0与/usr/local/lib/libpcap.so.1.8.0?注意/lib/部分? -
是的,但是帖子中有错字。修复它
标签: linux ld-preload