blob: 7780365713bdb729e93ecec8fac5811952a4dc59 [file] [log] [blame]
Eli Benderskyc4a4c072011-09-17 15:28:28 +03001# Just a script for playing around with pyelftools during testing
2# please ignore it!
3#
4
elibenc6db4c42011-09-20 16:03:59 +03005import sys, pprint
Eli Benderskye0735d52011-09-08 20:12:44 +03006from elftools.elf.structs import ELFStructs
7from elftools.elf.elffile import ELFFile
8from elftools.elf.sections import *
9
10# read a little-endian, 64-bit file
11es = ELFStructs(True, 64)
12
eliben7f13df22011-09-26 11:17:03 +030013stream = open('tests/testfiles/exe_simple64.elf', 'rb')
Eli Benderskye0735d52011-09-08 20:12:44 +030014#stream = open('binfiles/z32.elf', 'rb')
15
16efile = ELFFile(stream)
eliben033b44f2011-09-19 15:48:39 +030017print efile.elfclass, efile.little_endian
Eli Benderskye0735d52011-09-08 20:12:44 +030018print '===> %s sections!' % efile.num_sections()
eliben54e39b22011-09-19 13:10:57 +030019
eliben033b44f2011-09-19 15:48:39 +030020print efile.has_dwarf_info()
21
elibence5ec712011-09-20 10:20:32 +030022dwarfinfo = efile.get_dwarf_info()
eliben3b9ad822011-09-22 11:46:26 +030023
eliben8eff3ee2011-10-02 09:50:37 +020024cu = dwarfinfo.get_CU(3)
eliben3b9ad822011-09-22 11:46:26 +030025print 'CU header', cu.header
eliben8eb8e7f2011-09-22 13:17:07 +030026topdie = cu.get_top_DIE()
27
eliben8eff3ee2011-10-02 09:50:37 +020028c = topdie.iter_children().next()
29
30print c
31
32print 'siblings.....'
33
34for s in c.iter_siblings():
35 print s
36
37#~ print c.get_parent()
38#~ print topdie
39
40#~ def recp(d, indent=0):
41 #~ s = str(d)
42 #~ lines = s.split('\n')
43 #~ print '\n'.join(' ' * indent + l for l in lines)
44
45 #~ for c in d.iter_children():
46 #~ recp(c, indent + 6)
47
48#~ recp(topdie)
49
50#~ for c in topdie.iter_children():
51 #~ print c
52#~ for die in cu._dielist:
53 #~ print 'DIE %s, size=%s' % (die.tag, die.size)
54 #~ for attrname, val in die.attributes.iteritems():
55 #~ print ' ', attrname, val
eliben7f13df22011-09-26 11:17:03 +030056
57#~ topdie = cu.get_top_DIE()
58
59#~ print topdie.size, topdie.tag
60
61#~ print len(cu._dielist)
elibena98028e2011-09-21 12:09:53 +030062
elibenc6db4c42011-09-20 16:03:59 +030063#~ print dwarfinfo.structs.Dwarf_abbrev_entry.parse('\x13\x01\x01\x03\x50\x04\x00\x00')
64
elibena98028e2011-09-21 12:09:53 +030065#~ abbrevtable = dwarfinfo.get_abbrev_table(95)
66#~ print id(abbrevtable)
67#~ pprint.pprint(abbrevtable._abbrev_map)
elibenc6db4c42011-09-20 16:03:59 +030068
elibena98028e2011-09-21 12:09:53 +030069#~ ab1 = abbrevtable.get_abbrev(2)
70#~ print ab1.has_children()
71#~ for name, form in ab1.iter_attr_specs():
72 #~ print name, form
73
74#~ print dwarfinfo.get_abbrev_table(0).get_abbrev(1).has_children()
elibenc6db4c42011-09-20 16:03:59 +030075
76#~ for cu in dwarfinfo._CU:
77 #~ print cu, cu.header
78
79
eliben033b44f2011-09-19 15:48:39 +030080
81
82#~ print efile.get_section_by_name('.debug_info').name
eliben54e39b22011-09-19 13:10:57 +030083
84#~ print '===> %s segments!' % efile.num_segments()
Eli Benderskye0735d52011-09-08 20:12:44 +030085
eliben033b44f2011-09-19 15:48:39 +030086#~ for sec in efile.iter_sections():
87 #~ print type(sec), sec.name
88 #~ if isinstance(sec, SymbolTableSection):
89 #~ print ' linked string table:', sec.stringtable.name
Eli Benderskye0735d52011-09-08 20:12:44 +030090
eliben54e39b22011-09-19 13:10:57 +030091#~ for seg in efile.iter_segments():
92 #~ print type(seg), seg['p_type'], seg['p_offset']
Eli Benderskye0735d52011-09-08 20:12:44 +030093
eliben54e39b22011-09-19 13:10:57 +030094#~ for sec in efile.iter_sections():
95 #~ if isinstance(sec, SymbolTableSection):
96 #~ print 'symbol table "%s ~~~"' % sec.name
97 #~ for sym in sec.iter_symbols():
98 #~ print '%-26s %s %s' % (sym.name, sym['st_info']['type'], sym['st_info']['bind'])
Eli Benderskya42f82d2011-09-09 06:02:47 +030099