コード例 #1
0
ファイル: header.py プロジェクト: twocoldz/python-elf
    def __init__(self, prop=None, offset=None):
        """ Constructor """

        self.fields = []

        if not self.format:
            try:
                if prop.arch == ARCH_32:
                    self.format = self.format_32
                elif prop.arch == ARCH_64:
                    self.format = self.format_64
                else:
                    self.format = []
            except AttributeError:
                self.format = []

        if not self.descriptions:
            try:
                if prop.arch == ARCH_32:
                    self.descriptions = self.descriptions_32
                elif prop.arch == ARCH_64:
                    self.descriptions = self.descriptions_64
                else:
                    self.descriptions = []
            except AttributeError:
                self.descriptions = []

        if not self.cf_descriptions:
            try:
                if prop.arch == ARCH_32:
                    self.cf_descriptions = self.cf_descriptions_32
                elif prop.arch == ARCH_64:
                    self.cf_descriptions = self.cf_descriptions_64
            except AttributeError:
                pass

        if not self.cf_format:
            try:
                if prop.arch == ARCH_32:
                    self.cf_format = self.cf_format_32
                elif prop.arch == ARCH_64:
                    self.cf_format = self.cf_format_64
            except AttributeError:
                pass

        if not self.hr_values:
            try:
                if prop.arch == ARCH_32:
                    self.hr_values = self.hr_values_32
                elif prop.arch == ARCH_64:
                    self.hr_values = self.hr_values_64
                else:
                    self.hr_values = {}
            except AttributeError:
                self.hr_values = {}

        Chunk.__init__(self, prop, True, offset,
                       calcsize(''.join(self.format)))
コード例 #2
0
ファイル: header.py プロジェクト: sybtjp/python-elf
    def __init__(self, prop=None, offset=None):
        """ Constructor """

        self.fields = []

        if not self.format:
            try:
                if prop.arch == ARCH_32:
                    self.format = self.format_32
                elif prop.arch == ARCH_64:
                    self.format = self.format_64
                else:
                    self.format = []
            except AttributeError:
                self.format = []

        if not self.descriptions:
            try:
                if prop.arch == ARCH_32:
                    self.descriptions = self.descriptions_32
                elif prop.arch == ARCH_64:
                    self.descriptions = self.descriptions_64
                else:
                    self.descriptions = []
            except AttributeError:
                self.descriptions = []

        if not self.cf_descriptions:
            try:
                if prop.arch == ARCH_32:
                    self.cf_descriptions = self.cf_descriptions_32
                elif prop.arch == ARCH_64:
                    self.cf_descriptions = self.cf_descriptions_64
            except AttributeError:
                pass

        if not self.cf_format:
            try:
                if prop.arch == ARCH_32:
                    self.cf_format = self.cf_format_32
                elif prop.arch == ARCH_64:
                    self.cf_format = self.cf_format_64
            except AttributeError:
                pass

        if not self.hr_values:
            try:
                if prop.arch == ARCH_32:
                    self.hr_values = self.hr_values_32
                elif prop.arch == ARCH_64:
                    self.hr_values = self.hr_values_64
                else:
                    self.hr_values = {}
            except AttributeError:
                self.hr_values = {}

        Chunk.__init__(self, prop, True, offset,
                       calcsize(''.join(self.format)))
コード例 #3
0
ファイル: elf_binary.py プロジェクト: sybtjp/python-elf
    def load_binary(self, filename=None, offset=None, filemap=None):
        """ Loads the ELF file into a memory mapped file """

        if filename == None:
            filename = self.prop.filename

        self.prop.file_src = open(filename, 'r+')
        self.prop.map_src = mmap(self.prop.file_src.fileno(),
                                 0, access=self.prop.mode)

        Chunk.load(self, offset, filemap)
コード例 #4
0
ファイル: elf_binary.py プロジェクト: sybtjp/python-elf
    def finalize(self):
        """ Close map before deleting the object """

        if self.prop.map_dst != None:
            self.prop.map_dst.close()
            self.prop.file_dst.close()

        self.prop.map_src.close()
        self.prop.file_src.close()

        Chunk.finalize(self)
