blob: e959632c4051c1915a9d05c2f29718bedfe9ffd6 [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
ebendersaa9f6712011-09-08 11:27:53 +030012#~ print efile.header
13#~ print dir(efile)
14#~ print efile['e_type']
15
16shtable_offset = efile['e_shoff']
17strtable_section_offset = shtable_offset + efile['e_shstrndx'] * efile['e_shentsize']
ebendersec1e0882011-09-07 15:36:11 +030018
19# get to the section header for the sh string table
20print strtable_section_offset
21stream.seek(strtable_section_offset)
22sheader = es.Elf_Shdr.parse_stream(stream)
23print sheader
24
25# yay, looks correct!!
26stream.seek(sheader.sh_offset)
27buf = stream.read(sheader.sh_size)
28for c in buf:
29 sys.stdout.write('%02X' % ord(c))
30
31
ebenderse790d0d2011-09-07 15:21:07 +030032
33
34#~ print es.Elf_Ehdr