about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--example/ida/utils.py4
-rw-r--r--miasm2/core/asmbloc.py6
-rw-r--r--miasm2/expression/expression.py10
-rw-r--r--miasm2/jitter/JitCore.c14
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)