是否有用于修改ELF二进制文件的动态部分中的共享库条目的工具?我想显式修改二进制文件中的共享库依赖项(即用自定义路径替换现有库的路径)
将现有库的路径替换为自定义路径
如果这是您自己的库,那么您可能会这样链接它:
$ cc -o prog1 -l/full/path/to/libABC.so prog1.o
Run Code Online (Sandbox Code Playgroud)
而不是正确的:
$ cc -o prog1 -L/full/path/to/ -lABC prog1.o
Run Code Online (Sandbox Code Playgroud)
第一种方法告诉 Linux 链接器应用程序恰好需要该库,并且只能使用该库,并且不能覆盖。第二种方法告诉应用程序需要将安装在系统上某个位置的库,无论是在默认库路径中还是在 $LD_LIBRARY_PATH 指向的路径中(将在运行时查找)。-L 仅在链接时使用。
否则,不要修补 ELF,而是首先检查是否可以使用符号链接替换库。这是常见的技巧:事后很难修改可执行文件,但更改符号链接点的位置却很容易。