def __init__(self, fname, options, custom_methods=None, **kwargs): """ Initialize a sandbox @fname: str file name @options: namespace instance of specific options @custom_methods: { str => func } for custom API implementations """ # Initialize self.fname = fname self.options = options if custom_methods is None: custom_methods = {} for cls in self.classes: if cls == Sandbox: continue if issubclass(cls, OS): cls.__init__(self, custom_methods, **kwargs) else: cls.__init__(self, **kwargs) # Logging options if self.options.singlestep: self.jitter.jit.log_mn = True self.jitter.jit.log_regs = True if not self.options.quiet_function_calls: log_func.setLevel(logging.INFO) if self.options.dumpblocs: self.jitter.jit.log_newbloc = True
def __init__(self, fname, options, custom_methods=None, **kwargs): """ Initialize a sandbox @fname: str file name @options: namespace instance of specific options @custom_methods: { str => func } for custom API implementations """ # Initialize self.fname = fname self.options = options if custom_methods is None: custom_methods = {} for cls in self.classes: if cls == Sandbox: continue if issubclass(cls, OS): cls.__init__(self, custom_methods, **kwargs) else: cls.__init__(self, **kwargs) # Logging options if self.options.singlestep: self.jitter.jit.log_mn = True self.jitter.jit.log_regs = True if not self.options.quiet_function_calls: log_func.setLevel(logging.INFO) if self.options.dumpblocs: self.jitter.jit.log_newbloc = True
# Parse arguments parser = Sandbox_Linux_x86_32.parser(description="ELF sandboxer") parser.add_argument("filename", help="ELF Filename") parser.add_argument("funcname", help="Targeted function's name") parser.add_argument("expected", help="Expected output") options = parser.parse_args() # Expected output expected = open(options.expected) # Create sandbox sb = Sandbox_Linux_x86_32(options.filename, options, globals()) try: addr = sb.elf.getsectionbyname(".symtab").symbols[options.funcname].value except AttributeError: raise RuntimeError("The target binary must have a symtab section") log_func.setLevel(logging.ERROR) # Segmentation sb.jitter.cpu.set_segm_base(8, 0x7fff0000) sb.jitter.cpu.GS = 8 sb.jitter.vm.add_memory_page(0x7fff0000 + 0x14, PAGE_READ | PAGE_WRITE, "AAAA") # Run sb.run(addr) assert (sb.jitter.run is False)
# Parse arguments parser = Sandbox_Linux_x86_32.parser(description="ELF sandboxer") parser.add_argument("filename", help="ELF Filename") parser.add_argument("funcname", help="Targeted function's name") parser.add_argument("expected", help="Expected output") options = parser.parse_args() # Expected output expected = open(options.expected) # Create sandbox sb = Sandbox_Linux_x86_32(options.filename, options, globals()) try: addr = sb.elf.getsectionbyname(".symtab").symbols[options.funcname].value except AttributeError: raise RuntimeError("The target binary must have a symtab section") log_func.setLevel(logging.ERROR) # Segmentation sb.jitter.cpu.set_segm_base(8, 0x7fff0000) sb.jitter.cpu.GS = 8 sb.jitter.vm.add_memory_page(0x7fff0000 + 0x14, PAGE_READ | PAGE_WRITE, "AAAA") # Run sb.run(addr) assert(sb.jitter.run is False)