Coder Social home page Coder Social logo

feiyunwill / patchelf Goto Github PK

View Code? Open in Web Editor NEW

This project forked from nixos/patchelf

0.0 1.0 0.0 477 KB

A small utility to modify the dynamic linker and RPATH of ELF executables

License: GNU General Public License v3.0

Shell 3.95% C 65.22% C++ 26.11% Nix 1.86% Makefile 1.34% M4 0.34% Roff 1.18%

patchelf's Introduction

PatchELF is a simple utility for modifying existing ELF executables and
libraries.  In particular, it can do the following:

* Change the dynamic loader ("ELF interpreter") of executables:

  $ patchelf --set-interpreter /lib/my-ld-linux.so.2 my-program

* Change the RPATH of executables and libraries:

  $ patchelf --set-rpath /opt/my-libs/lib:/other-libs my-program

* Shrink the RPATH of executables and libraries:

  $ patchelf --shrink-rpath my-program

  This removes from the RPATH all directories that do not contain a
  library referenced by DT_NEEDED fields of the executable or library.
  For instance, if an executable references one library libfoo.so, has
  an RPATH "/lib:/usr/lib:/foo/lib", and libfoo.so can only be found
  in /foo/lib, then the new RPATH will be "/foo/lib".

  In addition, the '--allowed-rpath-prefixes' option can be used for
  further rpath tuning. For instance, if an executable has an RPATH
  "/tmp/build-foo/.libs:/foo/lib", it is probably desirable to keep
  the "/foo/lib" reference instead of the "/tmp" entry. To accomplish
  that, use:

  $ patchelf --shrink-rpath --allowed-rpath-prefixes /usr/lib:/foo/lib my-program

* Remove declared dependencies on dynamic libraries (DT_NEEDED
  entries):

  $ patchelf --remove-needed libfoo.so.1 my-program

  This option can be given multiple times.

* Add a declared dependency on a dynamic library (DT_NEEDED):

  $ patchelf --add-needed libfoo.so.1 my-program

  This option can be give multiple times.

* Replace a declared dependency on a dynamic library with another one
  (DT_NEEDED):

  $ patchelf --replace-needed liboriginal.so.1 libreplacement.so.1 my-program

  This option can be give multiple times.

* Change SONAME of a dynamic library:

  $ patchelf --set-soname libnewname.so.3.4.5 path/to/libmylibrary.so.1.2.3


INSTALLING

You can download a pre-compiled binary from the releases or compile it by yourself:

  ./bootstrap.sh
  ./configure
  make
  sudo make install


AUTHOR

Copyright 2004-2019 Eelco Dolstra <[email protected]>.


LICENSE

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or (at
your option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.


HOMEPAGE

http://nixos.org/patchelf.html


BUGS

The `strip' command from binutils generated broken executables when
applied to the output of patchelf (if `--set-rpath' or
`--set-interpreter' with a larger path than the original is used).
This appears to be a bug in binutils
(http://bugs.strategoxt.org/browse/NIXPKGS-85).


RELEASE HISTORY

0.10 (March 28, 2019):

* Many bug fixes. Please refer to the Git commit log:

    https://github.com/NixOS/patchelf/commits/master

  This release has contributions from Adam Trhoň, Benjamin Hipple,
  Bernardo Ramos, Bjørn Forsman, Domen Kožar, Eelco Dolstra, Ezra
  Cooper, Felipe Sateler, Jakub Wilk, James Le Cuirot, Karl Millar,
  Linus Heckemann, Nathaniel J. Smith, Richard Purdie, Stanislav
  Markevich and Tuomas Tynkkynen.

0.9 (February 29, 2016):

* Lots of new features. Please refer to the Git commit log:

    https://github.com/NixOS/patchelf/commits/master

  This release has contributions from Aaron D. Marasco, Adrien
  Devresse, Alexandre Pretyman, Changli Gao, Chingis Dugarzhapov,
  darealshinji, David Sveningsson, Eelco Dolstra, Felipe Sateler,
  Jeremy Sanders, Jonas Kuemmerlin, Thomas Tuegel, Tuomas Tynkkynen,
  Vincent Danjean and Vladimír Čunát.

0.8 (January 15, 2014):

* Fix a segfault caused by certain illegal entries in symbol tables.

0.7 (January 7, 2014):

* Rewrite section indices in symbol tables. This for instance allows
  gdb to show proper backtraces.

* Added `--remove-needed' option.

0.6 (November 7, 2011):

* Hacky support for executables created by the Gold linker.

* Support segments with an alignment of 0 (contributed by Zack
  Weinberg).

* Added a manual page (contributed by Jeremy Sanders
  <[email protected]>).

0.5 (November 4, 2009):

* Various bugfixes.

* `--force-rpath' now deletes the DT_RUNPATH if it is present.

0.4 (June 4, 2008):

* Support for growing the RPATH on dynamic libraries.

* IA-64 support (not tested) and related 64-bit fixes.

* FreeBSD support.

* `--set-rpath', `--shrink-rpath' and `--print-rpath' now prefer
  DT_RUNPATH over DT_RPATH, which is obsolete.  When updating, if both
  are present, both are updated.  If only DT_RPATH is present, it is
  converted to DT_RUNPATH unless `--force-rpath' is specified.  If
  neither is present, a DT_RUNPATH is added unless `--force-rpath' is
  specified, in which case a DT_RPATH is added.

0.3 (May 24, 2007):

* Support for 64-bit ELF binaries (such as on x86_64-linux).

* Support for big-endian ELF binaries (such as on powerpc-linux).

* Various bugfixes.

0.2 (January 15, 2007):

* Provides a hack to get certain programs (such as the
  Belastingaangifte 2005) to work.

0.1 (October 11, 2005):

* Initial release.

patchelf's People

Contributors

adam-trhon avatar adevress avatar bhipple avatar bjornfor avatar chewi avatar darealshinji avatar dezgeg avatar domenkozar avatar edolstra avatar ext avatar ezquat avatar fsateler avatar genosse-einhorn avatar jeremysanders avatar jwilk avatar kmillar avatar kroggen avatar lheckemann avatar lkollar avatar njsmith avatar pespin avatar pretyman avatar rpurdie avatar stmarkevich avatar ttuegel avatar vcunat avatar vdanjean avatar xiaosuo avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.