我最终找到了问题第二部分的答案,似乎是“不”。我的 /lib 目录中只有不到 5500 个 .so 文件,我运行了以下 shell 脚本,称为sotest.sh
:
#!/bin/bash
for i in $( ls /lib ); do
objdump -d -j .plt /lib/$i &> /tmp/tmpfile.txt;
a=`grep "File format not recognized" /tmp/tmpfile.txt`
b=`grep "not an ordinary file" /tmp/tmpfile.txt`
c=`grep "not found in any input file" /tmp/tmpfile.txt`
if [ -n "$a" ]; then
echo "Invalid";
elif [ -n "$b" ]; then
echo "Invalid";
elif [ -n "$c" ]; then
echo "$i HAS NO PLT SECTION";
else
echo "$i has plt section";
fi
rm /tmp/tmpfile.txt;
done
echo "Done"
然后我跑了./sotest.sh | grep "HAS NO PLT SECTION"
。我确实有一些结果,但都是 .a 文件,没有一个是 .so 文件。
因此,在实践中,您似乎永远不会遇到没有 PLT/GOT 的 .so 文件。我仍然很好奇理论上是否可行,但我找到了问题的实际方面的答案,所以我认为它可以帮助其他想知道同样事情的人!