blob: 5e5e775ce209b57c0efcc79c2a2277f835ce9ab7 [file] [log] [blame]
# Just a script for playing around with pyelftools during testing
# please ignore it!
#
import sys, pprint
from elftools.elf.structs import ELFStructs
from elftools.elf.elffile import ELFFile
from elftools.elf.sections import *
# read a little-endian, 64-bit file
es = ELFStructs(True, 64)
stream = open('tests/testfiles/z.elf', 'rb')
#stream = open('binfiles/z32.elf', 'rb')
efile = ELFFile(stream)
print efile.elfclass, efile.little_endian
print '===> %s sections!' % efile.num_sections()
print efile.has_dwarf_info()
dwarfinfo = efile.get_dwarf_info()
tt = dwarfinfo.structs.Dwarf_dw_form['DW_FORM_block1'].parse('\x03\x12\x34\x46')
cu = dwarfinfo.get_CU(0)
print 'CU header', cu.header
topdie = cu.get_top_DIE()
print topdie.size, topdie.tag
for attrname, val in topdie.attributes.iteritems():
print attrname, val
#~ print dwarfinfo.structs.Dwarf_abbrev_entry.parse('\x13\x01\x01\x03\x50\x04\x00\x00')
#~ abbrevtable = dwarfinfo.get_abbrev_table(95)
#~ print id(abbrevtable)
#~ pprint.pprint(abbrevtable._abbrev_map)
#~ ab1 = abbrevtable.get_abbrev(2)
#~ print ab1.has_children()
#~ for name, form in ab1.iter_attr_specs():
#~ print name, form
#~ print dwarfinfo.get_abbrev_table(0).get_abbrev(1).has_children()
#~ for cu in dwarfinfo._CU:
#~ print cu, cu.header
#~ print efile.get_section_by_name('.debug_info').name
#~ print '===> %s segments!' % efile.num_segments()
#~ for sec in efile.iter_sections():
#~ print type(sec), sec.name
#~ if isinstance(sec, SymbolTableSection):
#~ print ' linked string table:', sec.stringtable.name
#~ for seg in efile.iter_segments():
#~ print type(seg), seg['p_type'], seg['p_offset']
#~ for sec in efile.iter_sections():
#~ if isinstance(sec, SymbolTableSection):
#~ print 'symbol table "%s ~~~"' % sec.name
#~ for sym in sec.iter_symbols():
#~ print '%-26s %s %s' % (sym.name, sym['st_info']['type'], sym['st_info']['bind'])