diff options
Diffstat (limited to 'miasm2/jitter')
| -rw-r--r-- | miasm2/jitter/vm_mngr.h | 2 | ||||
| -rw-r--r-- | miasm2/jitter/vm_mngr_py.c | 19 |
2 files changed, 20 insertions, 1 deletions
diff --git a/miasm2/jitter/vm_mngr.h b/miasm2/jitter/vm_mngr.h index 2bde6a93..d092ad5d 100644 --- a/miasm2/jitter/vm_mngr.h +++ b/miasm2/jitter/vm_mngr.h @@ -61,7 +61,7 @@ LIST_HEAD(memory_breakpoint_info_head, memory_breakpoint_info); #define BREAKPOINT_READ 1 #define BREAKPOINT_WRITE 2 - +#define BREAK_SIGALARM 1<<5 #define MAX_MEMORY_PAGE_POOL_TAB 0x100000 #define MEMORY_PAGE_POOL_MASK_BIT 12 diff --git a/miasm2/jitter/vm_mngr_py.c b/miasm2/jitter/vm_mngr_py.c index a5a24fd6..18f2fd51 100644 --- a/miasm2/jitter/vm_mngr_py.c +++ b/miasm2/jitter/vm_mngr_py.c @@ -19,6 +19,7 @@ #include "structmember.h" #include <stdint.h> #include <inttypes.h> +#include <signal.h> #include "queue.h" #include "vm_mngr.h" @@ -38,6 +39,8 @@ typedef struct { vm_mngr_t vm_mngr; } VmMngr; +/* XXX POC signals */ +VmMngr* global_vmmngr; PyObject* _vm_get_exception(unsigned int xcpt) { @@ -106,6 +109,20 @@ PyObject* vm_get_mem_base_addr(VmMngr* self, PyObject* item) return PyLong_FromUnsignedLongLong((uint64_t)addr_base); } +static void sig_alarm(int signo) +{ + global_vmmngr->vm_mngr.exception_flags |= BREAK_SIGALARM; + return; +} + +PyObject* set_alarm(VmMngr* self) +{ + global_vmmngr = self; + signal(SIGALRM, sig_alarm); + return PyLong_FromUnsignedLongLong((uint64_t)0); +} + + PyObject* vm_add_memory_page(VmMngr* self, PyObject* args) { @@ -781,6 +798,8 @@ static PyMethodDef VmMngr_methods[] = { "X"}, {"vm_reset_code_bloc_pool", (PyCFunction)vm_reset_code_bloc_pool, METH_VARARGS, "X"}, + {"set_alarm", (PyCFunction)set_alarm, METH_VARARGS, + "X"}, {"vm_call_pyfunc_from_globals",(PyCFunction)vm_call_pyfunc_from_globals, METH_VARARGS, "X"}, |