blob: c74a4ff9f8de4279fbb954f2ab81dcfa314bc916 [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
ebendersa06062f2011-09-08 12:37:48 +030012print 'num', efile.num_sections()
13sec = efile.get_section(39)
14#~ print sec.header
15print sec.name
16print sec['sh_type']
17print map(ord, sec.data())
18
19#~ print sec.stream
20#~ print map(ord, efile._stringtable)
21
ebendersaa9f6712011-09-08 11:27:53 +030022#~ print efile.header
23#~ print dir(efile)
24#~ print efile['e_type']
25
ebendersa06062f2011-09-08 12:37:48 +030026#~ shtable_offset = efile['e_shoff']
27#~ strtable_section_offset = shtable_offset + efile['e_shstrndx'] * efile['e_shentsize']
ebendersec1e0882011-09-07 15:36:11 +030028
ebendersa06062f2011-09-08 12:37:48 +030029#~ # get to the section header for the sh string table
30#~ print strtable_section_offset
31#~ stream.seek(strtable_section_offset)
32#~ sheader = es.Elf_Shdr.parse_stream(stream)
33#~ print sheader
ebendersec1e0882011-09-07 15:36:11 +030034
ebendersa06062f2011-09-08 12:37:48 +030035#~ # yay, looks correct!!
36#~ stream.seek(sheader.sh_offset)
37#~ buf = stream.read(sheader.sh_size)
38#~ for c in buf:
39 #~ sys.stdout.write('%02X' % ord(c))
ebendersec1e0882011-09-07 15:36:11 +030040
41
ebenderse790d0d2011-09-07 15:21:07 +030042
43
44#~ print es.Elf_Ehdr