diff options
| author | Ajax <commial@gmail.com> | 2015-11-09 15:47:52 +0100 |
|---|---|---|
| committer | Ajax <commial@gmail.com> | 2015-11-09 15:47:52 +0100 |
| commit | a48b6740c9e6c829661843e78ad7acfcf63ae667 (patch) | |
| tree | e4ed9f1c1fe3f6188b4ec947fed380ed0fe39f87 | |
| parent | 7681a432c7c98df9d075701a172df0d5f311f753 (diff) | |
| download | miasm-a48b6740c9e6c829661843e78ad7acfcf63ae667.tar.gz miasm-a48b6740c9e6c829661843e78ad7acfcf63ae667.zip | |
x86: add a new "register" named interrupt_num
| -rw-r--r-- | miasm2/arch/x86/regs.py | 5 | ||||
| -rw-r--r-- | miasm2/jitter/arch/JitCore_x86.c | 20 | ||||
| -rw-r--r-- | miasm2/jitter/arch/JitCore_x86.h | 2 |
3 files changed, 25 insertions, 2 deletions
diff --git a/miasm2/arch/x86/regs.py b/miasm2/arch/x86/regs.py index 9c87834f..3bca8fe2 100644 --- a/miasm2/arch/x86/regs.py +++ b/miasm2/arch/x86/regs.py @@ -6,6 +6,7 @@ IP = ExprId('IP', 16) EIP = ExprId('EIP', 32) RIP = ExprId('RIP', 64) exception_flags = ExprId('exception_flags', 32) +interrupt_num = ExprId('interrupt_num', 8) # GP @@ -399,7 +400,7 @@ all_regs_ids = [ XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15, - exception_flags, + exception_flags, interrupt_num, ] + fltregs32_expr all_regs_ids_no_alias = [ @@ -421,7 +422,7 @@ all_regs_ids_no_alias = [ XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15, - exception_flags, + exception_flags, interrupt_num, ] + fltregs32_expr all_regs_ids_byname = dict([(x.name, x) for x in all_regs_ids]) diff --git a/miasm2/jitter/arch/JitCore_x86.c b/miasm2/jitter/arch/JitCore_x86.c index dd4ce7cb..9d15cd20 100644 --- a/miasm2/jitter/arch/JitCore_x86.c +++ b/miasm2/jitter/arch/JitCore_x86.c @@ -197,9 +197,25 @@ PyObject* cpu_get_exception(JitCpu* self, PyObject* args) return PyLong_FromUnsignedLongLong((uint64_t)(((vm_cpu_t*)self->cpu)->exception_flags)); } +PyObject* cpu_set_interrupt_num(JitCpu* self, PyObject* args) +{ + PyObject *item1; + uint64_t i; + if (!PyArg_ParseTuple(args, "O", &item1)) + return NULL; + + PyGetInt(item1, i); + ((vm_cpu_t*)self->cpu)->interrupt_num = i; + Py_INCREF(Py_None); + return Py_None; +} +PyObject* cpu_get_interrupt_num(JitCpu* self, PyObject* args) +{ + return PyLong_FromUnsignedLongLong((uint64_t)(((vm_cpu_t*)self->cpu)->interrupt_num)); +} PyObject* cpu_set_segm_base(JitCpu* self, PyObject* args) { @@ -349,6 +365,10 @@ static PyMethodDef JitCpu_methods[] = { "X"}, {"get_mem", (PyCFunction)vm_get_mem, METH_VARARGS, "X"}, + {"get_interrupt_num", (PyCFunction)cpu_get_interrupt_num, METH_VARARGS, + "X"}, + {"set_interrupt_num", (PyCFunction)cpu_set_interrupt_num, METH_VARARGS, + "X"}, {NULL} /* Sentinel */ }; diff --git a/miasm2/jitter/arch/JitCore_x86.h b/miasm2/jitter/arch/JitCore_x86.h index 7e518395..c90c10b8 100644 --- a/miasm2/jitter/arch/JitCore_x86.h +++ b/miasm2/jitter/arch/JitCore_x86.h @@ -2,6 +2,8 @@ typedef struct { uint32_t exception_flags; uint32_t exception_flags_new; + uint32_t interrupt_num; + uint32_t interrupt_num_new; /* gpregs */ |