diff options
| author | Ajax <commial@gmail.com> | 2016-03-23 12:52:14 +0100 |
|---|---|---|
| committer | Ajax <commial@gmail.com> | 2016-03-23 12:52:14 +0100 |
| commit | 00c4f9f0a9d9ba321f848b04e6fa17713db668c3 (patch) | |
| tree | b2b67cb0984c15b70440c282409b84fed59255b5 /miasm2/jitter/jitcore.py | |
| parent | 7db1937bc29d8e7c1b132d3313f28ada8927e236 (diff) | |
| download | miasm-00c4f9f0a9d9ba321f848b04e6fa17713db668c3.tar.gz miasm-00c4f9f0a9d9ba321f848b04e6fa17713db668c3.zip | |
JitCore: use the disasmEngine instead f a direct call to dis_bloc internals
Diffstat (limited to 'miasm2/jitter/jitcore.py')
| -rw-r--r-- | miasm2/jitter/jitcore.py | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/miasm2/jitter/jitcore.py b/miasm2/jitter/jitcore.py index c014b7d2..9cccdeff 100644 --- a/miasm2/jitter/jitcore.py +++ b/miasm2/jitter/jitcore.py @@ -56,6 +56,15 @@ class JitCore(object): self.options = {"jit_maxline": 50 # Maximum number of line jitted } + self.mdis = asmbloc.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 set_options(self, **kwargs): "Set options relative to the backend" @@ -120,19 +129,14 @@ class JitCore(object): if isinstance(addr, asmbloc.asm_label): addr = addr.offset - label = self.ir_arch.symbol_pool.getby_offset_create(addr) + # Prepare disassembler + self.mdis.job_done.clear() + self.mdis.lines_wd = self.options["jit_maxline"] + self.mdis.dis_bloc_callback = self.disasm_cb # Disassemble it try: - cur_bloc, _ = asmbloc.dis_bloc(self.ir_arch.arch, self.bs, label, - addr, set(), - self.ir_arch.symbol_pool, [], - follow_call=False, - dontdis_retcall=False, - lines_wd=self.options["jit_maxline"], - # max 10 asm lines - attrib=self.ir_arch.attrib, - split_dis=self.split_dis) + cur_bloc = self.mdis.dis_bloc(addr) except IOError: # vm_exception_flag is set cur_bloc = asmbloc.asm_bloc(label) @@ -140,15 +144,13 @@ class JitCore(object): # Logging if self.log_newbloc: print cur_bloc - if self.disasm_cb is not None: - self.disasm_cb(cur_bloc) # Check for empty blocks if not cur_bloc.lines: raise ValueError("Cannot JIT a block without any assembly line") # Update label -> bloc - self.lbl2bloc[label] = cur_bloc + self.lbl2bloc[cur_bloc.label] = cur_bloc # Store min/max bloc address needed in jit automod code self.get_bloc_min_max(cur_bloc) |