开发者

Tool for modifying dynamic section of an ELF binary

Is there a tool for modifying the s开发者_JAVA百科hared library entries in the dynamic section of an ELF binary? I would like to explicitly modify the shared library dependencies in my binary (i.e. replace path to existing library with a custom path)


replace path to existing library with a custom path

If this is your own library, then you probably linking it like that:

$ cc -o prog1 -l/full/path/to/libABC.so prog1.o

instead of the proper:

$ cc -o prog1 -L/full/path/to/ -lABC prog1.o

The first approach tells Linux linker that application needs precisely that library, only that library and no override should be possible. Second approach tells that application needs the library which would be installed somewhere on the system, either in the default library path or one pointed by the $LD_LIBRARY_PATH (would be looked up during run-time). -L is used only during link-time.

Otherwise, instead of patching the ELF, first check if you can substitute the library using a symlink. This is the usual trick: it is hard to modify executable afterward, but it is very easy to change where to the symlink points.


patchelf is what you want

$ patchelf --replace-needed LIB_ORIGIN  LIB_NEW  ELF_FILE

To see the effect

$ readelf -d ELF_FILE

Install the tools is easy:

$ sudo apt-get install patchelf readelf


You may want to check the LD_LIBRARY_PATH environment variable.


If you look at the .dynsym section in Linux via readelf, you'll just see something like:

1: 0000000000000000   163 FUNC    GLOBAL DEFAULT  UND fseek@GLIBC_2.2.5 (2)

which just contains a symbolic name of the library. However, if you include the dynamic loader info, you get:

libc.so.6 => /lib/libc.so.6 (0x00002ba11da4a000)
    /lib64/ld-linux-x86-64.so.2 (0x00002ba11d82a000)

So as mentioned, the absolute easiest thing to do (assuming you're doing this for debugging, and not forever) would just be to create a new session, export your custom path in front of the existing LD_LIBRARY_PATH, and go from there.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