about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--miasm2/jitter/vm_mngr_py.c21
-rw-r--r--test/jitter/vm_mngr.py26
-rw-r--r--test/test_all.py1
3 files changed, 48 insertions, 0 deletions
diff --git a/miasm2/jitter/vm_mngr_py.c b/miasm2/jitter/vm_mngr_py.c
index 5aece270..891d4459 100644
--- a/miasm2/jitter/vm_mngr_py.c
+++ b/miasm2/jitter/vm_mngr_py.c
@@ -195,6 +195,25 @@ PyObject* vm_set_mem(VmMngr* self, PyObject* args)
 
 
 
+PyObject* vm_get_mem_access(VmMngr* self, PyObject* args)
+{
+        PyObject *py_addr;
+        uint64_t page_addr;
+        struct memory_page_node * mpn;
+
+        if (!PyArg_ParseTuple(args, "O", &py_addr))
+                return NULL;
+
+        PyGetInt(py_addr, page_addr);
+
+        mpn = get_memory_page_from_address(&self->vm_mngr, page_addr, 1);
+        if (!mpn){
+                PyErr_SetString(PyExc_RuntimeError, "cannot find address");
+                return 0;
+        }
+      
+        return PyLong_FromUnsignedLongLong((uint64_t)mpn->access);
+}
 
 PyObject* vm_get_mem(VmMngr* self, PyObject* args)
 {
@@ -606,6 +625,8 @@ static PyMethodDef VmMngr_methods[] = {
 	 "X"},
 	{"add_code_bloc",(PyCFunction)vm_add_code_bloc, METH_VARARGS,
 	 "X"},
+	{"get_mem_access", (PyCFunction)vm_get_mem_access, METH_VARARGS,
+	 "X"},
 	{"get_mem", (PyCFunction)vm_get_mem, METH_VARARGS,
 	 "X"},
 	{"add_memory_page",(PyCFunction)vm_add_memory_page, METH_VARARGS,
diff --git a/test/jitter/vm_mngr.py b/test/jitter/vm_mngr.py
new file mode 100644
index 00000000..b2b7336b
--- /dev/null
+++ b/test/jitter/vm_mngr.py
@@ -0,0 +1,26 @@
+from miasm2.jitter.csts import PAGE_READ, PAGE_WRITE
+from miasm2.analysis.machine import Machine
+
+myjit = Machine("x86_32").jitter()
+
+base_addr = 0x13371337
+page_size = 0x1000
+data = "\x00" * page_size
+rights = [0, PAGE_READ, PAGE_WRITE, PAGE_READ|PAGE_WRITE]
+shuffled_rights = [PAGE_READ, 0, PAGE_READ|PAGE_WRITE, PAGE_WRITE]
+
+# Add pages
+for i, access_right in enumerate(rights):
+    myjit.vm.add_memory_page(base_addr + i * page_size, access_right, data)
+
+# Check rights
+for i, access_right in enumerate(rights):
+    assert myjit.vm.get_mem_access(base_addr + i * page_size) == access_right
+
+# Modify rights
+for i, access_right in enumerate(shuffled_rights):
+    myjit.vm.set_mem_access(base_addr + i * page_size, access_right)
+
+# Check for modification
+for i, access_right in enumerate(shuffled_rights):
+    assert myjit.vm.get_mem_access(base_addr + i * page_size) == access_right
diff --git a/test/test_all.py b/test/test_all.py
index c9401552..c3e3c1fb 100644
--- a/test/test_all.py
+++ b/test/test_all.py
@@ -319,6 +319,7 @@ for i, test_args in enumerate(test_args):
 
 ## Jitter
 for script in ["jitload.py",
+               "vm_mngr.py",
                ]:
     testset += RegressionTest([script], base_dir="jitter", tags=[TAGS["tcc"]])