CU will now parse all its DIEs (lazily, when any specific DIE is requested)
[pyelftools.git] / z.py
1 # Just a script for playing around with pyelftools during testing
2 # please ignore it!
3 #
4
5 import sys, pprint
6 from elftools.elf.structs import ELFStructs
7 from elftools.elf.elffile import ELFFile
8 from elftools.elf.sections import *
9
10 # read a little-endian, 64-bit file
11 es = ELFStructs(True, 64)
12
13 stream = open('tests/testfiles/exe_simple64.elf', 'rb')
14 #stream = open('binfiles/z32.elf', 'rb')
15
16 efile = ELFFile(stream)
17 print efile.elfclass, efile.little_endian
18 print '===> %s sections!' % efile.num_sections()
19
20 print efile.has_dwarf_info()
21
22 dwarfinfo = efile.get_dwarf_info()
23 tt = dwarfinfo.structs.Dwarf_dw_form['DW_FORM_block1'].parse('\x03\x12\x34\x46')
24
25 cu = dwarfinfo.get_CU(1)
26 print 'CU header', cu.header
27 topdie = cu.get_top_DIE()
28
29 for die in cu._dielist:
30 print 'DIE %s, size=%s' % (die.tag, die.size)
31 for attrname, val in die.attributes.iteritems():
32 print ' ', attrname, val
33
34 #~ topdie = cu.get_top_DIE()
35
36 #~ print topdie.size, topdie.tag
37
38 #~ print len(cu._dielist)
39
40 #~ print dwarfinfo.structs.Dwarf_abbrev_entry.parse('\x13\x01\x01\x03\x50\x04\x00\x00')
41
42 #~ abbrevtable = dwarfinfo.get_abbrev_table(95)
43 #~ print id(abbrevtable)
44 #~ pprint.pprint(abbrevtable._abbrev_map)
45
46 #~ ab1 = abbrevtable.get_abbrev(2)
47 #~ print ab1.has_children()
48 #~ for name, form in ab1.iter_attr_specs():
49 #~ print name, form
50
51 #~ print dwarfinfo.get_abbrev_table(0).get_abbrev(1).has_children()
52
53 #~ for cu in dwarfinfo._CU:
54 #~ print cu, cu.header
55
56
57
58
59 #~ print efile.get_section_by_name('.debug_info').name
60
61 #~ print '===> %s segments!' % efile.num_segments()
62
63 #~ for sec in efile.iter_sections():
64 #~ print type(sec), sec.name
65 #~ if isinstance(sec, SymbolTableSection):
66 #~ print ' linked string table:', sec.stringtable.name
67
68 #~ for seg in efile.iter_segments():
69 #~ print type(seg), seg['p_type'], seg['p_offset']
70
71 #~ for sec in efile.iter_sections():
72 #~ if isinstance(sec, SymbolTableSection):
73 #~ print 'symbol table "%s ~~~"' % sec.name
74 #~ for sym in sec.iter_symbols():
75 #~ print '%-26s %s %s' % (sym.name, sym['st_info']['type'], sym['st_info']['bind'])
76