ebenders | ec1e088 | 2011-09-07 15:36:11 +0300 | [diff] [blame] | 1 | import sys
|
ebenders | 198538a | 2011-09-07 11:12:47 +0300 | [diff] [blame] | 2 | from elftools.elf.structs import ELFStructs
|
ebenders | aa9f671 | 2011-09-08 11:27:53 +0300 | [diff] [blame] | 3 | from elftools.elf.elffile import ELFFile
|
ebenders | 198538a | 2011-09-07 11:12:47 +0300 | [diff] [blame] | 4 |
|
ebenders | ec1e088 | 2011-09-07 15:36:11 +0300 | [diff] [blame] | 5 | # read a little-endian, 64-bit file
|
ebenders | e790d0d | 2011-09-07 15:21:07 +0300 | [diff] [blame] | 6 | es = ELFStructs(True, 64)
|
| 7 |
|
ebenders | e790d0d | 2011-09-07 15:21:07 +0300 | [diff] [blame] | 8 | stream = open('binfiles/z.elf', 'rb')
|
ebenders | ec1e088 | 2011-09-07 15:36:11 +0300 | [diff] [blame] | 9 |
|
ebenders | aa9f671 | 2011-09-08 11:27:53 +0300 | [diff] [blame] | 10 | efile = ELFFile(stream)
|
ebenders | ec1e088 | 2011-09-07 15:36:11 +0300 | [diff] [blame] | 11 |
|
ebenders | a06062f | 2011-09-08 12:37:48 +0300 | [diff] [blame^] | 12 | print 'num', efile.num_sections()
|
| 13 | sec = efile.get_section(39)
|
| 14 | #~ print sec.header
|
| 15 | print sec.name
|
| 16 | print sec['sh_type']
|
| 17 | print map(ord, sec.data())
|
| 18 |
|
| 19 | #~ print sec.stream
|
| 20 | #~ print map(ord, efile._stringtable)
|
| 21 |
|
ebenders | aa9f671 | 2011-09-08 11:27:53 +0300 | [diff] [blame] | 22 | #~ print efile.header
|
| 23 | #~ print dir(efile)
|
| 24 | #~ print efile['e_type']
|
| 25 |
|
ebenders | a06062f | 2011-09-08 12:37:48 +0300 | [diff] [blame^] | 26 | #~ shtable_offset = efile['e_shoff']
|
| 27 | #~ strtable_section_offset = shtable_offset + efile['e_shstrndx'] * efile['e_shentsize']
|
ebenders | ec1e088 | 2011-09-07 15:36:11 +0300 | [diff] [blame] | 28 |
|
ebenders | a06062f | 2011-09-08 12:37:48 +0300 | [diff] [blame^] | 29 | #~ # 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
|
ebenders | ec1e088 | 2011-09-07 15:36:11 +0300 | [diff] [blame] | 34 |
|
ebenders | a06062f | 2011-09-08 12:37:48 +0300 | [diff] [blame^] | 35 | #~ # 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))
|
ebenders | ec1e088 | 2011-09-07 15:36:11 +0300 | [diff] [blame] | 40 |
|
| 41 |
|
ebenders | e790d0d | 2011-09-07 15:21:07 +0300 | [diff] [blame] | 42 |
|
| 43 |
|
| 44 | #~ print es.Elf_Ehdr
|