diff options
| author | Camille Mougey <commial@gmail.com> | 2018-08-06 22:26:36 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-08-06 22:26:36 +0200 |
| commit | e38b5dd91d10ad66d537675e4592f68eda9fcce2 (patch) | |
| tree | 912333c96758461e9c226d8da037c0084d3c10a0 /miasm2/core/graph.py | |
| parent | e4a255d9c6175b5d9f2ab15471d848705fe1cc4e (diff) | |
| parent | efc5ec2e8c394475e3a2be68bc29821e4d980b1b (diff) | |
| download | miasm-e38b5dd91d10ad66d537675e4592f68eda9fcce2.tar.gz miasm-e38b5dd91d10ad66d537675e4592f68eda9fcce2.zip | |
Merge pull request #816 from serpilliere/operator_high_level
Operator high level
Diffstat (limited to 'miasm2/core/graph.py')
| -rw-r--r-- | miasm2/core/graph.py | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/miasm2/core/graph.py b/miasm2/core/graph.py index d35148b1..a817c024 100644 --- a/miasm2/core/graph.py +++ b/miasm2/core/graph.py @@ -267,6 +267,12 @@ class DiGraph(object): for next_node in next_cb(node): todo.add(next_node) + def predecessors_stop_node_iter(self, node, head): + if node == head: + raise StopIteration + for next_node in self.predecessors_iter(node): + yield next_node + def reachable_sons(self, head): """Compute all nodes reachable from node @head. Each son is an immediate successor of an arbitrary, already yielded son of @head""" @@ -277,6 +283,18 @@ class DiGraph(object): predecessor of an arbitrary, already yielded parent of @leaf""" return self._reachable_nodes(leaf, self.predecessors_iter) + def reachable_parents_stop_node(self, leaf, head): + """Compute all parents of node @leaf. Each parent is an immediate + predecessor of an arbitrary, already yielded parent of @leaf. + Do not compute reachables past @head node""" + return self._reachable_nodes( + leaf, + lambda node_cur: self.predecessors_stop_node_iter( + node_cur, head + ) + ) + + @staticmethod def _compute_generic_dominators(head, reachable_cb, prev_cb, next_cb): """Generic algorithm to compute either the dominators or postdominators |