21 lines
613 B
Python
21 lines
613 B
Python
|
|
#!/usr/bin/env python3
|
||
|
|
import lief
|
||
|
|
import sys
|
||
|
|
|
||
|
|
libpath = sys.argv[1]
|
||
|
|
lib = lief.parse(libpath)
|
||
|
|
|
||
|
|
symbols = ["__bss_end__", "__bss_start", "_end", "_edata", "__bss_start__", "_bss_end__", "__end__"]
|
||
|
|
for symbol in symbols:
|
||
|
|
hidden = lib.get_symbol(symbol)
|
||
|
|
if hidden:
|
||
|
|
hidden.binding = lief.ELF.SYMBOL_BINDINGS.GLOBAL
|
||
|
|
hidden.visibility = lief.ELF.SYMBOL_VISIBILITY.DEFAULT
|
||
|
|
hidden = lib.add_dynamic_symbol(hidden)
|
||
|
|
|
||
|
|
# HACK: increase .dynsym's sh_info to workaround local symbol warning:
|
||
|
|
# 'found local symbol in global part of symbol table'
|
||
|
|
lib.get_section('.dynsym').information = 10
|
||
|
|
|
||
|
|
lib.write(libpath)
|