blob: adcfd6c39fc6a4229f7dd679c0600f48444988ca [file] [log] [blame]
ebendersec1e0882011-09-07 15:36:11 +03001import sys
ebenders198538a2011-09-07 11:12:47 +03002from elftools.elf.structs import ELFStructs
ebendersaa9f6712011-09-08 11:27:53 +03003from elftools.elf.elffile import ELFFile
ebenders198538a2011-09-07 11:12:47 +03004
ebendersec1e0882011-09-07 15:36:11 +03005# read a little-endian, 64-bit file
ebenderse790d0d2011-09-07 15:21:07 +03006es = ELFStructs(True, 64)
7
ebenderse790d0d2011-09-07 15:21:07 +03008stream = open('binfiles/z.elf', 'rb')
ebendersec1e0882011-09-07 15:36:11 +03009
ebendersaa9f6712011-09-08 11:27:53 +030010efile = ELFFile(stream)
ebendersec1e0882011-09-07 15:36:11 +030011
eliben75b5fde2011-09-08 16:24:49 +030012print '===> %s sections!' % efile.num_sections()
13print '===> %s segments!' % efile.num_segments()
14
elibena6416fd2011-09-08 14:49:30 +030015for sec in efile.iter_sections():
16 print sec.name
17
18for seg in efile.iter_segments():
19 print seg['p_type'], seg['p_offset']
20
21#~ print 'num', efile.num_sections()
22#~ sec = efile.get_section(39)
ebendersa06062f2011-09-08 12:37:48 +030023#~ print sec.header
elibena6416fd2011-09-08 14:49:30 +030024#~ print sec.name
25#~ print sec['sh_type']
26#~ print map(ord, sec.data())
ebendersa06062f2011-09-08 12:37:48 +030027
28#~ print sec.stream
29#~ print map(ord, efile._stringtable)
30
ebendersaa9f6712011-09-08 11:27:53 +030031#~ print efile.header
32#~ print dir(efile)
33#~ print efile['e_type']
34
ebendersa06062f2011-09-08 12:37:48 +030035#~ shtable_offset = efile['e_shoff']
36#~ strtable_section_offset = shtable_offset + efile['e_shstrndx'] * efile['e_shentsize']
ebendersec1e0882011-09-07 15:36:11 +030037
ebendersa06062f2011-09-08 12:37:48 +030038#~ # get to the section header for the sh string table
39#~ print strtable_section_offset
40#~ stream.seek(strtable_section_offset)
41#~ sheader = es.Elf_Shdr.parse_stream(stream)
42#~ print sheader
ebendersec1e0882011-09-07 15:36:11 +030043
ebendersa06062f2011-09-08 12:37:48 +030044#~ # yay, looks correct!!
45#~ stream.seek(sheader.sh_offset)
46#~ buf = stream.read(sheader.sh_size)
47#~ for c in buf:
48 #~ sys.stdout.write('%02X' % ord(c))
ebendersec1e0882011-09-07 15:36:11 +030049
50
ebenderse790d0d2011-09-07 15:21:07 +030051
52
53#~ print es.Elf_Ehdr