primary |
PatchELF is a small utility to modify the dynamic linker and RPATH of ELF
executables.
Dynamically linked ELF executables always specify a dynamic linker or
interpreter, which is a program that actually loads the executable along
with all its dynamically linked libraries. (The kernel just loads the
interpreter, not the executable.) For example, on a Linux/x86 system the
ELF interpreter is typically the file /lib/ld-linux.so.2. It is sometimes
necessary to use a different ELF interpreter, say, when you want to test
a version of Glibc installed in a location other than /lib.
Precompiled third-party binaries may have interpreter paths that are
incompatible with the target system. This is where PatchELF comes in.
You can simply rewrite the executable:
$ patchelf --set-interpreter /my/lib/my-ld-linux.so.2 program
This modifies the interpreter section of program to refer to the specified
file. This is not quite trivial because the path of the new interpreter may
be longer than the old one, in which case it won't fit. PatchELF takes
care of growing the executable with sufficient space at the beginning to
contain the new interpreter field. As a result, the resulting program may
be one page (4 KiB) larger.
Likewise it is possible to change or remove RPATHs embedded in ELF files.
|