about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAjax <commial@gmail.com>2015-11-09 15:47:52 +0100
committerAjax <commial@gmail.com>2015-11-09 15:47:52 +0100
commita48b6740c9e6c829661843e78ad7acfcf63ae667 (patch)
treee4ed9f1c1fe3f6188b4ec947fed380ed0fe39f87
parent7681a432c7c98df9d075701a172df0d5f311f753 (diff)
downloadmiasm-a48b6740c9e6c829661843e78ad7acfcf63ae667.tar.gz
miasm-a48b6740c9e6c829661843e78ad7acfcf63ae667.zip
x86: add a new "register" named interrupt_num
-rw-r--r--miasm2/arch/x86/regs.py5
-rw-r--r--miasm2/jitter/arch/JitCore_x86.c20
-rw-r--r--miasm2/jitter/arch/JitCore_x86.h2
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 */