about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorserpilliere <devnull@localhost>2014-08-22 13:42:32 +0200
committerserpilliere <devnull@localhost>2014-08-22 13:42:32 +0200
commitc7ee5b9d06b171cb39104d8f577bf82d78a975f1 (patch)
treee740469fd05ca42b4519fd77ba1e3ebd33a84a21
parentaa102ce460428dc7bf6b17978bae214356c6f4c4 (diff)
downloadmiasm-c7ee5b9d06b171cb39104d8f577bf82d78a975f1.tar.gz
miasm-c7ee5b9d06b171cb39104d8f577bf82d78a975f1.zip
Jitter: merge jitcoreARCH and vm_mngr
-rw-r--r--miasm2/jitter/arch/JitCore_arm.c27
-rw-r--r--miasm2/jitter/arch/JitCore_msp430.c31
-rw-r--r--miasm2/jitter/arch/JitCore_x86.c36
-rw-r--r--miasm2/jitter/jitcore_llvm.py12
-rw-r--r--miasm2/jitter/jitcore_tcc.py1
-rw-r--r--miasm2/jitter/jitload.py31
-rw-r--r--miasm2/jitter/vm_mngr_py.c21
-rwxr-xr-xsetup.py27
8 files changed, 102 insertions, 84 deletions
diff --git a/miasm2/jitter/arch/JitCore_arm.c b/miasm2/jitter/arch/JitCore_arm.c
index c8077b84..2b3bc6e0 100644
--- a/miasm2/jitter/arch/JitCore_arm.c
+++ b/miasm2/jitter/arch/JitCore_arm.c
@@ -65,7 +65,7 @@ typedef struct {
 
 
 
-PyObject* vm_get_gpreg(JitCpu* self)
+PyObject* cpu_get_gpreg(JitCpu* self)
 {
     PyObject *dict = PyDict_New();
     PyObject *o;
@@ -128,7 +128,7 @@ PyObject* _vm_set_gpreg(JitCpu* self, PyObject *dict)
     return NULL;
 }
 
-PyObject* vm_set_gpreg(JitCpu* self, PyObject *args)
+PyObject* cpu_set_gpreg(JitCpu* self, PyObject *args)
 {
 	PyObject* dict;
 	if (!PyArg_ParseTuple(args, "O", &dict))
@@ -139,7 +139,7 @@ PyObject* vm_set_gpreg(JitCpu* self, PyObject *args)
 }
 
 
-PyObject* vm_set_exception(JitCpu* self, PyObject* args)
+PyObject* cpu_set_exception(JitCpu* self, PyObject* args)
 {
 	PyObject *item1;
 	uint64_t i;
@@ -154,13 +154,13 @@ PyObject* vm_set_exception(JitCpu* self, PyObject* args)
 	return Py_None;
 }
 
-PyObject* vm_get_exception(JitCpu* self, PyObject* args)
+PyObject* cpu_get_exception(JitCpu* self, PyObject* args)
 {
 	return PyLong_FromUnsignedLongLong((uint64_t)self->vmcpu.exception_flags);
 }
 
 
-PyObject * vm_init_regs(JitCpu* self)
+PyObject * cpu_init_regs(JitCpu* self)
 {
 	memset(&self->vmcpu, 0, sizeof(vm_cpu_t));
 
@@ -184,7 +184,7 @@ void dump_gpregs(vm_cpu_t* vmcpu)
 }
 
 
-PyObject * vm_dump_gpregs(JitCpu* self, PyObject* args)
+PyObject * cpu_dump_gpregs(JitCpu* self, PyObject* args)
 {
 	vm_cpu_t* vmcpu;
 
@@ -230,17 +230,17 @@ static PyMemberDef JitCpu_members[] = {
 };
 
 static PyMethodDef JitCpu_methods[] = {
-	{"vm_init_regs", (PyCFunction)vm_init_regs, METH_NOARGS,
+	{"vm_init_regs", (PyCFunction)cpu_init_regs, METH_NOARGS,
 	 "X"},
-	{"vm_dump_gpregs", (PyCFunction)vm_dump_gpregs, METH_NOARGS,
+	{"vm_dump_gpregs", (PyCFunction)cpu_dump_gpregs, METH_NOARGS,
 	 "X"},
-	{"vm_get_gpreg", (PyCFunction)vm_get_gpreg, METH_NOARGS,
+	{"vm_get_gpreg", (PyCFunction)cpu_get_gpreg, METH_NOARGS,
 	 "X"},
-	{"vm_set_gpreg", (PyCFunction)vm_set_gpreg, METH_VARARGS,
+	{"vm_set_gpreg", (PyCFunction)cpu_set_gpreg, METH_VARARGS,
 	 "X"},
-	{"vm_get_exception", (PyCFunction)vm_get_exception, METH_VARARGS,
+	{"vm_get_exception", (PyCFunction)cpu_get_exception, METH_VARARGS,
 	 "X"},
-	{"vm_set_exception", (PyCFunction)vm_set_exception, METH_VARARGS,
+	{"vm_set_exception", (PyCFunction)cpu_set_exception, METH_VARARGS,
 	 "X"},
 	{NULL}  /* Sentinel */
 };
@@ -534,5 +534,8 @@ initJitCore_arm(void)
     Py_INCREF(&JitCpuType);
     PyModule_AddObject(m, "JitCpu", (PyObject *)&JitCpuType);
 
+    /* init vm */
+    init_vm_mngr(m);
+
 }
 
diff --git a/miasm2/jitter/arch/JitCore_msp430.c b/miasm2/jitter/arch/JitCore_msp430.c
index e5f7ffab..7dc2c935 100644
--- a/miasm2/jitter/arch/JitCore_msp430.c
+++ b/miasm2/jitter/arch/JitCore_msp430.c
@@ -107,7 +107,7 @@ typedef struct {
 
 
 
-PyObject* vm_get_gpreg(JitCpu* self)
+PyObject* cpu_get_gpreg(JitCpu* self)
 {
     PyObject *dict = PyDict_New();
     PyObject *o;
@@ -325,7 +325,7 @@ PyObject* _vm_set_gpreg(JitCpu* self, PyObject *dict)
     }
     return NULL;
 }
-
+/*
 uint8_t const bcd2bin_data[] = {
 	 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 0, 0, 0, 0, 0, 0,
 	10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0,
@@ -418,9 +418,9 @@ uint16_t bcd2hex_16(uint16_t a)
 {
 	return bcd2bin_data[a % 100] | (bcd2bin_data[(a / 100)] << 8);
 }
+*/
 
-
-PyObject* vm_set_gpreg(JitCpu* self, PyObject *args)
+PyObject* cpu_set_gpreg(JitCpu* self, PyObject *args)
 {
 	PyObject* dict;
 	if (!PyArg_ParseTuple(args, "O", &dict))
@@ -431,7 +431,7 @@ PyObject* vm_set_gpreg(JitCpu* self, PyObject *args)
 }
 
 
-PyObject* vm_set_exception(JitCpu* self, PyObject* args)
+PyObject* cpu_set_exception(JitCpu* self, PyObject* args)
 {
 	PyObject *item1;
 	uint64_t i;
@@ -446,13 +446,13 @@ PyObject* vm_set_exception(JitCpu* self, PyObject* args)
 	return Py_None;
 }
 
-PyObject* vm_get_exception(JitCpu* self, PyObject* args)
+PyObject* cpu_get_exception(JitCpu* self, PyObject* args)
 {
 	return PyLong_FromUnsignedLongLong((uint64_t)self->vmcpu.exception_flags);
 }
 
 
-PyObject * vm_init_regs(JitCpu* self)
+PyObject * cpu_init_regs(JitCpu* self)
 {
 	memset(&self->vmcpu, 0, sizeof(vm_cpu_t));
 
@@ -477,7 +477,7 @@ void dump_gpregs(vm_cpu_t* vmcpu)
 }
 
 
-PyObject * vm_dump_gpregs(JitCpu* self, PyObject* args)
+PyObject * cpu_dump_gpregs(JitCpu* self, PyObject* args)
 {
 	vm_cpu_t* vmcpu;
 
@@ -523,17 +523,17 @@ static PyMemberDef JitCpu_members[] = {
 };
 
 static PyMethodDef JitCpu_methods[] = {
-	{"vm_init_regs", (PyCFunction)vm_init_regs, METH_NOARGS,
+	{"vm_init_regs", (PyCFunction)cpu_init_regs, METH_NOARGS,
 	 "X"},
-	{"vm_dump_gpregs", (PyCFunction)vm_dump_gpregs, METH_NOARGS,
+	{"vm_dump_gpregs", (PyCFunction)cpu_dump_gpregs, METH_NOARGS,
 	 "X"},
-	{"vm_get_gpreg", (PyCFunction)vm_get_gpreg, METH_NOARGS,
+	{"vm_get_gpreg", (PyCFunction)cpu_get_gpreg, METH_NOARGS,
 	 "X"},
-	{"vm_set_gpreg", (PyCFunction)vm_set_gpreg, METH_VARARGS,
+	{"vm_set_gpreg", (PyCFunction)cpu_set_gpreg, METH_VARARGS,
 	 "X"},
-	{"vm_get_exception", (PyCFunction)vm_get_exception, METH_VARARGS,
+	{"vm_get_exception", (PyCFunction)cpu_get_exception, METH_VARARGS,
 	 "X"},
-	{"vm_set_exception", (PyCFunction)vm_set_exception, METH_VARARGS,
+	{"vm_set_exception", (PyCFunction)cpu_set_exception, METH_VARARGS,
 	 "X"},
 	{NULL}  /* Sentinel */
 };
@@ -686,5 +686,8 @@ initJitCore_msp430(void)
     Py_INCREF(&JitCpuType);
     PyModule_AddObject(m, "JitCpu", (PyObject *)&JitCpuType);
 
+    /* init vm */
+    init_vm_mngr(m);
+
 }
 
diff --git a/miasm2/jitter/arch/JitCore_x86.c b/miasm2/jitter/arch/JitCore_x86.c
index a09e39b1..bd5f57a8 100644
--- a/miasm2/jitter/arch/JitCore_x86.c
+++ b/miasm2/jitter/arch/JitCore_x86.c
@@ -72,7 +72,7 @@ typedef struct {
 	} while(0);
 
 
-PyObject* vm_get_gpreg(JitCpu* self)
+PyObject* cpu_get_gpreg(JitCpu* self)
 {
     PyObject *dict = PyDict_New();
     PyObject *o;
@@ -151,7 +151,7 @@ PyObject* _vm_set_gpreg(JitCpu* self, PyObject *dict)
     return NULL;
 }
 
-PyObject* vm_set_gpreg(JitCpu* self, PyObject *args)
+PyObject* cpu_set_gpreg(JitCpu* self, PyObject *args)
 {
 	PyObject* dict;
 	if (!PyArg_ParseTuple(args, "O", &dict))
@@ -162,7 +162,7 @@ PyObject* vm_set_gpreg(JitCpu* self, PyObject *args)
 }
 
 
-PyObject * vm_init_regs(JitCpu* self)
+PyObject * cpu_init_regs(JitCpu* self)
 {
 	memset(&self->vmcpu, 0, sizeof(vm_cpu_t));
 
@@ -189,7 +189,7 @@ void dump_gpregs(vm_cpu_t* vmcpu)
 
 }
 
-PyObject * vm_dump_gpregs(JitCpu* self, PyObject* args)
+PyObject * cpu_dump_gpregs(JitCpu* self, PyObject* args)
 {
 	vm_cpu_t* vmcpu;
 
@@ -200,7 +200,7 @@ PyObject * vm_dump_gpregs(JitCpu* self, PyObject* args)
 }
 
 
-PyObject* vm_set_segm_base(JitCpu* self, PyObject* args)
+PyObject* cpu_set_segm_base(JitCpu* self, PyObject* args)
 {
 	PyObject *item1, *item2;
 	uint64_t segm_num, segm_base;
@@ -216,7 +216,7 @@ PyObject* vm_set_segm_base(JitCpu* self, PyObject* args)
 	return Py_None;
 }
 
-PyObject* vm_get_segm_base(JitCpu* self, PyObject* args)
+PyObject* cpu_get_segm_base(JitCpu* self, PyObject* args)
 {
 	PyObject *item1;
 	uint64_t segm_num;
@@ -235,7 +235,7 @@ uint64_t segm2addr(vm_cpu_t* vmcpu, uint64_t segm, uint64_t addr)
 }
 
 
-PyObject* vm_set_exception(JitCpu* self, PyObject* args)
+PyObject* cpu_set_exception(JitCpu* self, PyObject* args)
 {
 	PyObject *item1;
 	uint64_t i;
@@ -250,7 +250,7 @@ PyObject* vm_set_exception(JitCpu* self, PyObject* args)
 	return Py_None;
 }
 
-PyObject* vm_get_exception(JitCpu* self, PyObject* args)
+PyObject* cpu_get_exception(JitCpu* self, PyObject* args)
 {
 	return PyLong_FromUnsignedLongLong((uint64_t)self->vmcpu.exception_flags);
 }
@@ -362,21 +362,21 @@ static PyMemberDef JitCpu_members[] = {
 };
 
 static PyMethodDef JitCpu_methods[] = {
-	{"vm_init_regs", (PyCFunction)vm_init_regs, METH_NOARGS,
+	{"vm_init_regs", (PyCFunction)cpu_init_regs, METH_NOARGS,
 	 "X"},
-	{"vm_dump_gpregs", (PyCFunction)vm_dump_gpregs, METH_NOARGS,
+	{"vm_dump_gpregs", (PyCFunction)cpu_dump_gpregs, METH_NOARGS,
 	 "X"},
-	{"vm_get_gpreg", (PyCFunction)vm_get_gpreg, METH_NOARGS,
+	{"vm_get_gpreg", (PyCFunction)cpu_get_gpreg, METH_NOARGS,
 	 "X"},
-	{"vm_set_gpreg", (PyCFunction)vm_set_gpreg, METH_VARARGS,
+	{"vm_set_gpreg", (PyCFunction)cpu_set_gpreg, METH_VARARGS,
 	 "X"},
-	{"vm_get_segm_base", (PyCFunction)vm_get_segm_base, METH_VARARGS,
+	{"vm_get_segm_base", (PyCFunction)cpu_get_segm_base, METH_VARARGS,
 	 "X"},
-	{"vm_set_segm_base", (PyCFunction)vm_set_segm_base, METH_VARARGS,
+	{"vm_set_segm_base", (PyCFunction)cpu_set_segm_base, METH_VARARGS,
 	 "X"},
-	{"vm_get_exception", (PyCFunction)vm_get_exception, METH_VARARGS,
+	{"vm_get_exception", (PyCFunction)cpu_get_exception, METH_VARARGS,
 	 "X"},
-	{"vm_set_exception", (PyCFunction)vm_set_exception, METH_VARARGS,
+	{"vm_set_exception", (PyCFunction)cpu_set_exception, METH_VARARGS,
 	 "X"},
 	{NULL}  /* Sentinel */
 };
@@ -815,6 +815,7 @@ static PyMethodDef JitCore_x86_Methods[] = {
 
 static PyObject *JitCore_x86_Error;
 
+extern int init_vm_mngr(PyObject* m);
 PyMODINIT_FUNC
 initJitCore_x86(void)
 {
@@ -834,6 +835,9 @@ initJitCore_x86(void)
     Py_INCREF(&JitCpuType);
     PyModule_AddObject(m, "JitCpu", (PyObject *)&JitCpuType);
 
+    /* init vm */
+    init_vm_mngr(m);
+
 }
 
 
diff --git a/miasm2/jitter/jitcore_llvm.py b/miasm2/jitter/jitcore_llvm.py
index 712b8a2f..7dc2f0c4 100644
--- a/miasm2/jitter/jitcore_llvm.py
+++ b/miasm2/jitter/jitcore_llvm.py
@@ -14,8 +14,9 @@ class JitCore_LLVM(jitcore.JitCore):
     "JiT management, using LLVM as backend"
 
     # Architecture dependant libraries
-    arch_dependent_libs = {"x86": "arch/JitCore_x86.so",
-                           "arm": "arch/JitCore_arm.so"}
+    arch_dependent_libs = {"x86": "JitCore_x86.so",
+                           "arm": "JitCore_arm.so",
+                           "msp430": "JitCore_msp430.so"}
 
     def __init__(self, my_ir, bs=None):
         super(JitCore_LLVM, self).__init__(my_ir, bs)
@@ -35,12 +36,9 @@ class JitCore_LLVM(jitcore.JitCore):
         # Library to load within Jit context
         libs_to_load = []
 
-        # Get the vm_mngr librairy
-        lib_dir = os.path.dirname(os.path.realpath(__file__))
-        vm_mngr_path = os.path.join(lib_dir, 'vm_mngr.so')
-        libs_to_load.append(vm_mngr_path)
-
         # Get architecture dependant Jitcore library (if any)
+        lib_dir = os.path.dirname(os.path.realpath(__file__))
+        lib_dir = os.path.join(lib_dir, 'arch')
         try:
             jit_lib = os.path.join(
                 lib_dir, self.arch_dependent_libs[arch.name])
diff --git a/miasm2/jitter/jitcore_tcc.py b/miasm2/jitter/jitcore_tcc.py
index ee33bcd0..856bffc0 100644
--- a/miasm2/jitter/jitcore_tcc.py
+++ b/miasm2/jitter/jitcore_tcc.py
@@ -99,7 +99,6 @@ class JitCore_Tcc(jitcore.JitCore):
         # os.path.join(os.path.dirname(os.path.realpath(__file__)), "jitter")
         lib_dir = os.path.dirname(os.path.realpath(__file__))
         libs = []
-        libs.append(os.path.join(lib_dir, 'vm_mngr.so'))
         libs.append(os.path.join(lib_dir, 'arch/JitCore_%s.so' % (arch.name)))
         libs = ';'.join(libs)
         jittcc_path = Jittcc.__file__
diff --git a/miasm2/jitter/jitload.py b/miasm2/jitter/jitload.py
index 959c9d4a..ea54a9cb 100644
--- a/miasm2/jitter/jitload.py
+++ b/miasm2/jitter/jitload.py
@@ -7,8 +7,6 @@ import struct
 from elfesteem import pe
 from elfesteem import cstruct
 from elfesteem import *
-from vm_mngr import *
-from vm_mngr import VmMngr
 
 from csts import *
 from miasm2.core.utils import *
@@ -28,14 +26,6 @@ hnd.setFormatter(logging.Formatter("[%(levelname)s]: %(message)s"))
 log.addHandler(hnd)
 log.setLevel(logging.CRITICAL)
 
-"""
-name2jit = {'x86':JitCore_x86,
-            'arm':JitCore_arm,
-            'msp430':JitCore_msp430,
-            }
-"""
-
-
 def whoami():
     return inspect.stack()[2][3]
 
@@ -430,25 +420,6 @@ def vm_load_elf(vm, fname, **kargs):
         data += (((len(data) + 0xFFF) & ~0xFFF) - len(data)) * "\x00"
         vm.vm_add_memory_page(r_vaddr, PAGE_READ | PAGE_WRITE, data)
     return e
-"""
-def init_jitter(arch, attrib):
-    jitarch = name2jit[(arch.name, attrib)]
-    jitarch.vm_init_regs()
-    init_memory_page_pool()
-    init_code_bloc_pool()
-    init_memory_breakpoint()
-    jit_tcc_init(arch, attrib)
-
-def init_stack(arch, attrib, stack_size = 0x10000, stack_base = 0x1230000, **kargs):
-    jitarch = name2jit[(arch.name, attrib)]
-
-    vm_add_memory_page(stack_base, PAGE_READ|PAGE_WRITE, "\x00"*stack_size)
-    regs = jitarch.vm_get_gpreg()
-    regs[arch.sp[attrib].name] = stack_base+stack_size
-    jitarch.vm_set_gpreg(regs)
-    regs = jitarch.vm_get_gpreg()
-"""
-
 
 def vm_load_pe_lib(fname_in, libs, lib_path_base, patch_vm_imp, **kargs):
     fname = os.path.join(lib_path_base, fname_in)
@@ -592,7 +563,7 @@ class jitter:
             raise ValueError("unsupported jit arch!")
 
         self.cpu = jcore.JitCpu()
-        self.vm = VmMngr()
+        self.vm = jcore.VmMngr()
         self.bs = bin_stream_vm(self.vm)
         self.my_ir = my_ir
         init_arch_C(self.arch)
diff --git a/miasm2/jitter/vm_mngr_py.c b/miasm2/jitter/vm_mngr_py.c
index eb5fa112..a5a24fd6 100644
--- a/miasm2/jitter/vm_mngr_py.c
+++ b/miasm2/jitter/vm_mngr_py.c
@@ -915,7 +915,7 @@ static PyMethodDef Vm_Mngr_Methods[] = {
 
 };
 
-
+/*
 PyMODINIT_FUNC
 initvm_mngr(void)
 {
@@ -936,4 +936,23 @@ initvm_mngr(void)
     PyModule_AddObject(m, "VmMngr", (PyObject *)&VmMngrType);
 
 }
+*/
+
+/*
+  return
+  0 on success
+  -1 on error
+*/
+int init_vm_mngr(PyObject* m)
+{
+    if (PyType_Ready(&VmMngrType) < 0)
+	return -1;
 
+    Vm_Mngr_Error = PyErr_NewException("vm_mngr_.error", NULL, NULL);
+    Py_INCREF(Vm_Mngr_Error);
+    PyModule_AddObject(m, "error", Vm_Mngr_Error);
+
+    Py_INCREF(&VmMngrType);
+    PyModule_AddObject(m, "VmMngr", (PyObject *)&VmMngrType);
+
+}
diff --git a/setup.py b/setup.py
index fcc8f7a6..d37e9454 100755
--- a/setup.py
+++ b/setup.py
@@ -21,7 +21,7 @@ def buil_all():
               'miasm2/jitter/arch',
               'miasm2/jitter/os_dep',
               ]
-
+    """
     ext_modules_no_tcc = [
         Extension("miasm2.jitter.vm_mngr",
                   ["miasm2/jitter/vm_mngr.c",
@@ -52,12 +52,33 @@ def buil_all():
                   ["miasm2/jitter/Jittcc.c"],
                   libraries=["tcc"])
         ]
+    """
 
+    ext_modules_all = [
+        Extension("miasm2.jitter.arch.JitCore_x86",
+                  ["miasm2/jitter/vm_mngr.c",
+                   "miasm2/jitter/vm_mngr_py.c",
+                   "miasm2/jitter/arch/JitCore_x86.c"]),
+        Extension("miasm2.jitter.arch.JitCore_arm",
+                  ["miasm2/jitter/vm_mngr.c",
+                   "miasm2/jitter/vm_mngr_py.c",
+                   "miasm2/jitter/arch/JitCore_arm.c"]),
+        Extension("miasm2.jitter.arch.JitCore_msp430",
+                  ["miasm2/jitter/vm_mngr.c",
+                   "miasm2/jitter/vm_mngr_py.c",
+                   "miasm2/jitter/arch/JitCore_msp430.c"]),
+        Extension("miasm2.jitter.Jitllvm",
+                  ["miasm2/jitter/Jitllvm.c"]),
+        Extension("miasm2.jitter.Jittcc",
+                  ["miasm2/jitter/Jittcc.c"],
+                  libraries=["tcc"])
+        ]
 
     print 'building'
     build_ok = False
-    for name, ext_modules in [('all', ext_modules_all),
-                              ('notcc', ext_modules_no_tcc)]:
+    #for name, ext_modules in [('all', ext_modules_all),
+    #                          ('notcc', ext_modules_no_tcc)]:
+    for name, ext_modules in [('all', ext_modules_all)]:
         print 'build with', repr(name)
         try:
             s = setup(