是否有一种工具可以修改ELF二进制文件的动态部分中的共享库条目?我想要明确地修改我的二进制文件中的共享库依赖项(即使用自定义路径替换现有库的路径)。
patchelf
是你想要的工具。
$ patchelf --replace-needed LIB_ORIGIN LIB_NEW ELF_FILE
为了查看效果
$ readelf -d ELF_FILE
$ sudo apt-get install patchelf readelf
用自定义路径替换现有库的路径
如果这是您自己的库,那么您可能会像这样链接它:
$ cc -o prog1 -l/full/path/to/libABC.so prog1.o
正确的替代方法是:
$ cc -o prog1 -L/full/path/to/ -lABC prog1.o
如果你通过readelf
查看Linux中的.dynsym部分,你会看到类似这样的内容:
1: 0000000000000000 163 FUNC GLOBAL DEFAULT UND fseek@GLIBC_2.2.5 (2)
这只包含库的符号名称。但是,如果您包括动态加载器信息,则会得到:
libc.so.6 => /lib/libc.so.6 (0x00002ba11da4a000)
/lib64/ld-linux-x86-64.so.2 (0x00002ba11d82a000)
您可能想要检查LD_LIBRARY_PATH
环境变量。