diff options
| author | serpilliere <devnull@localhost> | 2012-03-01 10:49:59 +0100 |
|---|---|---|
| committer | serpilliere <devnull@localhost> | 2012-03-01 10:49:59 +0100 |
| commit | 8303a3da321bdc39460b2a974fab80f5ddab4df0 (patch) | |
| tree | 91429e02f31ed5d94b3fe959768c26496b6c96d7 /miasm/tools/emul_lib/libcodenat_interface.c | |
| parent | 4456f0eb29d80e03a86d46098813178963f51d45 (diff) | |
| download | miasm-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.c | 73 |
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 */ }; |