1.LD_LIBRARY_PATH环境变量
LD_LIBRARY_PATH 是Unix 和 Linux 系统中的一个环境变量,完整含义是 "Loader Library Path" 或者说是 "Dynamic Linker Library Path",它提供了一个机制,允许用户指定除了系统默认搜索路径之外的其他目录,作为动态链接器搜索共享库的附加位置。
如果遇到“cannot open shared object file: No such file or directory”类型的错误,说明动态库文件找不到,首先确定动态库文件是否存在,然后确定是否在LD_LIBRARY_PATH变量指定的目录中。
2.Python读取动态库文件
有些Python程序在执行时需要加载动态库文件,可通过以下代码来检查是否能正常加载动态库文件。
python
from ctypes import *
libc = cdll.LoadLibrary("libc.so.6")
print(libc.time(None))
以上是加载libc.so.6库文件的案例。
3.ldd命令
ldd命令可以查看一个二进制文件或动态链接库的依赖关系。
4.查看libc这个库正在被哪些进程链接
可通过以下脚本来检测
#!/bin/bash
# 获取系统上所有正在运行的进程的PID
pids=$(ps -e -o pid=)
# 循环遍历每个PID
for pid in $pids; do
# 使用/proc/<PID>/maps获取PID对应进程的内存映射
maps_file="/proc/$pid/maps"
# 检查maps文件是否存在
if [ -f "$maps_file" ]; then
# 使用grep查找是否链接了libc库,可替换对应的库文件名
grep -q "libc\.so\.6" "$maps_file"
# 检查上一步的返回状态, 如果返回状态为0,说明该进程链接了libc库
if [ $? -eq 0 ]; then
# 获取进程的可执行文件路径
exe_path=$(readlink -f "/proc/$pid/exe")
echo "Process PID: $pid"
echo "Executable Path: $exe_path"
echo "--------------------------------------------------"
fi
fi
done
注意使用root用户执行,因为/proc/目录需要root用户访问。