diff options
| author | Ajax <commial@gmail.com> | 2016-02-16 08:24:00 +0100 |
|---|---|---|
| committer | Ajax <commial@gmail.com> | 2016-02-16 08:24:25 +0100 |
| commit | 445cf4b1d852f99974a727bdb6031af338ebd399 (patch) | |
| tree | 61a68383037a54743870df03a045e0f73b89f163 | |
| parent | e776c817169873b36293d8f7679234a2c179f193 (diff) | |
| download | miasm-445cf4b1d852f99974a727bdb6031af338ebd399.tar.gz miasm-445cf4b1d852f99974a727bdb6031af338ebd399.zip | |
Introduce jitter.eval_expr() to interact with jitter through Miasm IR
| -rw-r--r-- | miasm2/jitter/jitload.py | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/miasm2/jitter/jitload.py b/miasm2/jitter/jitload.py index 9a4b4ff4..aeb917d8 100644 --- a/miasm2/jitter/jitload.py +++ b/miasm2/jitter/jitload.py @@ -9,6 +9,7 @@ from miasm2.core.utils import * from miasm2.core.bin_stream import bin_stream_vm from miasm2.ir.ir2C import init_arch_C from miasm2.core.interval import interval +from miasm2.jitter.emulatedsymbexec import EmulatedSymbExec hnd = logging.StreamHandler() hnd.setFormatter(logging.Formatter("[%(levelname)s]: %(message)s")) @@ -201,11 +202,13 @@ class jitter: self.vm = VmMngr.Vm() self.cpu = jcore.JitCpu() - - self.bs = bin_stream_vm(self.vm) self.ir_arch = ir_arch + self.bs = bin_stream_vm(self.vm) init_arch_C(self.arch) + self.symbexec = EmulatedSymbExec(self.cpu, self.ir_arch, {}) + self.symbexec.reset_regs() + if jit_type == "tcc": self.jit = JitCore_Tcc(self.ir_arch, self.bs) elif jit_type == "llvm": @@ -443,3 +446,12 @@ class jitter: for f_addr in libs.fad2cname: self.handle_function(f_addr) + + def eval_expr(self, expr): + """Eval expression @expr in the context of the current instance. Side + effects are passed on it""" + self.symbexec.update_engine_from_cpu() + ret = self.symbexec.apply_expr(expr) + self.symbexec.update_cpu_from_engine() + + return ret |