diff options
| author | Camille Mougey <camille.mougey@cea.fr> | 2014-11-20 16:34:57 +0100 |
|---|---|---|
| committer | Camille Mougey <camille.mougey@cea.fr> | 2014-11-20 16:34:57 +0100 |
| commit | a5397cee9bacc81224f786f9a62adf3de5c99c87 (patch) | |
| tree | d7aa5357a78155e38ac91911f4f6ae9f12942810 | |
| parent | e8176768c80889671c669f777c8bee5ff9820a62 (diff) | |
| parent | fb593e870b922ca9cfb15848881e8e00be259a22 (diff) | |
| download | miasm-a5397cee9bacc81224f786f9a62adf3de5c99c87.tar.gz miasm-a5397cee9bacc81224f786f9a62adf3de5c99c87.zip | |
Merge feature-log-function-call
| -rw-r--r-- | miasm2/analysis/machine.py | 88 | ||||
| -rw-r--r-- | miasm2/analysis/sandbox.py | 6 |
2 files changed, 65 insertions, 29 deletions
diff --git a/miasm2/analysis/machine.py b/miasm2/analysis/machine.py index ee463c80..872eccbc 100644 --- a/miasm2/analysis/machine.py +++ b/miasm2/analysis/machine.py @@ -22,90 +22,120 @@ class Machine(object): ira = None jitter = None gdbserver = None + jit = None + jitter = None + log_jit = None + log_arch = None # Import on runtime for performance issue if machine_name == "arml": from miasm2.arch.arm.disasm import dis_arml as dis_engine - from miasm2.arch.arm.arch import mn_arm as mn + from miasm2.arch.arm import arch, jit + mn = arch.mn_arm + jitter = jit.jitter_arml from miasm2.arch.arm.ira import ir_a_arml as ira - from miasm2.arch.arm.jit import jitter_arml as jitter elif machine_name == "armb": from miasm2.arch.arm.disasm import dis_armb as dis_engine - from miasm2.arch.arm.arch import mn_arm as mn + from miasm2.arch.arm import arch, jit + mn = arch.mn_arm + jitter = jit.jitter_armb from miasm2.arch.arm.ira import ir_a_armb as ira - from miasm2.arch.arm.jit import jitter_armb as jitter elif machine_name == "armtl": from miasm2.arch.arm.disasm import dis_armtl as dis_engine - from miasm2.arch.arm.arch import mn_armt as mn + from miasm2.arch.arm import arch + mn = arch.mn_armt from miasm2.arch.arm.ira import ir_a_armtl as ira elif machine_name == "armtb": from miasm2.arch.arm.disasm import dis_armtb as dis_engine - from miasm2.arch.arm.arch import mn_armt as mn + from miasm2.arch.arm import arch + mn = arch.mn_armt from miasm2.arch.arm.ira import ir_a_armtb as ira elif machine_name == "sh4": from miasm2.arch.sh4.disasm import dis_sha4 as dis_engine - from miasm2.arch.sh4.arch import mn_sh4 as mn + from miasm2.arch.sh4 import arch + mn = arch.mn_sh4 from miasm2.arch.sh4.ira import ir_a_sh4 as ira elif machine_name == "x86_16": from miasm2.arch.x86.disasm import dis_x86_16 as dis_engine - from miasm2.arch.x86.arch import mn_x86 as mn + from miasm2.arch.x86 import arch, jit + mn = arch.mn_x86 + jitter = jit.jitter_x86_16 from miasm2.arch.x86.ira import ir_a_x86_16 as ira - from miasm2.arch.x86.jit import jitter_x86_16 as jitter elif machine_name == "x86_32": from miasm2.arch.x86.disasm import dis_x86_32 as dis_engine - from miasm2.arch.x86.arch import mn_x86 as mn + from miasm2.arch.x86 import arch, jit + mn = arch.mn_x86 + jitter = jit.jitter_x86_32 from miasm2.arch.x86.ira import ir_a_x86_32 as ira - from miasm2.arch.x86.jit import jitter_x86_32 as jitter from miasm2.analysis.gdbserver import GdbServer_x86_32 as gdbserver elif machine_name == "x86_64": from miasm2.arch.x86.disasm import dis_x86_64 as dis_engine - from miasm2.arch.x86.arch import mn_x86 as mn + from miasm2.arch.x86 import arch, jit + mn = arch.mn_x86 + jitter = jit.jitter_x86_64 from miasm2.arch.x86.ira import ir_a_x86_64 as ira - from miasm2.arch.x86.jit import jitter_x86_64 as jitter elif machine_name == "msp430": from miasm2.arch.msp430.disasm import dis_msp430 as dis_engine - from miasm2.arch.msp430.arch import mn_msp430 as mn + from miasm2.arch.msp430 import arch, jit + mn = arch.mn_msp430 + jitter = jit.jitter_msp430 from miasm2.arch.msp430.ira import ir_a_msp430 as ira - from miasm2.arch.msp430.jit import jitter_msp430 as jitter from miasm2.analysis.gdbserver import GdbServer_msp430 as gdbserver elif machine_name == "mips32b": from miasm2.arch.mips32.disasm import dis_mips32b as dis_engine - from miasm2.arch.mips32.arch import mn_mips32 as mn + from miasm2.arch.mips32 import arch, jit + mn = arch.mn_mips32 + jitter = jit.jitter_mips32b from miasm2.arch.mips32.ira import ir_a_mips32b as ira - from miasm2.arch.mips32.jit import jitter_mips32b as jitter elif machine_name == "mips32l": from miasm2.arch.mips32.disasm import dis_mips32l as dis_engine - from miasm2.arch.mips32.arch import mn_mips32 as mn + from miasm2.arch.mips32 import arch, jit + mn = arch.mn_mips32 + jitter = jit.jitter_mips32l from miasm2.arch.mips32.ira import ir_a_mips32l as ira - from miasm2.arch.mips32.jit import jitter_mips32l as jitter else: raise ValueError('Unknown machine: %s' % machine_name) + # Loggers + if jit is not None: + log_jit = jit.log + log_arch = arch.log + self.__dis_engine = dis_engine self.__mn = mn self.__ira = ira self.__jitter = jitter self.__gdbserver = gdbserver + self.__log_jit = log_jit + self.__log_arch = log_arch - def get_dis_engine(self): + @property + def dis_engine(self): return self.__dis_engine - dis_engine = property(get_dis_engine) - def get_mn(self): + @property + def mn(self): return self.__mn - mn = property(get_mn) - def get_ira(self): + @property + def ira(self): return self.__ira - ira = property(get_ira) - def get_jitter(self): + @property + def jitter(self): return self.__jitter - jitter = property(get_jitter) - def get_gdbserver(self): + @property + def gdbserver(self): return self.__gdbserver - gdbserver = property(get_gdbserver) + + @property + def log_jit(self): + return self.__log_jit + + @property + def log_arch(self): + return self.__log_arch @classmethod def available_machine(cls): diff --git a/miasm2/analysis/sandbox.py b/miasm2/analysis/sandbox.py index 9c7bd8e3..cbaf1394 100644 --- a/miasm2/analysis/sandbox.py +++ b/miasm2/analysis/sandbox.py @@ -1,4 +1,5 @@ import os, sys +import logging from argparse import ArgumentParser from miasm2.analysis.machine import Machine from miasm2.jitter.jitload import vm_load_pe, preload_pe, libimp @@ -56,6 +57,9 @@ class Sandbox(object): self.jitter.jit.log_mn = True self.jitter.jit.log_regs = True + if not self.options.quiet_function_calls: + self.machine.log_jit.setLevel(logging.DEBUG) + if self.options.dumpblocs: self.jitter.jit.log_newbloc = True @@ -82,6 +86,8 @@ class Sandbox(object): parser.add_argument("-j", "--jitter", help="Jitter engine. Possible values are: tcc (default), llvm, python", default="tcc") + parser.add_argument('-q', "--quiet-function-calls", action="store_true", + help="Don't log function calls") for base_cls in cls._classes_(): base_cls.update_parser(parser) |