def do_memprotect(self, line): """ Change the memory permissions of a given page/map. Usage: memprotect [options] <addr_expr> <perms> -S <size> Specify the size of the region to change (default == whole memory map) <perms> = "rwx" string "rw", "rx" "rwx" etc... """ if len(line) == 0: return self.do_help("memprotect") size = None argv = splitargs(line) try: opts, args = getopt(argv, "S:") except Exception as e: return self.do_help("memprotect") for opt, optarg in opts: if opt == "-S": size = self.parseExpression(optarg) if len(args) != 2: return self.do_help("memprotect") addr = self.parseExpression(args[0]) perm = e_mem.parsePerms(args[1]) if size is None: map = self.memobj.getMemoryMap(addr) if map is None: raise Exception("Unknown memory map for 0x%.8x" % addr) size = map[1] self.memobj.protectMemory(addr, size, perm)
class EnviMutableCli(EnviCli): """ Cli extensions which require a mutable memory object (emulator/trace) rather than a static one (viv workspace) """ def do_memcpy(self, line): ''' Copy memory from one location to another... Usage: memcpy <dest_expr> <src_expr> <size_expr> ''' argv = splitargs(line) if len(argv) != 3: return self.do_help('memcpy') dst = self.parseExpression(argv[0]) src = self.parseExpression(argv[1]) siz = self.parseExpression(argv[2]) mem = self.memobj.readMemory(src, siz) self.memobj.writeMemory(dst, mem) def do_memprotect(self, line): """ Change the memory permissions of a given page/map. Usage: memprotect [options] <addr_expr> <perms> -S <size> Specify the size of the region to change (default == whole memory map) <perms> = "rwx" string "rw", "rx" "rwx" etc... """ if len(line) == 0: return self.do_help("memprotect") size = None argv = splitargs(line) try: opts, args = getopt(argv, "S:") except Exception, e: return self.do_help("memprotect") for opt,optarg in opts: if opt == "-S": size = self.parseExpression(optarg) if len(args) != 2: return self.do_help("memprotect") addr = self.parseExpression(args[0]) perm = e_mem.parsePerms(args[1]) if size == None: map = self.memobj.getMemoryMap(addr) if map == None: raise Exception("Unknown memory map for 0x%.8x" % addr) size = map[1] self.memobj.protectMemory(addr, size, perm)