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
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
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
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