diff options
| -rw-r--r-- | example/ida/utils.py | 4 | ||||
| -rw-r--r-- | miasm2/core/asmbloc.py | 6 | ||||
| -rw-r--r-- | miasm2/expression/expression.py | 10 | ||||
| -rw-r--r-- | miasm2/jitter/JitCore.c | 14 |
4 files changed, 24 insertions, 10 deletions
diff --git a/example/ida/utils.py b/example/ida/utils.py index 8a7ecccb..fa1638ab 100644 --- a/example/ida/utils.py +++ b/example/ida/utils.py @@ -56,9 +56,9 @@ def guess_machine(): elif processor_name == "msp430": machine = Machine("msp430") elif processor_name == "mipsl": - machine = Machine("mipsl") + machine = Machine("mips32l") elif processor_name == "mipsb": - machine = Machine("mipsb") + machine = Machine("mips32b") else: print repr(processor_name) raise NotImplementedError('not fully functional') diff --git a/miasm2/core/asmbloc.py b/miasm2/core/asmbloc.py index 31e4bdd7..9f67747c 100644 --- a/miasm2/core/asmbloc.py +++ b/miasm2/core/asmbloc.py @@ -203,10 +203,14 @@ class asm_bloc(object): def get_subcall_instr(self): if not self.lines: return None - for i in xrange(-1, -1 - self.lines[0].delayslot - 1, -1): + delayslot = self.lines[0].delayslot + end_index = len(self.lines) - 1 + ds_max_index = max(end_index - delayslot, 0) + for i in xrange(end_index, ds_max_index - 1, -1): l = self.lines[i] if l.is_subcall(): return l + return None def get_next(self): for x in self.bto: diff --git a/miasm2/expression/expression.py b/miasm2/expression/expression.py index ca93eb4f..46b7737e 100644 --- a/miasm2/expression/expression.py +++ b/miasm2/expression/expression.py @@ -396,7 +396,6 @@ class ExprInt(Expr): def __contains__(self, e): return self == e - @visit_chk def visit(self, cb, tv=None): return self @@ -506,7 +505,6 @@ class ExprAff(Expr): dst = property(lambda self: self._dst) src = property(lambda self: self._src) - def __str__(self): return "%s = %s" % (str(self._dst), str(self._src)) @@ -629,7 +627,7 @@ class ExprCond(Expr): src2 = self._src2.visit(cb, tv) if (cond == self._cond and src1 == self._src1 and - src2 == self._src2): + src2 == self._src2): return self return ExprCond(cond, src1, src2) @@ -798,11 +796,13 @@ class ExprOp(Expr): def __str__(self): if self.is_associative(): return '(' + self._op.join([str(arg) for arg in self._args]) + ')' + if (self._op.startswith('call_func_') or + len(self._args) > 2 or + self._op in ['parity', 'segm']): + return self._op + '(' + ', '.join([str(arg) for arg in self._args]) + ')' if len(self._args) == 2: return ('(' + str(self._args[0]) + ' ' + self.op + ' ' + str(self._args[1]) + ')') - elif len(self._args) > 2: - return self._op + '(' + ', '.join([str(arg) for arg in self._args]) + ')' else: return reduce(lambda x, y: x + ' ' + str(y), self._args, diff --git a/miasm2/jitter/JitCore.c b/miasm2/jitter/JitCore.c index 25134869..ac8a0624 100644 --- a/miasm2/jitter/JitCore.c +++ b/miasm2/jitter/JitCore.c @@ -24,7 +24,12 @@ PyObject * JitCpu_new(PyTypeObject *type, PyObject *args, PyObject *kwds) PyObject * JitCpu_get_vmmngr(JitCpu *self, void *closure) { - return self->pyvm; + if (self->pyvm) { + Py_INCREF(self->pyvm); + return self->pyvm; + } + Py_INCREF(Py_None); + return Py_None; } PyObject * JitCpu_set_vmmngr(JitCpu *self, PyObject *value, void *closure) @@ -35,7 +40,12 @@ PyObject * JitCpu_set_vmmngr(JitCpu *self, PyObject *value, void *closure) PyObject * JitCpu_get_jitter(JitCpu *self, void *closure) { - return self->jitter; + if (self->jitter) { + Py_INCREF(self->jitter); + return self->jitter; + } + Py_INCREF(Py_None); + return Py_None; } PyObject * JitCpu_set_jitter(JitCpu *self, PyObject *value, void *closure) |