一、preload 失效原因
1. RTLD_DEEPBIND 的使用
来自于:http://linux.die.net/man/3/dlopen
RTLD_DEEPBIND(自 glibc 2.3.4 起)将此库中符号的查找范围置于全局范围之前。这意味着自包含库将优先使用其自己的符号,而不是已加载库中包含的具有相同名称的全局符号。该标志未在 POSIX.1-2001 中指定。
可以使用 LD_DEBUG=all
查看链接的过程
2. 通过静态链接的方式
使用 gcc -static
参数可以把 libc.so
静态链接进执行程序中。但这也就意味着程序不再支持动态链接。
3. 设置执行文件的 setgid/setuid 权限
在有 SUID 权限的执行文件,系统会忽略 LD_PRELOAD 环境变量