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
|
| 3 |
|
ebenders | ec1e088 | 2011-09-07 15:36:11 +0300 | [diff] [blame^] | 4 | # read a little-endian, 64-bit file
|
ebenders | e790d0d | 2011-09-07 15:21:07 +0300 | [diff] [blame] | 5 | es = ELFStructs(True, 64)
|
| 6 |
|
ebenders | e790d0d | 2011-09-07 15:21:07 +0300 | [diff] [blame] | 7 | stream = open('binfiles/z.elf', 'rb')
|
ebenders | ec1e088 | 2011-09-07 15:36:11 +0300 | [diff] [blame^] | 8 | eheader = es.Elf_Ehdr.parse_stream(stream)
|
| 9 |
|
| 10 | print eheader
|
| 11 |
|
| 12 | shtable_offset = eheader.e_shoff
|
| 13 | strtable_section_offset = shtable_offset + eheader.e_shstrndx * eheader.e_shentsize
|
| 14 |
|
| 15 | # get to the section header for the sh string table
|
| 16 | print strtable_section_offset
|
| 17 | stream.seek(strtable_section_offset)
|
| 18 | sheader = es.Elf_Shdr.parse_stream(stream)
|
| 19 | print sheader
|
| 20 |
|
| 21 | # yay, looks correct!!
|
| 22 | stream.seek(sheader.sh_offset)
|
| 23 | buf = stream.read(sheader.sh_size)
|
| 24 | for c in buf:
|
| 25 | sys.stdout.write('%02X' % ord(c))
|
| 26 |
|
| 27 |
|
ebenders | e790d0d | 2011-09-07 15:21:07 +0300 | [diff] [blame] | 28 |
|
| 29 |
|
| 30 | #~ print es.Elf_Ehdr
|