コード例 #1
0
    def _make_mmap_with_values(self, intervals, struct_offset=None):
        """
         Make a memory map, with a fake structure of pointer pattern inside.
        Return the pattern signature

        :param intervals:
        :param struct_offset:
        :return:
        """
        # template of a memory map metadata
        self._mstart = 0x0C00000
        self._mlength = 4096  # end at (0x0c01000)
        # could be 8, it doesn't really matter
        self.word_size = self.target.get_word_size()
        if struct_offset is not None:
            self._struct_offset = struct_offset
        else:
            self._struct_offset = self.word_size * 12  # 12, or any other aligned
        mmap, values = self._make_mmap(0x0C00000, 4096, self._struct_offset, intervals, self.word_size)
        # add a reference to mmap in mmap2
        ammap2 = AMemoryMapping(0xFF7DC000, 0xFF7DC000 + 0x1000, "-rwx", 0, 0, 0, 0, "test_mmap2")
        ammap2.set_ctypes(self.target.get_target_ctypes())
        mmap2 = LocalMemoryMapping.fromBytebuffer(ammap2, mmap.get_byte_buffer())
        self._memory_handler = MemoryHandler([mmap, mmap2], self.target, "test")
        self.mmap2 = mmap2
        return mmap, values
コード例 #2
0
    def _make_mmap_with_values(self, intervals, struct_offset=None):
        """
         Make a memory map, with a fake structure of pointer pattern inside.
        Return the pattern signature

        :param intervals:
        :param struct_offset:
        :return:
        """
        # template of a memory map metadata
        self._mstart = 0x0c00000
        self._mlength = 4096  # end at (0x0c01000)
        # could be 8, it doesn't really matter
        self.word_size = self.target.get_word_size()
        if struct_offset is not None:
            self._struct_offset = struct_offset
        else:
            self._struct_offset = self.word_size * 12  # 12, or any other aligned
        mmap, values = self._make_mmap(0x0c00000, 4096, self._struct_offset,
                                       intervals, self.word_size)
        # add a reference to mmap in mmap2
        ammap2 = AMemoryMapping(0xff7dc000, 0xff7dc000 + 0x1000, '-rwx', 0, 0,
                                0, 0, 'test_mmap2')
        ammap2.set_ctypes(self.target.get_target_ctypes())
        mmap2 = LocalMemoryMapping.fromBytebuffer(ammap2,
                                                  mmap.get_byte_buffer())
        self._memory_handler = MemoryHandler([mmap, mmap2], self.target,
                                             'test')
        self.mmap2 = mmap2
        return mmap, values
コード例 #3
0
    def _make_mmap(self, mstart, mlength, struct_offset, seq, word_size):
        """
        Create memory mapping with some pointer values at specific
        intervals.
        :param mstart:
        :param mlength:
        :param struct_offset:
        :param seq:
        :param word_size:
        :return:
        """
        nsig = [struct_offset]
        nsig.extend(seq)
        # rewrite intervals indices to offsets from start
        indices = [i for i in self._accumulate(nsig)]
        dump = []  # b''
        values = []
        fmt = self.target.get_word_type_char()
        # write a memory map with valid pointer address in specifics offsets.
        for i in range(0, mlength, word_size):
            if i in indices:
                log.debug('Insert word %x at 0x%x',mstart + i,mstart + i)
                dump.append(struct.pack(fmt, mstart + i))
                values.append(mstart + i)
            else:
                dump.append(struct.pack(fmt, 0x2e2e2e2e2e2e2e2e))

        if len(dump) != mlength / word_size:
            raise ValueError('error 1 on length dump %d ' % (len(dump)))
        dump2 = ''.join(dump)
        if len(dump) * word_size != len(dump2):
            print dump
            raise ValueError(
                'error 2 on length dump %d dump2 %d' %
                (len(dump), len(dump2)))
        stop = mstart + len(dump2)
        mmap = AMemoryMapping(mstart, stop, '-rwx', 0, 0, 0, 0, 'test_mmap')
        mmap.set_ctypes(self.target.get_target_ctypes())
        mmap2 = LocalMemoryMapping.fromBytebuffer(mmap, dump2)
        # mmap2.set_ctypes(self.target.get_target_ctypes())
        return mmap2, values
コード例 #4
0
    def _make_mmap(self, mstart, mlength, struct_offset, seq, word_size):
        """
        Create memory mapping with some pointer values at specific
        intervals.
        :param mstart:
        :param mlength:
        :param struct_offset:
        :param seq:
        :param word_size:
        :return:
        """
        nsig = [struct_offset]
        nsig.extend(seq)
        # rewrite intervals indices to offsets from start
        indices = [i for i in self._accumulate(nsig)]
        dump = []  # b''
        values = []
        fmt = self.target.get_word_type_char()
        # write a memory map with valid pointer address in specifics offsets.
        for i in range(0, mlength, word_size):
            if i in indices:
                log.debug('Insert word %x at 0x%x',mstart + i,mstart + i)
                dump.append(struct.pack(fmt, mstart + i))
                values.append(mstart + i)
            else:
                dump.append(struct.pack(fmt, 0x2e2e2e2e2e2e2e2e))

        if len(dump) != mlength // word_size:
            raise ValueError('error 1 on length dump %d ' % (len(dump)))
        dump2 = b''.join(dump)
        if len(dump) * word_size != len(dump2):
            print(dump)
            raise ValueError(
                'error 2 on length dump %d dump2 %d' %
                (len(dump), len(dump2)))
        stop = mstart + len(dump2)
        mmap = AMemoryMapping(mstart, stop, '-rwx', 0, 0, 0, 0, 'test_mmap')
        mmap.set_ctypes(self.target.get_target_ctypes())
        mmap2 = LocalMemoryMapping.fromBytebuffer(mmap, dump2)
        # mmap2.set_ctypes(self.target.get_target_ctypes())
        return mmap2, values