Implements features of NixOS/patchelf in pure Ruby.
Available on RubyGems.org!
$ gem install patchelfSHELL_OUTPUT_OF(patchelf.rb)SHELL_OUTPUT_OF(patchelf.rb --print-interpreter --print-needed /bin/ls)# $ patchelf.rb --interp NEW_INTERP input.elf output.elf
SHELL_OUTPUT_OF(patchelf.rb --interp /lib/AAAA.so /bin/ls ls.patch)
SHELL_OUTPUT_OF(file ls.patch)
SHELL_EXEC(rm -f ls.patch)$ patchelf.rb --add-needed libnew.so /bin/ls ls.patch$ patchelf.rb --remove-needed libc.so.6 /bin/ls ls.patchSHELL_OUTPUT_OF(patchelf.rb --replace-needed libc.so.6,libcnew.so.6 /bin/ls ls.patch)
SHELL_OUTPUT_OF(readelf -d ls.patch | grep NEEDED)
SHELL_EXEC(rm -f ls.patch)SHELL_OUTPUT_OF(patchelf.rb --needed a.so,b.so,c.so /bin/ls ls.patch)
SHELL_OUTPUT_OF(readelf -d ls.patch | grep NEEDED)
SHELL_EXEC(rm -f ls.patch)SHELL_OUTPUT_OF(patchelf.rb --runpath . /bin/ls ls.patch)
SHELL_OUTPUT_OF(readelf -d ls.patch | grep RUNPATH)
SHELL_EXEC(rm -f libc.patch)SHELL_OUTPUT_OF(patchelf.rb --so libc.so.217 /lib/x86_64-linux-gnu/libc.so.6 libc.patch)
SHELL_OUTPUT_OF(readelf -d libc.patch | grep SONAME)
SHELL_EXEC(rm -f libc.patch)require 'patchelf'
DEFINE_PATCHER(/bin/ls)
RUBY_OUTPUT_OF(patcher.interpreter)
RUBY_EVAL(patcher.interpreter = '/lib/AAAA.so.2')
RUBY_OUTPUT_OF(patcher.interpreter)
RUBY_EVAL(patcher.save('ls.patch'))
# SHELL_OUTPUT_OF(file ls.patch)
SHELL_EXEC(rm ls.patch)patchelf.rb is implemented in pure Ruby, so it should work in all environments include Linux, macOS, and Windows!
The git history remains the definitive record of all contributions.
- david942j (@david942j)
- david942j (@david942j)