PyObject* vm_set_mem_access(VmMngr* self, PyObject* args) { PyObject *addr; PyObject *access; uint64_t page_addr; uint64_t page_access; struct memory_page_node * mpn; if (!PyArg_ParseTuple(args, "OO", &addr, &access)) RAISE(PyExc_TypeError,"Cannot parse arguments"); PyGetInt_uint64_t(addr, page_addr); PyGetInt_uint64_t(access, page_access); mpn = get_memory_page_from_address(&self->vm_mngr, page_addr, 1); if (!mpn){ PyErr_SetString(PyExc_RuntimeError, "cannot find address"); return 0; } mpn->access = page_access; Py_INCREF(Py_None); return Py_None; }
PyObject* vm_set_mem_access(VmMngr* self, PyObject* args) { PyObject *addr; PyObject *access; uint64_t ret = 0x1337beef; uint64_t page_addr; uint64_t page_access; struct memory_page_node * mpn; if (!PyArg_ParseTuple(args, "OO", &addr, &access)) return NULL; PyGetInt(addr, page_addr); PyGetInt(access, page_access); mpn = get_memory_page_from_address(&self->vm_mngr, page_addr); if (!mpn){ PyErr_SetString(PyExc_RuntimeError, "cannot find address"); return 0; } mpn->access = page_access; return PyLong_FromUnsignedLongLong((uint64_t)ret); }
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)) RAISE(PyExc_TypeError,"Cannot parse arguments"); PyGetInt_uint64_t(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); }