コード例 #5
0
ファイル: header.py プロジェクト: sybtjp/python-elf
    def __setattr__(self, name, value):
        """ Attribute setter rewrite """

        if self.descriptions != None and name in self.descriptions:
            self.modified = True
            self.fields[self.descriptions.index(name)] = value

        elif self.cf_descriptions != None and name in self.cf_descriptions:
            getattr(self,  "set_"+name)(value)
        else:
            Chunk.__setattr__(self, name, value)
コード例 #6
0
ファイル: elf_binary.py プロジェクト: twocoldz/python-elf
    def finalize(self):
        """ Close map before deleting the object """

        if self.prop.map_dst != None:
            self.prop.map_dst.close()
            self.prop.file_dst.close()

        self.prop.map_src.close()
        self.prop.file_src.close()

        Chunk.finalize(self)
コード例 #7
0
ファイル: header.py プロジェクト: twocoldz/python-elf
    def __setattr__(self, name, value):
        """ Attribute setter rewrite """

        if self.descriptions != None and name in self.descriptions:
            self.modified = True
            self.fields[self.descriptions.index(name)] = value

        elif self.cf_descriptions != None and name in self.cf_descriptions:
            getattr(self, "set_" + name)(value)
        else:
            Chunk.__setattr__(self, name, value)
コード例 #8
0
ファイル: elf_binary.py プロジェクト: twocoldz/python-elf
    def load_binary(self, filename=None, offset=None, filemap=None):
        """ Loads the ELF file into a memory mapped file """

        if filename == None:
            filename = self.prop.filename

        self.prop.file_src = open(filename, 'r+')
        self.prop.map_src = mmap(self.prop.file_src.fileno(),
                                 0,
                                 access=self.prop.mode)

        Chunk.load(self, offset, filemap)
コード例 #9
0
    def remove(self, force=False, forward=True):
        """ Remove the page and its header according to forward """

        if forward == True:
            ret = self.header.remove(force)

        return Chunk.remove(self, force)
コード例 #10
0
ファイル: page.py プロジェクト: sybtjp/python-elf
    def remove(self, force = False, forward = True):
        """ Remove the page and its header according to forward """

        if forward == True:
            ret = self.header.remove(force)

        return Chunk.remove(self, force)
コード例 #11
0
ファイル: header.py プロジェクト: twocoldz/python-elf
    def __getattr__(self, name):
        """ Attribute getter rewrite """

        if self.descriptions != None and name in self.descriptions:
            return self.fields[self.descriptions.index(name)]

        if self.cf_descriptions != None and name in self.cf_descriptions:
            return getattr(self, "get_" + name)()

        return Chunk.__getattr__(self, name)
コード例 #12
0
ファイル: header.py プロジェクト: sybtjp/python-elf
    def load(self, offset=None, filemap=None):
        """ Loads header fields according to descriptions/format """

        Chunk.load(self, offset, filemap)

        fields = list(unpack_from(''.join([self.prop.endian]+self.format),
                                  self.data))
        idx = 0
        for fmt in self.format:
            if fmt[len(fmt)-1] not in [ 's', 'p' ] and (
                        fmt[:len(fmt)-1].isdigit() == True):
                v = idx
                self.fields += [()]
                for n in range (0, int(fmt[:len(fmt)-1])):
                    self.fields[v] += (fields[idx],)
                    idx += 1
            else:
                self.fields += [fields[idx]]
                idx += 1
コード例 #13
0
ファイル: header.py プロジェクト: sybtjp/python-elf
    def __getattr__(self, name):
        """ Attribute getter rewrite """

        if self.descriptions != None and name in self.descriptions:
            return self.fields[self.descriptions.index(name)]

        if self.cf_descriptions != None and name in self.cf_descriptions:
            return getattr(self, "get_"+name)()

        return Chunk.__getattr__(self, name)
