File: structs.py

package info (click to toggle)
python-pyelftools 0.32-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 68,964 kB
  • sloc: python: 15,903; ansic: 298; asm: 86; makefile: 24; cpp: 18; sh: 4
file content (47 lines) | stat: -rw-r--r-- 1,387 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# -------------------------------------------------------------------------------
# elftools: ehabi/structs.py
#
# Encapsulation of Construct structs for parsing an EHABI, adjusted for
# correct endianness and word-size.
#
# LeadroyaL (leadroyal@qq.com)
# This code is in the public domain
# -------------------------------------------------------------------------------

from ..construct import UBInt32, ULInt32, Struct


class EHABIStructs(object):
    """ Accessible attributes:

            EH_index_struct:
                Struct of item in section .ARM.exidx.

            EH_table_struct:
                Struct of item in section .ARM.extab.
    """

    def __init__(self, little_endian):
        self._little_endian = little_endian
        self._create_structs()

    def _create_structs(self):
        if self._little_endian:
            self.EHABI_uint32 = ULInt32
        else:
            self.EHABI_uint32 = UBInt32
        self._create_exception_handler_index()
        self._create_exception_handler_table()

    def _create_exception_handler_index(self):
        self.EH_index_struct = Struct(
            'EH_index',
            self.EHABI_uint32('word0'),
            self.EHABI_uint32('word1')
        )

    def _create_exception_handler_table(self):
        self.EH_table_struct = Struct(
            'EH_table',
            self.EHABI_uint32('word0'),
        )