rebind
Directory actions
More options
Directory actions
More options
rebind
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
parent directory.. | ||||
rebind is a small utility that allows one to modify the binding strength and/or visibility of a global symbol in an ELF object file. There are two different types of global symbol bindings. The first is STB_GLOBAL. A global symbol can appear in multiple ELF files, but it must be an undefined reference in all but one place. The second type of binding is STB_WEAK. A weak symbol acts identically to a global symbol only as long as there exists no global symbol with the same name. If there is, however, then the weak symbol is ignored in favor of the global symbol, and the condition is not treated as a name collision error. Note that rebind does not permit you to make local symbols global, or vice versa. The dynamic symbol table requires that all local symbols be listed before global symbols, so making these sort of changes requires that the symbol table be reordered. rebind also permits you to change a symbol's visibility. With the default visibility, a global symbol is visible everywhere. A symbol with hidden visibility, however, is only available to the module it was built with -- in other words, the symbol can be accessed by the static linker but not by the dynamic linker. An symbol with internal visibility cannot be accessed from outside its module (not even via a pointer). A symbol with protected visibility is not hidden, but internally it cannot have its definition overridden by another module containing a symbol with the same name. The GNU C compiler permits the user to specify the binding and/or visibility of a symbol via the __attribute__ extension. The GNU assembler uses directives such as .weak, .hidden, et al, to accomplish the same thing. Some other tools, however, offer no way to specify a global symbol's binding or visibility, so this program can be seen as providing an alternate method for doing this. This program can also be used to directly see how changing a symbol's binding can affect its behavior. And, hopefully, it also provides a template for writing other specialized programs for making small, in-place modifications to ELF files.