def test_boundedDict(self): from miasm2.core.utils import BoundedDict # Use a callback def logger(key): print "DELETE", key # Create a 5/2 dictionnary bd = BoundedDict(5, 2, initialdata={"element": "value"}, delete_cb=logger) bd["element2"] = "value2" assert("element" in bd) assert("element2" in bd) self.assertEqual(bd["element"], "value") self.assertEqual(bd["element2"], "value2") # Increase 'element2' use _ = bd["element2"] for i in xrange(6): bd[i] = i print "Insert %d -> %s" % (i, bd) assert(len(bd) == 2) assert("element2" in bd) self.assertEqual(bd["element2"], "value2")
def __init__(self, ir_arch, bs=None): """Initialise a JitCore instance. @ir_arch: ir instance for current architecture @bs: bitstream """ self.ir_arch = ir_arch self.bs = bs self.known_blocs = {} self.lbl2jitbloc = BoundedDict(self.jitted_block_max_size, delete_cb=self.jitted_block_delete_cb) self.lbl2bloc = {} self.log_mn = False self.log_regs = False self.log_newbloc = False self.segm_to_do = set() self.job_done = set() self.jitcount = 0 self.addr2obj = {} self.addr2objref = {} self.blocs_mem_interval = interval() self.disasm_cb = None self.split_dis = set() self.options = {"jit_maxline": 50, # Maximum number of line jitted "max_exec_per_call": 0 # 0 means no limit } self.mdis = asmblock.disasmEngine(ir_arch.arch, ir_arch.attrib, bs, lines_wd=self.options["jit_maxline"], symbol_pool=ir_arch.symbol_pool, follow_call=False, dontdis_retcall=False, split_dis=self.split_dis, dis_bloc_callback=self.disasm_cb)
def __init__(self, ir_arch, bs=None): """Initialise a JitCore instance. @ir_arch: ir instance for current architecture @bs: bitstream """ self.ir_arch = ir_arch self.bs = bs self.known_blocs = {} self.lbl2jitbloc = BoundedDict(self.jitted_block_max_size, delete_cb=self.jitted_block_delete_cb) self.lbl2bloc = {} self.log_mn = False self.log_regs = False self.log_newbloc = False self.segm_to_do = set() self.job_done = set() self.jitcount = 0 self.addr2obj = {} self.addr2objref = {} self.blocs_mem_interval = interval() self.disasm_cb = None self.split_dis = set() self.options = { "jit_maxline": 50 # Maximum number of line jitted }
def __init__(self, ir_arch, bin_stream): """Initialise a JitCore instance. @ir_arch: ir instance for current architecture @bin_stream: bin_stream instance """ # Arch related self.ir_arch = ir_arch self.ircfg = self.ir_arch.new_ircfg() self.arch_name = "%s%s" % (self.ir_arch.arch.name, self.ir_arch.attrib) # Structures for block tracking self.offset_to_jitted_func = BoundedDict( self.jitted_block_max_size, delete_cb=self.jitted_block_delete_cb) self.loc_key_to_block = {} self.blocks_mem_interval = interval() # Logging & options self.log_mn = False self.log_regs = False self.log_newbloc = False self.options = { "jit_maxline": 50, # Maximum number of line jitted "max_exec_per_call": 0 # 0 means no limit } # Disassembly Engine self.split_dis = set() self.mdis = disasmEngine( ir_arch.arch, ir_arch.attrib, bin_stream, lines_wd=self.options["jit_maxline"], loc_db=ir_arch.loc_db, follow_call=False, dontdis_retcall=False, split_dis=self.split_dis, )
def __init__(self, cache_size=1000): """Instance a translator @cache_size: (optional) Expr cache size """ self._cache = BoundedDict(cache_size)