about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorCamille Mougey <camille.mougey@cea.fr>2014-11-20 16:34:57 +0100
committerCamille Mougey <camille.mougey@cea.fr>2014-11-20 16:34:57 +0100
commita5397cee9bacc81224f786f9a62adf3de5c99c87 (patch)
treed7aa5357a78155e38ac91911f4f6ae9f12942810
parente8176768c80889671c669f777c8bee5ff9820a62 (diff)
parentfb593e870b922ca9cfb15848881e8e00be259a22 (diff)
downloadmiasm-a5397cee9bacc81224f786f9a62adf3de5c99c87.tar.gz
miasm-a5397cee9bacc81224f786f9a62adf3de5c99c87.zip
Merge feature-log-function-call
-rw-r--r--miasm2/analysis/machine.py88
-rw-r--r--miasm2/analysis/sandbox.py6
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)