コード例 #14
0
ファイル: header.py プロジェクト: twocoldz/python-elf
    def load(self, offset=None, filemap=None):
        """ Loads header fields according to descriptions/format """

        Chunk.load(self, offset, filemap)

        fields = list(
            unpack_from(''.join([self.prop.endian] + self.format), self.data))
        idx = 0
        for fmt in self.format:
            if fmt[len(fmt) - 1] not in [
                    's', 'p'
            ] and (fmt[:len(fmt) - 1].isdigit() == True):
                v = idx
                self.fields += [()]
                for n in range(0, int(fmt[:len(fmt) - 1])):
                    self.fields[v] += (fields[idx], )
                    idx += 1
            else:
                self.fields += [fields[idx]]
                idx += 1
コード例 #15
0
ファイル: elf_binary.py プロジェクト: sybtjp/python-elf
    def __init__(self, filename, access='r', load=True, backup=False):
        """ Constructor """

        self.access = access

        if self.access == 'w':
            mode = ACCESS_WRITE
        elif self.access == 'r':
            mode = ACCESS_READ
        else:
            mode = None

        size = getsize(filename)

        self.prop = Property(mode, backup, filename, size_src=size)

        self.header = None
        self.sections = []
        self.programs = []

        Chunk.__init__(self, prop=self.prop, load=load, offset=0, size=size)
コード例 #16
0
ファイル: elf_binary.py プロジェクト: twocoldz/python-elf
    def __init__(self, filename, access='r', load=True, backup=False):
        """ Constructor """

        self.access = access

        if self.access == 'w':
            mode = ACCESS_WRITE
        elif self.access == 'r':
            mode = ACCESS_READ
        else:
            mode = None

        size = getsize(filename)

        self.prop = Property(mode, backup, filename, size_src=size)

        self.header = None
        self.sections = []
        self.programs = []

        Chunk.__init__(self, prop=self.prop, load=load, offset=0, size=size)
コード例 #17
0
ファイル: elf_binary.py プロジェクト: sybtjp/python-elf
    def write(self):
        """ Writes the current ELF map into a file """

        filename = self.prop.filename
        if self.prop.backup:
            filename = self.prop.filename+'_mod'

        f_dst = open(filename, 'wb')
        f_dst.write('\0'*PAGESIZE)
        f_dst.close()
        self.prop.file_dst = open(filename, 'r+')
        self.prop.map_dst = mmap(self.prop.file_dst.fileno(),
                                 0, access=self.prop.mode)
        self.prop.map_dst.resize(self.size)

        ret_size = Chunk.write(self, self.prop.map_dst)

        self.prop.map_dst.close()
        self.prop.map_dst = None
        self.prop.file_dst.close()
        self.prop.file_dst = None

        return ret_size
コード例 #18
0
ファイル: elf_binary.py プロジェクト: twocoldz/python-elf
    def write(self):
        """ Writes the current ELF map into a file """

        filename = self.prop.filename
        if self.prop.backup:
            filename = self.prop.filename + '_mod'

        f_dst = open(filename, 'wb')
        f_dst.write('\0' * PAGESIZE)
        f_dst.close()
        self.prop.file_dst = open(filename, 'r+')
        self.prop.map_dst = mmap(self.prop.file_dst.fileno(),
                                 0,
                                 access=self.prop.mode)
        self.prop.map_dst.resize(self.size)

        ret_size = Chunk.write(self, self.prop.map_dst)

        self.prop.map_dst.close()
        self.prop.map_dst = None
        self.prop.file_dst.close()
        self.prop.file_dst = None

        return ret_size
コード例 #19
0
    def __init__(self, header, offset, size):
        """ Constructor """

        self.header = header

        Chunk.__init__(self, self.header.prop, True, offset, size, header)
コード例 #20
0
ファイル: page.py プロジェクト: sybtjp/python-elf
    def __init__(self, header, offset, size):
        """ Constructor """

        self.header = header

        Chunk.__init__(self, self.header.prop, True, offset, size, header)
コード例 #21
0
ファイル: header.py プロジェクト: twocoldz/python-elf
    def write(self, filemap=None):
        """ Writes header fields """

        self.data = self.todata()
        return Chunk.write(self, filemap)
コード例 #22
0
ファイル: header.py プロジェクト: sybtjp/python-elf
    def write(self, filemap=None):
        """ Writes header fields """

        self.data = self.todata()
        return Chunk.write(self, filemap)