about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--miasm2/ir/translators/C.py14
-rw-r--r--miasm2/jitter/vm_mngr.c92
-rw-r--r--miasm2/jitter/vm_mngr.h2
-rw-r--r--miasm2/jitter/vm_mngr_py.c38
-rw-r--r--test/ir/ir2C.py4
5 files changed, 9 insertions, 141 deletions
diff --git a/miasm2/ir/translators/C.py b/miasm2/ir/translators/C.py
index 72759900..a7ba1a20 100644
--- a/miasm2/ir/translators/C.py
+++ b/miasm2/ir/translators/C.py
@@ -18,13 +18,9 @@ class TranslatorC(Translator):
     dct_rot = {'<<<': 'rot_left',
                '>>>': 'rot_right',
                }
-    dct_div = {'div8': "div_op",
-               'div16': "div_op",
-               'div32': "div_op",
-               'idiv32': "div_op",  # XXX to test
-               '<<<c_rez': 'rcl_rez_op',
-               '>>>c_rez': 'rcr_rez_op',
-               }
+    dct_rotc = {'<<<c_rez': 'rcl_rez_op',
+                '>>>c_rez': 'rcr_rez_op',
+                }
 
 
     def from_ExprId(self, expr):
@@ -120,8 +116,8 @@ class TranslatorC(Translator):
             else:
                 raise NotImplementedError('Unknown op: %r' % expr.op)
 
-        elif len(expr.args) == 3 and expr.op in self.dct_div:
-            return '(%s(%s, %s, %s, %s) &0x%x)' % (self.dct_div[expr.op],
+        elif len(expr.args) == 3 and expr.op in self.dct_rotc:
+            return '(%s(%s, %s, %s, %s) &0x%x)' % (self.dct_rotc[expr.op],
                                                    expr.args[0].size,
                                                    self.from_expr(expr.args[0]),
                                                    self.from_expr(expr.args[1]),
diff --git a/miasm2/jitter/vm_mngr.c b/miasm2/jitter/vm_mngr.c
index 414cdc68..b86bee1a 100644
--- a/miasm2/jitter/vm_mngr.c
+++ b/miasm2/jitter/vm_mngr.c
@@ -76,37 +76,7 @@ void print_val(uint64_t base, uint64_t addr)
 	fprintf(stderr, "addr 0x%"PRIX64" val 0x%"PRIX64"\n", addr-base, *ptr);
 }
 
-
-int is_mem_mapped(vm_mngr_t* vm_mngr, uint64_t ad)
-{
-	struct memory_page_node * mpn;
-	int i;
-	for (i=0; i < vm_mngr->memory_pages_number; i++) {
-		mpn = &vm_mngr->memory_pages_array[i];
-		if ((mpn->ad <= ad)  && (ad <mpn->ad + mpn->size))
-			return 1;
-	}
-
-	return 0;
-}
-
-
-/* Return the address base of the memory page containing addr */
-uint64_t get_mem_base_addr(vm_mngr_t* vm_mngr, uint64_t ad, uint64_t *addr_base)
-{
-	struct memory_page_node * mpn;
-	int i;
-	for (i=0; i < vm_mngr->memory_pages_number; i++) {
-		mpn = &vm_mngr->memory_pages_array[i];
-		if ((mpn->ad <= ad)  && (ad <mpn->ad + mpn->size)) {
-			*addr_base = mpn->ad;
-			return 1;
-		}
-	}
-	return 0;
-}
-
-int midpoint(int imin, int imax)
+inline int midpoint(int imin, int imax)
 {
 	return (imin + imax) / 2;
 }
@@ -694,39 +664,6 @@ unsigned int umul16_hi(unsigned short a, unsigned short b)
 	return (c>>16) & 0xffff;
 }
 
-
-
-
-unsigned int div_op(unsigned int size, unsigned int a, unsigned int b, unsigned int c)
-{
-    int64_t num;
-    if (c == 0)
-    {
-	    //vmmngr.exception_flags |= EXCEPT_INT_DIV_BY_ZERO;
-	    return 0;
-    }
-    num = ((int64_t)a << size) + b;
-    num/=(int64_t)c;
-    return num;
-}
-
-
-unsigned int rem_op(unsigned int size, unsigned int a, unsigned int b, unsigned int c)
-{
-    int64_t num;
-
-    if (c == 0)
-    {
-	    //vmmngr.exception_flags |= EXCEPT_INT_DIV_BY_ZERO;
-	    return 0;
-    }
-
-    num = ((int64_t)a << size) + b;
-    num = (int64_t)num-c*(num/c);
-    return num;
-}
-
-
 uint64_t rot_left(uint64_t size, uint64_t a, uint64_t b)
 {
     uint64_t tmp;
@@ -1448,7 +1385,7 @@ void reset_memory_breakpoint(vm_mngr_t* vm_mngr)
 
 }
 
