diff options
| author | serpilliere <serpilliere@users.noreply.github.com> | 2016-02-16 16:36:43 +0100 |
|---|---|---|
| committer | serpilliere <serpilliere@users.noreply.github.com> | 2016-02-16 16:36:43 +0100 |
| commit | 91e9abd906c0a9f5b43bad5b9789ffa1b054f6fe (patch) | |
| tree | 30f32695bc995a4cd56f902313aad3a1d4a411f4 /miasm2/jitter/jitload.py | |
| parent | 2cf69707481ba4b0dd163b49d99bc9a021162944 (diff) | |
| parent | 052c02757c8c7aecabb9d86c30dfd672e46ccfa4 (diff) | |
| download | miasm-91e9abd906c0a9f5b43bad5b9789ffa1b054f6fe.tar.gz miasm-91e9abd906c0a9f5b43bad5b9789ffa1b054f6fe.zip | |
Merge pull request #325 from commial/jitter-symbexec
Eval_Expr in jitter context
Diffstat (limited to 'miasm2/jitter/jitload.py')
| -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 |