pyelftools
pyelftools copied to clipboard
Add API for high-level access to version info
Getting access to symbol version is very important in some applications but the only way to do it now seems to be copy-paste big chunks of code from readelf.py. Can this be fixed by factoring them out to dedicated APIs?
Can you clarify which specific structures and what code in readelf.py you are referring to?
This part in display_symbol_tables:
for nsym, symbol in enumerate(section.iter_symbols()):
version_info = ''
# readelf doesn't display version info for Solaris versioning
if (section['sh_type'] == 'SHT_DYNSYM' and
self._versioninfo['type'] == 'GNU'):
version = self._symbol_version(nsym)
if (version['name'] != symbol.name and
version['index'] not in ('VER_NDX_LOCAL',
'VER_NDX_GLOBAL')):
if version['filename']:
# external symbol
version_info = '@%(name)s (%(index)i)' % version
else:
# internal symbol
if version['hidden']:
version_info = '@%(name)s' % version
else:
version_info = '@@%(name)s' % version
and in display_relocations:
if symbol['st_name'] == 0:
symsec = self.elffile.get_section(symbol['st_shndx'])
symbol_name = symsec.name
version = ''
else:
symbol_name = symbol.name
version = self._symbol_version(rel['r_info_sym'])
version = (version['name']
if version and version['name'] else '')
symbol_name = '%.22s' % symbol_name
if version:
symbol_name += '@' + version
Both seem to be based on _init_versioninfo and _symbol_version functions in readelf.py.
Ah, I see. Yeah, that could be a nice feature