-
+/* We don't use dichotomy here for the insertion */
 int is_mpn_in_tab(vm_mngr_t* vm_mngr, struct memory_page_node* mpn_a)
 {
 	struct memory_page_node * mpn;
@@ -1472,6 +1409,8 @@ int is_mpn_in_tab(vm_mngr_t* vm_mngr, struct memory_page_node* mpn_a)
 	return 0;
 }
 
+
+/* We don't use dichotomy here for the insertion */
 void add_memory_page(vm_mngr_t* vm_mngr, struct memory_page_node* mpn_a)
 {
 	struct memory_page_node * mpn;
@@ -1578,29 +1517,6 @@ void remove_memory_breakpoint(vm_mngr_t* vm_mngr, uint64_t ad, unsigned int acce
 }
 
 
-
-
-
-
-
-unsigned int get_memory_page_next(vm_mngr_t* vm_mngr, unsigned int n_ad)
-{
-	struct memory_page_node * mpn;
-	uint64_t ad = 0;
-	int i;
-
-	for (i=0; i < vm_mngr->memory_pages_number; i++) {
-		mpn = &vm_mngr->memory_pages_array[i];
-		if (mpn->ad < n_ad)
-			continue;
-
-		if (ad == 0 || mpn->ad <ad)
-			ad = mpn->ad;
-	}
-	return ad;
-}
-
-
 /********************************************/
 
 void hexdump(char* m, unsigned int l)
diff --git a/miasm2/jitter/vm_mngr.h b/miasm2/jitter/vm_mngr.h
index 93566987..02b5de73 100644
--- a/miasm2/jitter/vm_mngr.h
+++ b/miasm2/jitter/vm_mngr.h
@@ -196,8 +196,6 @@ unsigned int umul16_lo(unsigned short a, unsigned short b);
 unsigned int umul16_hi(unsigned short a, unsigned short b);
 
 
-unsigned int div_op(unsigned int size, unsigned int a, unsigned int b, unsigned int c);
-unsigned int rem_op(unsigned int size, unsigned int a, unsigned int b, unsigned int c);
 uint64_t rot_left(uint64_t size, uint64_t a, uint64_t b);
 uint64_t rot_right(uint64_t size, uint64_t a, uint64_t b);
 unsigned int rcl_rez_op(unsigned int size, unsigned int a, unsigned int b, unsigned int cf);
diff --git a/miasm2/jitter/vm_mngr_py.c b/miasm2/jitter/vm_mngr_py.c
index 8f7c4b6b..0a22c397 100644
--- a/miasm2/jitter/vm_mngr_py.c
+++ b/miasm2/jitter/vm_mngr_py.c
@@ -66,44 +66,6 @@ PyObject* _vm_get_exception(unsigned int xcpt)
 		RAISE(PyExc_TypeError,"arg must be int");		\
 	}								\
 
-
-PyObject* vm_is_mem_mapped(VmMngr* self, PyObject* item)
-{
-	PyObject *addr;
-	uint64_t page_addr;
-	uint32_t ret;
-	if (!PyArg_ParseTuple(item, "O", &addr))
-		return NULL;
-
-	PyGetInt(addr, page_addr);
-
-	ret = is_mem_mapped(&self->vm_mngr, page_addr);
-	return PyInt_FromLong((long)ret);
-}
-
-
-
-PyObject* vm_get_mem_base_addr(VmMngr* self, PyObject* item)
-{
-	PyObject *addr;
-
-	uint64_t page_addr;
-	uint64_t addr_base;
-	unsigned int ret;
-
-	if (!PyArg_ParseTuple(item, "O", &addr))
-		return NULL;
-
-	PyGetInt(addr, page_addr);
-
-	ret = get_mem_base_addr(&self->vm_mngr, page_addr, &addr_base);
-	if (ret == 0){
-		Py_INCREF(Py_None);
-		return Py_None;
-	}
-	return PyLong_FromUnsignedLongLong((uint64_t)addr_base);
-}
-
 static void sig_alarm(int signo)
 {
 	global_vmmngr->vm_mngr.exception_flags |= BREAK_SIGALARM;
diff --git a/test/ir/ir2C.py b/test/ir/ir2C.py
index 8a5f97c4..36683904 100644
--- a/test/ir/ir2C.py
+++ b/test/ir/ir2C.py
@@ -54,10 +54,6 @@ class TestIrIr2C(unittest.TestCase):
         self.assertRaises(NotImplementedError, translator.from_expr,
                           ExprOp('X', *args[:2]))
 
-        # Ternary operators
-        self.translationTest(
-            ExprOp('div8',    *args[:3]), r'(div_op(32, 0x0, 0x1, 0x2) &0xffffffff)')
-
         # Other cases
         self.translationTest(
             ExprOp('+',       *args[:3]), r'(((0x0&0xffffffff)+(0x1&0xffffffff)+(0x2&0xffffffff))&0xffffffff)')