diff options
| author | Camille Mougey <commial@gmail.com> | 2016-09-01 11:09:21 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-09-01 11:09:21 +0200 |
| commit | 9f135c02e9bce299a700fa0191388542d141ea22 (patch) | |
| tree | d8ad86407e24ae9435ca4ca344ae7ec61e8568d2 /miasm2/jitter/vm_mngr_py.c | |
| parent | fb7501f4bb0bc77a0262ad4894732e4de6ccb2b2 (diff) | |
| parent | 2858e916f35f0469baeea23632ddd8befdd7ca5d (diff) | |
| download | miasm-9f135c02e9bce299a700fa0191388542d141ea22.tar.gz miasm-9f135c02e9bce299a700fa0191388542d141ea22.zip | |
Merge pull request #411 from serpilliere/fix_memory_breakpoint
Fix memory breakpoint
Diffstat (limited to 'miasm2/jitter/vm_mngr_py.c')
| -rw-r--r-- | miasm2/jitter/vm_mngr_py.c | 94 |
1 files changed, 80 insertions, 14 deletions
diff --git a/miasm2/jitter/vm_mngr_py.c b/miasm2/jitter/vm_mngr_py.c index 9e370465..5aece270 100644 --- a/miasm2/jitter/vm_mngr_py.c +++ b/miasm2/jitter/vm_mngr_py.c @@ -186,7 +186,8 @@ PyObject* vm_set_mem(VmMngr* self, PyObject* args) if (ret < 0) RAISE(PyExc_TypeError, "Error in set_mem"); - check_write_code_bloc(&self->vm_mngr, size*8, addr); + add_mem_write(&self->vm_mngr, addr, size); + check_invalid_code_blocs(&self->vm_mngr); Py_INCREF(Py_None); return Py_None; @@ -320,6 +321,63 @@ PyObject* vm_reset_memory_breakpoint(VmMngr* self, PyObject* args) } +PyObject* vm_reset_memory_access(VmMngr* self, PyObject* args) +{ + reset_memory_access(&self->vm_mngr); + Py_INCREF(Py_None); + return Py_None; +} + +PyObject* py_add_mem_read(VmMngr* self, PyObject* args) +{ + PyObject *py_addr; + PyObject *py_size; + uint64_t addr; + uint64_t size; + + if (!PyArg_ParseTuple(args, "OO", &py_addr, &py_size)) + return NULL; + + PyGetInt(py_addr, addr); + PyGetInt(py_size, size); + add_mem_read(&self->vm_mngr, addr, size); + Py_INCREF(Py_None); + return Py_None; + +} + +PyObject* py_add_mem_write(VmMngr* self, PyObject* args) +{ + PyObject *py_addr; + PyObject *py_size; + uint64_t addr; + uint64_t size; + + if (!PyArg_ParseTuple(args, "OO", &py_addr, &py_size)) + return NULL; + + PyGetInt(py_addr, addr); + PyGetInt(py_size, size); + add_mem_write(&self->vm_mngr, addr, size); + Py_INCREF(Py_None); + return Py_None; + +} + +PyObject* vm_check_invalid_code_blocs(VmMngr* self, PyObject* args) +{ + check_invalid_code_blocs(&self->vm_mngr); + Py_INCREF(Py_None); + return Py_None; +} + +PyObject* vm_check_memory_breakpoint(VmMngr* self, PyObject* args) +{ + check_memory_breakpoint(&self->vm_mngr); + Py_INCREF(Py_None); + return Py_None; +} + PyObject *vm_dump(PyObject* self) { char* buf_final; @@ -460,26 +518,24 @@ PyObject* vm_is_mapped(VmMngr* self, PyObject* args) return PyLong_FromUnsignedLongLong((uint64_t)ret); } -PyObject* vm_reset_code_bloc_write(VmMngr* self, PyObject* args) +PyObject* vm_get_memory_read(VmMngr* self, PyObject* args) { - reset_code_bloc_write(&self->vm_mngr); - Py_INCREF(Py_None); - return Py_None; + PyObject* result; + result = get_memory_read(&self->vm_mngr); + Py_INCREF(result); + return result; } -PyObject* vm_get_code_bloc_write(VmMngr* self, PyObject* args) +PyObject* vm_get_memory_write(VmMngr* self, PyObject* args) { PyObject* result; - - result = get_code_bloc_write(&self->vm_mngr); + result = get_memory_write(&self->vm_mngr); Py_INCREF(result); - return result; } - static PyObject * vm_set_big_endian(VmMngr *self, PyObject *value, void *closure) { @@ -548,8 +604,6 @@ static PyMethodDef VmMngr_methods[] = { "X"}, {"is_mapped", (PyCFunction)vm_is_mapped, METH_VARARGS, "X"}, - {"reset_code_bloc_write", (PyCFunction)vm_reset_code_bloc_write, METH_VARARGS, - "X"}, {"add_code_bloc",(PyCFunction)vm_add_code_bloc, METH_VARARGS, "X"}, {"get_mem", (PyCFunction)vm_get_mem, METH_VARARGS, @@ -572,8 +626,6 @@ static PyMethodDef VmMngr_methods[] = { "X"}, {"reset_code_bloc_pool", (PyCFunction)vm_reset_code_bloc_pool, METH_VARARGS, "X"}, - {"get_code_bloc_write", (PyCFunction)vm_get_code_bloc_write, METH_VARARGS, - "X"}, {"set_alarm", (PyCFunction)set_alarm, METH_VARARGS, "X"}, {"get_exception",(PyCFunction)vm_get_exception, METH_VARARGS, @@ -584,6 +636,20 @@ static PyMethodDef VmMngr_methods[] = { "X"}, {"set_little_endian",(PyCFunction)vm_set_little_endian, METH_VARARGS, "X"}, + {"get_memory_read",(PyCFunction)vm_get_memory_read, METH_VARARGS, + "X"}, + {"get_memory_write",(PyCFunction)vm_get_memory_write, METH_VARARGS, + "X"}, + {"reset_memory_access",(PyCFunction)vm_reset_memory_access, METH_VARARGS, + "X"}, + {"add_mem_read",(PyCFunction)py_add_mem_read, METH_VARARGS, + "X"}, + {"add_mem_write",(PyCFunction)py_add_mem_write, METH_VARARGS, + "X"}, + {"check_invalid_code_blocs",(PyCFunction)vm_check_invalid_code_blocs, METH_VARARGS, + "X"}, + {"check_memory_breakpoint",(PyCFunction)vm_check_memory_breakpoint, METH_VARARGS, + "X"}, {NULL} /* Sentinel */ }; |