about summary refs log tree commit diff stats
path: root/miasm2/ir/ir.py
diff options
context:
space:
mode:
Diffstat (limited to 'miasm2/ir/ir.py')
-rw-r--r--miasm2/ir/ir.py31
1 files changed, 20 insertions, 11 deletions
diff --git a/miasm2/ir/ir.py b/miasm2/ir/ir.py
index 234be181..8ee35ed5 100644
--- a/miasm2/ir/ir.py
+++ b/miasm2/ir/ir.py
@@ -357,7 +357,7 @@ class IRBlock(object):
 
     def __str__(self):
         out = []
-        out.append('loc_key_%s' % self.loc_key.key)
+        out.append(str(self.loc_key))
         for assignblk in self:
             for dst, src in assignblk.iteritems():
                 out.append('\t%s = %s' % (dst, src))
@@ -416,14 +416,23 @@ class DiGraphIR(DiGraph):
         if self.loc_db is None:
             name = str(expr)
         else:
-            name = self.loc_db.loc_key_to_name(expr.loc_key)
+            names = self.loc_db.get_location_names(expr.loc_key)
+            if not names:
+                name = self.loc_db.pretty_str(expr.loc_key)
+            else:
+                # Use only one name for readability
+                name = sorted(names)[0]
         return m2_expr.ExprId(name, expr.size)
 
     def node2lines(self, node):
         if self.loc_db is None:
             node_name = str(node)
         else:
-            node_name = self.loc_db.loc_key_to_name(node)
+            names = self.loc_db.get_location_names(node)
+            if not names:
+                node_name = self.loc_db.pretty_str(node)
+            else:
+                node_name = "".join("%s:\n" % name for name in names)
         yield self.DotCellDescription(
             text="%s" % node_name,
             attr={
@@ -530,7 +539,7 @@ class IntermediateRepresentation(object):
         except (ValueError, TypeError):
             return None
 
-        return self.loc_db.getby_offset_create(addr)
+        return self.loc_db.get_or_create_offset_location(addr)
 
     def get_block(self, addr):
         """Returns the irbloc associated to an ExprId/ExprInt/loc_key/int
@@ -551,7 +560,7 @@ class IntermediateRepresentation(object):
 
     def add_instr(self, line, loc_key=None, gen_pc_updt=False):
         if loc_key is None:
-            loc_key = self.loc_db.gen_loc_key()
+            loc_key = self.loc_db.add_location()
         block = AsmBlock(loc_key)
         block.lines = [line]
         self.add_block(block, gen_pc_updt)
@@ -687,9 +696,9 @@ class IntermediateRepresentation(object):
                 if block.lines:
                     line = block.lines[-1]
                     if line.offset is not None:
-                        loc_key = self.loc_db.getby_offset_create(line.offset + line.l)
+                        loc_key = self.loc_db.get_or_create_offset_location(line.offset + line.l)
                 if loc_key is None:
-                    loc_key = self.loc_db.gen_loc_key()
+                    loc_key = self.loc_db.add_location()
                 block.add_cst(loc_key, AsmConstraint.c_next)
             else:
                 loc_key = next_loc_key
@@ -724,18 +733,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.loc_db.getby_offset_create(instr.offset)
+        return self.loc_db.get_or_create_offset_location(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.loc_db.gen_loc_key()
+        loc_key = self.loc_db.add_location()
         return loc_key, m2_expr.ExprLoc(loc_key, size)
 
     def get_next_loc_key(self, instr):
-        loc_key = self.loc_db.getby_offset_create(instr.offset + instr.l)
+        loc_key = self.loc_db.get_or_create_offset_location(instr.offset + instr.l)
         return loc_key
 
     def simplify(self, simplifier):
@@ -825,7 +834,7 @@ class IntermediateRepresentation(object):
             self._graph.add_node(lbl)
             for dst in self.dst_trackback(block):
                 if dst.is_int():
-                    dst_lbl = self.loc_db.getby_offset_create(int(dst))
+                    dst_lbl = self.loc_db.get_or_create_offset_location(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)