我正在使用patchelf来修改已编译二进制文件的rpath和解释器。调用patchelf的代码如下:
patchelf --set-interpreter "\$ORIGIN/lib/ld-linux-x86-64.so.2" --set-rpath "\$ORIGIN/lib" ./grep
这些被正确设置了,可以通过运行 readelf -l ./grep | grep interpreter
进行验证,输出结果如下:
[Requesting program interpreter: $ORIGIN/lib/ld-linux-x86-64.so.2]
然而,当我尝试运行可执行文件时,出现以下错误:
-bash: ./grep: No such file or directory
这似乎表明链接器出现了问题。如果我使用绝对路径而不是使用 $ORIGIN
,那么它似乎可以正常工作。
我想知道我在这里是否使用 $ORIGIN
的方式有些不正确,或者这可能是系统级别上已被禁用的某些东西吗?
$ORIGIN
在PT_INTERP
中的安全漏洞,您对这篇文章的看法如何:https://backtrace.io/blog/exploiting-elf-expansion-variables/?这可能是不同内核版本之间存在差异的问题吗? - Ivanna