about summary refs log tree commit diff stats
path: root/miasm/tools/emul_lib/libcodenat_interface.c
diff options
context:
space:
mode:
authorserpilliere <devnull@localhost>2012-03-01 10:49:59 +0100
committerserpilliere <devnull@localhost>2012-03-01 10:49:59 +0100
commit8303a3da321bdc39460b2a974fab80f5ddab4df0 (patch)
tree91429e02f31ed5d94b3fe959768c26496b6c96d7 /miasm/tools/emul_lib/libcodenat_interface.c
parent4456f0eb29d80e03a86d46098813178963f51d45 (diff)
downloadmiasm-8303a3da321bdc39460b2a974fab80f5ddab4df0.tar.gz
miasm-8303a3da321bdc39460b2a974fab80f5ddab4df0.zip
libcodenat: add is_mem_mapped; get_mem_base_addr
Diffstat (limited to '')
-rw-r--r--miasm/tools/emul_lib/libcodenat_interface.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/miasm/tools/emul_lib/libcodenat_interface.c b/miasm/tools/emul_lib/libcodenat_interface.c
index 7348ff00..565bf8c9 100644
--- a/miasm/tools/emul_lib/libcodenat_interface.c
+++ b/miasm/tools/emul_lib/libcodenat_interface.c
@@ -79,6 +79,74 @@ PyObject* _vm_get_all_memory(void)
 }
 
 
+
+PyObject* _vm_is_mem_mapped(PyObject* item)
+{
+    unsigned int page_addr;
+    unsigned int ret;
+    if (PyInt_Check(item)){
+	    page_addr = (unsigned int)PyInt_AsLong(item);
+    }
+    else if (PyLong_Check(item)){
+	    page_addr = (unsigned int)PyInt_AsUnsignedLongLongMask(item);
+    }
+    else{
+	    RAISE(PyExc_TypeError,"arg1 must be int");
+    }
+
+    ret = is_mem_mapped(page_addr);
+    return PyInt_FromLong((long)ret);
+
+}
+
+PyObject* vm_is_mem_mapped(PyObject* self, PyObject* args)
+{
+	PyObject *addr;
+	PyObject *p;
+
+	if (!PyArg_ParseTuple(args, "O", &addr))
+		return NULL;
+	p = _vm_is_mem_mapped(addr);
+	return p;
+}
+
+
+PyObject* _vm_get_mem_base_addr(PyObject* item)
+{
+    unsigned int page_addr;
+    uint64_t addr_base;
+    unsigned int ret;
+    if (PyInt_Check(item)){
+	    page_addr = (unsigned int)PyInt_AsLong(item);
+    }
+    else if (PyLong_Check(item)){
+	    page_addr = (unsigned int)PyInt_AsUnsignedLongLongMask(item);
+    }
+    else{
+	    RAISE(PyExc_TypeError,"arg1 must be int");
+    }
+
+    ret = get_mem_base_addr(page_addr, &addr_base);
+    if (ret == 0){
+	    Py_INCREF(Py_None);
+	    return Py_None;
+    }
+    return PyInt_FromLong((long)addr_base);
+}
+
+
+PyObject* vm_get_mem_base_addr(PyObject* self, PyObject* args)
+{
+	PyObject *addr;
+	PyObject *p;
+
+	if (!PyArg_ParseTuple(args, "O", &addr))
+		return NULL;
+	p = _vm_get_mem_base_addr(addr);
+	return p;
+}
+
+
 PyObject* _vm_get_gpreg(void)
 {
     PyObject *dict = PyDict_New();
@@ -1357,6 +1425,11 @@ static PyMethodDef CodenatMethods[] = {
     {"vm_set_segm_base",vm_set_segm_base, METH_VARARGS,
      "X"},
 
+    {"vm_is_mem_mapped",vm_is_mem_mapped, METH_VARARGS,
+     "X"},
+    {"vm_get_mem_base_addr",vm_get_mem_base_addr, METH_VARARGS,
+     "X"},
+
     {NULL, NULL, 0, NULL}        /* Sentinel */
 
 };