about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorlosynix <louis@losynix.net>2018-05-09 15:24:12 +0200
committerlosynix <louis@losynix.net>2018-05-09 16:34:36 +0200
commit9a0eda072a973f50509bc62aa2613fa81a067e42 (patch)
tree4b69d2b81b98bb0e98f61d211e62223a4d5edef0
parent8f5a42ae2b659f10bdf52adbd8e382e0784f74a1 (diff)
downloadmiasm-9a0eda072a973f50509bc62aa2613fa81a067e42.tar.gz
miasm-9a0eda072a973f50509bc62aa2613fa81a067e42.zip
add getby_offset in AsmCFG
Diffstat (limited to '')
-rw-r--r--miasm2/core/asmblock.py8
-rw-r--r--test/core/asmblock.py2
2 files changed, 10 insertions, 0 deletions
diff --git a/miasm2/core/asmblock.py b/miasm2/core/asmblock.py
index 07b8ceeb..8740aeb7 100644
--- a/miasm2/core/asmblock.py
+++ b/miasm2/core/asmblock.py
@@ -736,6 +736,14 @@ class AsmCFG(DiGraph):
                     yield predecessor
                     done.add(predecessor)
 
+    def getby_offset(self, offset):
+        """Return block containing @offset"""
+        for block in self:
+            if block.lines[0].offset <= offset < \
+                    (block.lines[-1].offset + block.lines[-1].l):
+                return block
+        return None
+
     def sanity_check(self):
         """Do sanity checks on blocks' constraints:
         * no pendings
diff --git a/test/core/asmblock.py b/test/core/asmblock.py
index eb7b54b2..7f0dbc5f 100644
--- a/test/core/asmblock.py
+++ b/test/core/asmblock.py
@@ -41,6 +41,8 @@ assert len(blocks.pendings) == 0
 assert len(blocks.nodes()) == 17
 assert len(blocks.edges2constraint) == len(blocks.edges())
 assert len(blocks.edges()) == 24
+assert blocks.getby_offset(0x63).lines[0].offset == 0x5f
+assert blocks.getby_offset(0x69).lines[0].offset == 0x69
 
 ## Convert to dot
 open("graph.dot", "w").write(blocks.dot())