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