blob: 9f208d3ba9c6660d67a6274223022fafdae345f5 [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
elibena6416fd2011-09-08 14:49:30 +030012for sec in efile.iter_sections():
13 print sec.name
14
15for seg in efile.iter_segments():
16 print seg['p_type'], seg['p_offset']
17
18#~ print 'num', efile.num_sections()
19#~ sec = efile.get_section(39)
ebendersa06062f2011-09-08 12:37:48 +030020#~ print sec.header
elibena6416fd2011-09-08 14:49:30 +030021#~ print sec.name
22#~ print sec['sh_type']
23#~ print map(ord, sec.data())
ebendersa06062f2011-09-08 12:37:48 +030024
25#~ print sec.stream
26#~ print map(ord, efile._stringtable)
27
ebendersaa9f6712011-09-08 11:27:53 +030028#~ print efile.header
29#~ print dir(efile)
30#~ print efile['e_type']
31
ebendersa06062f2011-09-08 12:37:48 +030032#~ shtable_offset = efile['e_shoff']
33#~ strtable_section_offset = shtable_offset + efile['e_shstrndx'] * efile['e_shentsize']
ebendersec1e0882011-09-07 15:36:11 +030034
ebendersa06062f2011-09-08 12:37:48 +030035#~ # get to the section header for the sh string table
36#~ print strtable_section_offset
37#~ stream.seek(strtable_section_offset)
38#~ sheader = es.Elf_Shdr.parse_stream(stream)
39#~ print sheader
ebendersec1e0882011-09-07 15:36:11 +030040
ebendersa06062f2011-09-08 12:37:48 +030041#~ # yay, looks correct!!
42#~ stream.seek(sheader.sh_offset)
43#~ buf = stream.read(sheader.sh_size)
44#~ for c in buf:
45 #~ sys.stdout.write('%02X' % ord(c))
ebendersec1e0882011-09-07 15:36:11 +030046
47
ebenderse790d0d2011-09-07 15:21:07 +030048
49
50#~ print es.Elf_Ehdr