diff options
Diffstat (limited to 'miasm2/arch/mips32')
| -rw-r--r-- | miasm2/arch/mips32/ira.py | 12 | ||||
| -rw-r--r-- | miasm2/arch/mips32/jit.py | 16 | ||||
| -rw-r--r-- | miasm2/arch/mips32/sem.py | 11 |
3 files changed, 30 insertions, 9 deletions
diff --git a/miasm2/arch/mips32/ira.py b/miasm2/arch/mips32/ira.py index cb084411..c070b4ba 100644 --- a/miasm2/arch/mips32/ira.py +++ b/miasm2/arch/mips32/ira.py @@ -4,13 +4,13 @@ from miasm2.expression.expression import * from miasm2.ir.ir import ir, irbloc from miasm2.ir.analysis import ira -from miasm2.arch.mips32.sem import ir_mips32 +from miasm2.arch.mips32.sem import ir_mips32l, ir_mips32b from miasm2.arch.mips32.regs import * from miasm2.core.asmbloc import expr_is_int_or_label, expr_is_label -class ir_a_mips32(ir_mips32, ira): +class ir_a_mips32l(ir_mips32l, ira): def __init__(self, symbol_pool=None): - ir_mips32.__init__(self, symbol_pool) + ir_mips32l.__init__(self, symbol_pool) self.ret_reg = self.arch.regs.V0 @@ -79,3 +79,9 @@ class ir_a_mips32(ir_mips32, ira): def sizeof_pointer(self): return 32 + + +class ir_a_mips32b(ir_mips32b, ir_a_mips32l): + def __init__(self, symbol_pool=None): + ir_mips32b.__init__(self, symbol_pool) + self.ret_reg = self.arch.regs.V0 diff --git a/miasm2/arch/mips32/jit.py b/miasm2/arch/mips32/jit.py index 61fa8a5a..93223896 100644 --- a/miasm2/arch/mips32/jit.py +++ b/miasm2/arch/mips32/jit.py @@ -1,7 +1,7 @@ from miasm2.jitter.jitload import jitter from miasm2.core import asmbloc from miasm2.core.utils import * -from miasm2.arch.mips32.sem import ir_mips32 +from miasm2.arch.mips32.sem import ir_mips32l, ir_mips32b import logging @@ -11,13 +11,13 @@ hnd.setFormatter(logging.Formatter("[%(levelname)s]: %(message)s")) log.addHandler(hnd) log.setLevel(logging.CRITICAL) -class jitter_mips32(jitter): +class jitter_mips32l(jitter): def __init__(self, *args, **kwargs): sp = asmbloc.asm_symbol_pool() - jitter.__init__(self, ir_mips32(sp), *args, **kwargs) + jitter.__init__(self, ir_mips32l(sp), *args, **kwargs) + self.vm.set_little_endian() self.ir_arch.jit_pc = self.ir_arch.arch.regs.PC - self.ir_arch.attrib = 'l' def push_uint32_t(self, v): self.cpu.SP -= 4 @@ -35,3 +35,11 @@ class jitter_mips32(jitter): def init_run(self, *args, **kwargs): jitter.init_run(self, *args, **kwargs) self.cpu.PC = self.pc + + +class jitter_mips32b(jitter_mips32l): + def __init__(self, *args, **kwargs): + sp = asmbloc.asm_symbol_pool() + jitter.__init__(self, ir_mips32b(sp), *args, **kwargs) + self.vm.set_big_endian() + self.ir_arch.jit_pc = self.ir_arch.arch.regs.PC diff --git a/miasm2/arch/mips32/sem.py b/miasm2/arch/mips32/sem.py index 365444d7..57263478 100644 --- a/miasm2/arch/mips32/sem.py +++ b/miasm2/arch/mips32/sem.py @@ -522,10 +522,10 @@ def get_mnemo_expr(ir, instr, *args): instr, extra_ir = mnemo_func[instr.name.lower()](ir, instr, *args) return instr, extra_ir -class ir_mips32(ir): +class ir_mips32l(ir): def __init__(self, symbol_pool=None): - ir.__init__(self, mn_mips32, None, symbol_pool) + ir.__init__(self, mn_mips32, 'l', symbol_pool) self.pc = mn_mips32.getpc() self.sp = mn_mips32.getsp() self.IRDst = ExprId('IRDst', 32) @@ -590,3 +590,10 @@ class ir_mips32(ir): self.post_add_bloc(bloc, ir_blocs_all) return ir_blocs_all """ + +class ir_mips32b(ir_mips32l): + def __init__(self, symbol_pool=None): + ir.__init__(self, mn_mips32, 'b', symbol_pool) + self.pc = mn_mips32.getpc() + self.sp = mn_mips32.getsp() + self.IRDst = ExprId('IRDst', 32) |