about summary refs log tree commit diff stats
path: root/miasm2/ir
diff options
context:
space:
mode:
Diffstat (limited to 'miasm2/ir')
-rw-r--r--miasm2/ir/ir.py47
-rw-r--r--miasm2/ir/symbexec.py4
-rw-r--r--miasm2/ir/symbexec_top.py2
-rw-r--r--miasm2/ir/translators/C.py10
-rw-r--r--miasm2/ir/translators/smt2.py10
-rw-r--r--miasm2/ir/translators/z3_ir.py13
6 files changed, 45 insertions, 41 deletions
diff --git a/miasm2/ir/ir.py b/miasm2/ir/ir.py
index 6084e67d..234be181 100644
--- a/miasm2/ir/ir.py
+++ b/miasm2/ir/ir.py
@@ -23,8 +23,8 @@ from itertools import chain
 
 import miasm2.expression.expression as m2_expr
 from miasm2.expression.expression_helper import get_missing_interval
-from miasm2.core.asmblock import AsmSymbolPool, AsmBlock, \
-    AsmConstraint, AsmBlockBad
+from miasm2.core.asmblock import AsmBlock, AsmConstraint, AsmBlockBad
+from miasm2.core.locationdb import LocationDB
 from miasm2.core.graph import DiGraph
 
 class AssignBlock(object):
@@ -402,28 +402,28 @@ class DiGraphIR(DiGraph):
 
     """DiGraph for IR instances"""
 
-    def __init__(self, blocks, symbol_pool=None, *args, **kwargs):
+    def __init__(self, blocks, loc_db=None, *args, **kwargs):
         """Instanciate a DiGraphIR
         @blocks: IR blocks
         """
-        self.symbol_pool = symbol_pool
+        self.loc_db = loc_db
         self._blocks = blocks
         super(DiGraphIR, self).__init__(*args, **kwargs)
 
     def _expr_loc_to_symb(self, expr):
         if not expr.is_loc():
             return expr
-        if self.symbol_pool is None:
+        if self.loc_db is None:
             name = str(expr)
         else:
-            name = self.symbol_pool.loc_key_to_name(expr.loc_key)
+            name = self.loc_db.loc_key_to_name(expr.loc_key)
         return m2_expr.ExprId(name, expr.size)
 
     def node2lines(self, node):
-        if self.symbol_pool is None:
+        if self.loc_db is None:
             node_name = str(node)
         else:
