在指定目录下查找所有依赖于指定库的可执行文件

Find all executable files that depend on the specified library in the specified directory

我的目标是编写一个 shell 脚本,使用“objdump -p”命令在指定目录中查找依赖于指定库的所有可执行文件。 (OpenBSD)。 我尝试这样的事情:

find  -perm -111 -print0 | xargs -r0 objdump -p | grep -l "NEEDED      "

但此解决方案不起作用,因为 grep 无法找出它在其中找到给定匹配项的文件名。难点在于确定 grep 在其中找到指定库的可执行文件的名称。 任何人都可以使用“objdump -p”命令提出解决方案吗?

诀窍是执行 shell 脚本而不是单个命令,以便能够重新使用文件名。

finddepend() {
# Arg 1: The directory where to find
# Arg 2: The library name
  basedir=
  libname=
  find "$basedir" \
    \( -perm -100 -o -perm -010 -o -perm -001 \) \
    \( -type f -o -type l \) \
    -exec sh -c '
# Arg 0: Is a dummy _ for this inline script
# Arg 1: The executable file path
# Arg 2: The library name
filepath=
libname=
objdump -p "$filepath" 2>/dev/null |
  if grep -qF "  NEEDED               $libname"; then
    printf %s\n "${filepath##*/}"
  fi
' _ {} "$libname" \;
}

用法示例:

finddepend /bin libselinux.so
mv
systemctl
tar
sed
udevadm
ls
mknod
systemd
mkdir
ss
dir
vdir
cp
systemd-hwdb
netstat

既然可以使用 ldd(列出动态依赖项),为什么要使用 objdumpobjdump 给出了一个完整的摘要,您需要对其进行处理才能获得您正在寻找的信息,而 ldd 只为您提供该信息。