diff options
| -rw-r--r-- | miasm2/jitter/arch/JitCore_arm.c | 27 | ||||
| -rw-r--r-- | miasm2/jitter/arch/JitCore_msp430.c | 31 | ||||
| -rw-r--r-- | miasm2/jitter/arch/JitCore_x86.c | 36 | ||||
| -rw-r--r-- | miasm2/jitter/jitcore_llvm.py | 12 | ||||
| -rw-r--r-- | miasm2/jitter/jitcore_tcc.py | 1 | ||||
| -rw-r--r-- | miasm2/jitter/jitload.py | 31 | ||||
| -rw-r--r-- | miasm2/jitter/vm_mngr_py.c | 21 | ||||
| -rwxr-xr-x | setup.py | 27 |
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( |