-            node_name = self.symbol_pool.loc_key_to_name(node)
+            node_name = self.loc_db.loc_key_to_name(node)
         yield self.DotCellDescription(
             text="%s" % node_name,
             attr={
@@ -481,10 +481,10 @@ class IntermediateRepresentation(object):
     Allow native assembly to intermediate representation traduction
     """
 
-    def __init__(self, arch, attrib, symbol_pool=None):
-        if symbol_pool is None:
-            symbol_pool = AsmSymbolPool()
-        self.symbol_pool = symbol_pool
+    def __init__(self, arch, attrib, loc_db=None):
+        if loc_db is None:
+            loc_db = LocationDB()
+        self.loc_db = loc_db
         self.blocks = {}
         self.pc = arch.getpc(attrib)
         self.sp = arch.getsp(attrib)
@@ -498,6 +498,11 @@ class IntermediateRepresentation(object):
         warnings.warn('DEPRECATION WARNING: use ".blocks" instead of ".blocs"')
         return self.blocks
 
+    @property
+    def symbol_pool(self):
+        warnings.warn('DEPRECATION WARNING: use ".loc_db" instead of ".symbol_pool"')
+        return self.loc_db
+
     def get_ir(self, instr):
         raise NotImplementedError("Abstract Method")
 
@@ -525,7 +530,7 @@ class IntermediateRepresentation(object):
         except (ValueError, TypeError):
             return None
 
-        return self.symbol_pool.getby_offset_create(addr)
+        return self.loc_db.getby_offset_create(addr)
 
     def get_block(self, addr):
         """Returns the irbloc associated to an ExprId/ExprInt/loc_key/int
@@ -546,7 +551,7 @@ class IntermediateRepresentation(object):
 
     def add_instr(self, line, loc_key=None, gen_pc_updt=False):
         if loc_key is None:
-            loc_key = self.symbol_pool.gen_loc_key()
+            loc_key = self.loc_db.gen_loc_key()
         block = AsmBlock(loc_key)
         block.lines = [line]
         self.add_block(block, gen_pc_updt)
@@ -682,9 +687,9 @@ class IntermediateRepresentation(object):
                 if block.lines:
                     line = block.lines[-1]
                     if line.offset is not None:
-                        loc_key = self.symbol_pool.getby_offset_create(line.offset + line.l)
+                        loc_key = self.loc_db.getby_offset_create(line.offset + line.l)
                 if loc_key is None:
-                    loc_key = self.symbol_pool.gen_loc_key()
+                    loc_key = self.loc_db.gen_loc_key()
                 block.add_cst(loc_key, AsmConstraint.c_next)
             else:
                 loc_key = next_loc_key
@@ -719,18 +724,18 @@ class IntermediateRepresentation(object):
     def get_loc_key_for_instr(self, instr):
         """Returns the loc_key associated to an instruction
         @instr: current instruction"""
-        return self.symbol_pool.getby_offset_create(instr.offset)
+        return self.loc_db.getby_offset_create(instr.offset)
 
     def gen_loc_key_and_expr(self, size):
         """
         Return a loc_key and it's corresponding ExprLoc
         @size: size of expression
         """
-        loc_key = self.symbol_pool.gen_loc_key()
+        loc_key = self.loc_db.gen_loc_key()
         return loc_key, m2_expr.ExprLoc(loc_key, size)
 
     def get_next_loc_key(self, instr):
-        loc_key = self.symbol_pool.getby_offset_create(instr.offset + instr.l)
+        loc_key = self.loc_db.getby_offset_create(instr.offset + instr.l)
         return loc_key
 
     def simplify(self, simplifier):
@@ -814,13 +819,13 @@ class IntermediateRepresentation(object):
         """
         Gen irbloc digraph
         """
-        self._graph = DiGraphIR(self.blocks, self.symbol_pool)
+        self._graph = DiGraphIR(self.blocks, self.loc_db)
         for lbl, block in self.blocks.iteritems():
             assert isinstance(lbl, m2_expr.LocKey)
             self._graph.add_node(lbl)
             for dst in self.dst_trackback(block):
                 if dst.is_int():
-                    dst_lbl = self.symbol_pool.getby_offset_create(int(dst))
+                    dst_lbl = self.loc_db.getby_offset_create(int(dst))
                     dst = m2_expr.ExprLoc(dst_lbl.loc_key, self.pc.size)
                 if dst.is_loc():
                     self._graph.add_edge(lbl, dst.loc_key)
diff --git a/miasm2/ir/symbexec.py b/miasm2/ir/symbexec.py
index c75bd9e8..09113311 100644
--- a/miasm2/ir/symbexec.py
+++ b/miasm2/ir/symbexec.py
@@ -19,7 +19,7 @@ def get_block(ir_arch, mdis, addr):
     """Get IRBlock at address @addr"""
     lbl = ir_arch.get_loc_key(addr)
     if not lbl in ir_arch.blocks:
-        offset = mdis.symbol_pool.loc_key_to_offset(lbl)
+        offset = mdis.loc_db.loc_key_to_offset(lbl)
         block = mdis.dis_block(offset)
         ir_arch.add_block(block)
     irblock = ir_arch.get_block(lbl)
@@ -892,7 +892,7 @@ class SymbolicExecutionEngine(object):
 
     def eval_exprloc(self, expr, **kwargs):
         """[DEV]: Evaluate an ExprLoc using the current state"""
-        offset = self.ir_arch.symbol_pool.loc_key_to_offset(expr.loc_key)
+        offset = self.ir_arch.loc_db.loc_key_to_offset(expr.loc_key)
         if offset is not None:
             ret = ExprInt(offset, expr.size)
         else:
diff --git a/miasm2/ir/symbexec_top.py b/miasm2/ir/symbexec_top.py
index 64d428b4..e0976c9b 100644
--- a/miasm2/ir/symbexec_top.py
+++ b/miasm2/ir/symbexec_top.py
@@ -128,7 +128,7 @@ class SymbExecTopNoMem(SymbolicExecutionEngine):
         return ret
 
     def eval_exprloc(self, expr, **kwargs):
-        offset = self.ir_arch.symbol_pool.loc_key_to_offset(expr.loc_key)
+        offset = self.ir_arch.loc_db.loc_key_to_offset(expr.loc_key)
         if offset is not None:
             ret = ExprInt(offset, expr.size)
         else:
diff --git a/miasm2/ir/translators/C.py b/miasm2/ir/translators/C.py
index b7821e85..28222803 100644
--- a/miasm2/ir/translators/C.py
+++ b/miasm2/ir/translators/C.py
@@ -18,13 +18,13 @@ class TranslatorC(Translator):
                '>>>': 'rot_right',
                }
 
-    def __init__(self, symbol_pool=None, **kwargs):
+    def __init__(self, loc_db=None, **kwargs):
         """Instance a C translator
-        @symbol_pool: AsmSymbolPool instance
+        @loc_db: LocationDB instance
         """
         super(TranslatorC, self).__init__(**kwargs)
         # symbol pool
-        self.symbol_pool = symbol_pool
+        self.loc_db = loc_db
 
     def _size2mask(self, size):
         """Return a C string corresponding to the size2mask operation, with support for
@@ -52,10 +52,10 @@ class TranslatorC(Translator):
 
     def from_ExprLoc(self, expr):
         loc_key = expr.loc_key
-        if self.symbol_pool is None:
+        if self.loc_db is None:
             return str(loc_key)
 
-        offset = self.symbol_pool.loc_key_to_offset(loc_key)
+        offset = self.loc_db.loc_key_to_offset(loc_key)
         if offset is None:
             return str(loc_key)
 
diff --git a/miasm2/ir/translators/smt2.py b/miasm2/ir/translators/smt2.py
index f5d633e0..f5e69163 100644
--- a/miasm2/ir/translators/smt2.py
+++ b/miasm2/ir/translators/smt2.py
@@ -119,7 +119,7 @@ class TranslatorSMT2(Translator):
     # Implemented language
     __LANG__ = "smt2"
 
-    def __init__(self, endianness="<", symbol_pool=None, **kwargs):
+    def __init__(self, endianness="<", loc_db=None, **kwargs):
         """Instance a SMT2 translator
         @endianness: (optional) memory endianness
         """
@@ -129,7 +129,7 @@ class TranslatorSMT2(Translator):
         # map of translated bit vectors
         self._bitvectors = dict()
         # symbol pool
-        self.symbol_pool = symbol_pool
+        self.loc_db = loc_db
 
     def from_ExprInt(self, expr):
         return bit_vec_val(expr.arg.arg, expr.size)
@@ -141,13 +141,13 @@ class TranslatorSMT2(Translator):
 
     def from_ExprLoc(self, expr):
         loc_key = expr.loc_key
-        if self.symbol_pool is None:
+        if self.loc_db is None:
             if str(loc_key) not in self._bitvectors:
                 self._bitvectors[str(loc_key)] = expr.size
             return str(loc_key)
 
-        offset = self.symbol_pool.loc_key_to_offset(loc_key)
-        name = self.symbol_pool.loc_key_to_name(loc_key)
+        offset = self.loc_db.loc_key_to_offset(loc_key)
+        name = self.loc_db.loc_key_to_name(loc_key)
 
         if offset is None:
             return bit_vec_val(str(offset), expr.size)
diff --git a/miasm2/ir/translators/z3_ir.py b/miasm2/ir/translators/z3_ir.py
index d01b73fa..bfb29d06 100644
--- a/miasm2/ir/translators/z3_ir.py
+++ b/miasm2/ir/translators/z3_ir.py
@@ -115,7 +115,7 @@ class TranslatorZ3(Translator):
     # Operations translation
     trivial_ops = ["+", "-", "/", "%", "&", "^", "|", "*", "<<"]
 
-    def __init__(self, endianness="<", symbol_pool=None, **kwargs):
+    def __init__(self, endianness="<", loc_db=None, **kwargs):
         """Instance a Z3 translator
         @endianness: (optional) memory endianness
         """
@@ -125,8 +125,7 @@ class TranslatorZ3(Translator):
 
         super(TranslatorZ3, self).__init__(**kwargs)
         self._mem = Z3Mem(endianness)
-        # symbol pool
-        self.symbol_pool = symbol_pool
+        self.loc_db = loc_db
 
     def from_ExprInt(self, expr):
         return z3.BitVecVal(expr.arg.arg, expr.size)
@@ -135,12 +134,12 @@ class TranslatorZ3(Translator):
         return z3.BitVec(str(expr), expr.size)
 
     def from_ExprLoc(self, expr):
-        if self.symbol_pool is None:
-            # No symbol_pool, fallback to default name
+        if self.loc_db is None:
+            # No loc_db, fallback to default name
             return z3.BitVec(str(expr), expr.size)
         loc_key = expr.loc_key
-        offset = self.symbol_pool.loc_key_to_offset(loc_key)
-        name = self.symbol_pool.loc_key_to_name(loc_key)
+        offset = self.loc_db.loc_key_to_offset(loc_key)
+        name = self.loc_db.loc_key_to_name(loc_key)
         if offset is not None:
             return z3.BitVecVal(offset, expr.size)
         if name is not None: