binaryninja/personal/api-docs/binaryninja.flowgraph-module.html

647 lines
41 KiB
HTML
Raw Normal View History

2019-04-03 14:46:40 +01:00
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flowgraph module &mdash; Binary Ninja API Documentation v1.1</title>
<link rel="shortcut icon" href="_static/favicon.ico"/>
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/css/other.css" type="text/css" />
<link rel="index" title="Index"
href="genindex.html"/>
<link rel="search" title="Search" href="search.html"/>
<link rel="top" title="Binary Ninja API Documentation v1.1" href="index.html"/>
<link rel="next" title="binaryninja.flowgraph.CoreFlowGraph" href="binaryninja.flowgraph.CoreFlowGraph.html"/>
<link rel="prev" title="binaryninja.filemetadata.NavigationHandler" href="binaryninja.filemetadata.NavigationHandler.html"/>
<script src="_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="index.html" class="icon icon-home"> Binary Ninja API
</a>
<div class="version">
<script>
window.addEventListener("load", function() {
var ver = document.getElementsByClassName("version");
ver[0].innerHTML = DOCUMENTATION_OPTIONS['VERSION'];
});
</script>
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="binaryninja.architecture-module.html">architecture</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.atexit-module.html">atexit</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.basicblock-module.html">basicblock</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.binaryview-module.html">binaryview</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.callingconvention-module.html">callingconvention</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.databuffer-module.html">databuffer</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.datarender-module.html">datarender</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.demangle-module.html">demangle</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.downloadprovider-module.html">downloadprovider</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.enums-module.html">enums</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.fileaccessor-module.html">fileaccessor</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.filemetadata-module.html">filemetadata</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">flowgraph</a><ul>
<li class="toctree-l2"><a class="reference internal" href="binaryninja.flowgraph.CoreFlowGraph.html">binaryninja.flowgraph.CoreFlowGraph</a></li>
<li class="toctree-l2"><a class="reference internal" href="binaryninja.flowgraph.FlowGraph.html">binaryninja.flowgraph.FlowGraph</a></li>
<li class="toctree-l2"><a class="reference internal" href="binaryninja.flowgraph.FlowGraphEdge.html">binaryninja.flowgraph.FlowGraphEdge</a></li>
<li class="toctree-l2"><a class="reference internal" href="binaryninja.flowgraph.FlowGraphLayoutRequest.html">binaryninja.flowgraph.FlowGraphLayoutRequest</a></li>
<li class="toctree-l2"><a class="reference internal" href="binaryninja.flowgraph.FlowGraphNode.html">binaryninja.flowgraph.FlowGraphNode</a></li>
<li class="toctree-l2"><a class="reference internal" href="binaryninja.flowgraph.range.html">binaryninja.flowgraph.range</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.function-module.html">function</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.functionrecognizer-module.html">functionrecognizer</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.highlight-module.html">highlight</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.interaction-module.html">interaction</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.lineardisassembly-module.html">lineardisassembly</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.log-module.html">log</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.lowlevelil-module.html">lowlevelil</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.mainthread-module.html">mainthread</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.mediumlevelil-module.html">mediumlevelil</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.metadata-module.html">metadata</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.numbers-module.html">numbers</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.platform-module.html">platform</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.plugin-module.html">plugin</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.pluginmanager-module.html">pluginmanager</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.scriptingprovider-module.html">scriptingprovider</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.settings-module.html">settings</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.transform-module.html">transform</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.types-module.html">types</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.undoaction-module.html">undoaction</a></li>
<li class="toctree-l1"><a class="reference internal" href="binaryninja.update-module.html">update</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">Binary Ninja API</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html">Docs</a> &raquo;</li>
<li>flowgraph module</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/binaryninja.flowgraph-module.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="flowgraph-module">
<h1>flowgraph module<a class="headerlink" href="#flowgraph-module" title="Permalink to this headline"></a></h1>
<table border="1" class="longtable docutils">
<colgroup>
<col width="10%" />
<col width="90%" />
</colgroup>
<tbody valign="top">
<tr class="row-odd"><td><a class="reference internal" href="binaryninja.flowgraph.CoreFlowGraph.html#binaryninja.flowgraph.CoreFlowGraph" title="binaryninja.flowgraph.CoreFlowGraph"><code class="xref py py-obj docutils literal notranslate"><span class="pre">binaryninja.flowgraph.CoreFlowGraph</span></code></a>(handle)</td>
<td></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="binaryninja.flowgraph.FlowGraph.html#binaryninja.flowgraph.FlowGraph" title="binaryninja.flowgraph.FlowGraph"><code class="xref py py-obj docutils literal notranslate"><span class="pre">binaryninja.flowgraph.FlowGraph</span></code></a>([handle])</td>
<td><code class="docutils literal notranslate"><span class="pre">class</span> <span class="pre">FlowGraph</span></code> implements a directed flow graph to be shown in the UI.</td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="binaryninja.flowgraph.FlowGraphEdge.html#binaryninja.flowgraph.FlowGraphEdge" title="binaryninja.flowgraph.FlowGraphEdge"><code class="xref py py-obj docutils literal notranslate"><span class="pre">binaryninja.flowgraph.FlowGraphEdge</span></code></a>(…)</td>
<td></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="binaryninja.flowgraph.FlowGraphLayoutRequest.html#binaryninja.flowgraph.FlowGraphLayoutRequest" title="binaryninja.flowgraph.FlowGraphLayoutRequest"><code class="xref py py-obj docutils literal notranslate"><span class="pre">binaryninja.flowgraph.FlowGraphLayoutRequest</span></code></a>(graph)</td>
<td></td>
</tr>
<tr class="row-odd"><td><a class="reference internal" href="binaryninja.flowgraph.FlowGraphNode.html#binaryninja.flowgraph.FlowGraphNode" title="binaryninja.flowgraph.FlowGraphNode"><code class="xref py py-obj docutils literal notranslate"><span class="pre">binaryninja.flowgraph.FlowGraphNode</span></code></a>([graph,&nbsp;…])</td>
<td></td>
</tr>
<tr class="row-even"><td><a class="reference internal" href="binaryninja.flowgraph.range.html#binaryninja.flowgraph.range" title="binaryninja.flowgraph.range"><code class="xref py py-obj docutils literal notranslate"><span class="pre">binaryninja.flowgraph.range</span></code></a>(*args)</td>
<td>A Python2 and Python3 Compatible Range Generator</td>
</tr>
</tbody>
</table>
<div class="toctree-wrapper compound">
</div>
<span class="target" id="module-binaryninja.flowgraph"></span><dl class="class">
<dt id="binaryninja.flowgraph.CoreFlowGraph">
<em class="property">class </em><code class="descname">CoreFlowGraph</code><span class="sig-paren">(</span><em>handle</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binaryninja/flowgraph.html#CoreFlowGraph"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binaryninja.flowgraph.CoreFlowGraph" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="binaryninja.flowgraph.FlowGraph.html#binaryninja.flowgraph.FlowGraph" title="binaryninja.flowgraph.FlowGraph"><code class="xref py py-class docutils literal notranslate"><span class="pre">binaryninja.flowgraph.FlowGraph</span></code></a></p>
<dl class="method">
<dt id="binaryninja.flowgraph.CoreFlowGraph.update">
<code class="descname">update</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/binaryninja/flowgraph.html#CoreFlowGraph.update"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binaryninja.flowgraph.CoreFlowGraph.update" title="Permalink to this definition"></a></dt>
<dd><p><code class="docutils literal notranslate"><span class="pre">update</span></code> can be overridden by subclasses to allow a graph to be updated after it has been
presented in the UI. This will automatically occur if the function referenced by the <code class="docutils literal notranslate"><span class="pre">function</span></code>
property has been updated.</p>
<p>Return a new <code class="docutils literal notranslate"><span class="pre">FlowGraph</span></code> object with the new information if updates are desired. If the graph
does not need updating, <code class="docutils literal notranslate"><span class="pre">None</span></code> can be returned to leave the graph in its current state.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">Updated graph, or <code class="docutils literal notranslate"><span class="pre">None</span></code></td>
</tr>
<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference internal" href="binaryninja.flowgraph.FlowGraph.html#binaryninja.flowgraph.FlowGraph" title="binaryninja.flowgraph.FlowGraph">FlowGraph</a></td>
</tr>
</tbody>
</table>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="binaryninja.flowgraph.FlowGraph">
<em class="property">class </em><code class="descname">FlowGraph</code><span class="sig-paren">(</span><em>handle=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binaryninja/flowgraph.html#FlowGraph"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference external" href="https://docs.python.org/2/library/functions.html#object" title="(in Python v2.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></a></p>
<p><code class="docutils literal notranslate"><span class="pre">class</span> <span class="pre">FlowGraph</span></code> implements a directed flow graph to be shown in the UI. This class allows plugins to
create custom flow graphs and render them in the UI using the flow graph report API.</p>
<p>An example of creating a flow graph and presenting it in the UI:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">graph</span> <span class="o">=</span> <span class="n">FlowGraph</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">node_a</span> <span class="o">=</span> <span class="n">FlowGraphNode</span><span class="p">(</span><span class="n">graph</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">node_a</span><span class="o">.</span><span class="n">lines</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;Node A&quot;</span><span class="p">]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">node_b</span> <span class="o">=</span> <span class="n">FlowGraphNode</span><span class="p">(</span><span class="n">graph</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">node_b</span><span class="o">.</span><span class="n">lines</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;Node B&quot;</span><span class="p">]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">node_c</span> <span class="o">=</span> <span class="n">FlowGraphNode</span><span class="p">(</span><span class="n">graph</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">node_c</span><span class="o">.</span><span class="n">lines</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;Node C&quot;</span><span class="p">]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">graph</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node_a</span><span class="p">)</span>
<span class="go">0</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">graph</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node_b</span><span class="p">)</span>
<span class="go">1</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">graph</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node_c</span><span class="p">)</span>
<span class="go">2</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">node_a</span><span class="o">.</span><span class="n">add_outgoing_edge</span><span class="p">(</span><span class="n">BranchType</span><span class="o">.</span><span class="n">UnconditionalBranch</span><span class="p">,</span> <span class="n">node_b</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">node_a</span><span class="o">.</span><span class="n">add_outgoing_edge</span><span class="p">(</span><span class="n">BranchType</span><span class="o">.</span><span class="n">UnconditionalBranch</span><span class="p">,</span> <span class="n">node_c</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">show_graph_report</span><span class="p">(</span><span class="s2">&quot;Custom Graph&quot;</span><span class="p">,</span> <span class="n">graph</span><span class="p">)</span>
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">In the current implementation, only graphs that have a single start node where all other nodes are reachable from outgoing edges can be rendered correctly. This describes the natural limitations of a control flow graph, which is what the rendering logic was designed for. Graphs that have nodes that are only reachable from incoming edges, or graphs that have disjoint subgraphs will not render correctly. This will be fixed in a future version.</p>
</div>
<dl class="method">
<dt id="binaryninja.flowgraph.FlowGraph.append">
<code class="descname">append</code><span class="sig-paren">(</span><em>node</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binaryninja/flowgraph.html#FlowGraph.append"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.append" title="Permalink to this definition"></a></dt>
<dd><p><code class="docutils literal notranslate"><span class="pre">append</span></code> adds a node to a flow graph.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>node</strong> (<a class="reference internal" href="binaryninja.flowgraph.FlowGraphNode.html#binaryninja.flowgraph.FlowGraphNode" title="binaryninja.flowgraph.FlowGraphNode"><em>FlowGraphNode</em></a>) Node to add</td>
</tr>
<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">Index of node</td>
</tr>
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="https://docs.python.org/2/library/functions.html#int" title="(in Python v2.7)">int</a></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="method">
<dt id="binaryninja.flowgraph.FlowGraph.complete_layout">
<code class="descname">complete_layout</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/binaryninja/flowgraph.html#FlowGraph.complete_layout"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.complete_layout" title="Permalink to this definition"></a></dt>
<dd><p><code class="docutils literal notranslate"><span class="pre">complete_layout</span></code> can be overridden by subclasses and is called when a graph layout is completed.</p>
</dd></dl>
<dl class="method">
<dt id="binaryninja.flowgraph.FlowGraph.finish_prepare_for_layout">
<code class="descname">finish_prepare_for_layout</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/binaryninja/flowgraph.html#FlowGraph.finish_prepare_for_layout"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.finish_prepare_for_layout" title="Permalink to this definition"></a></dt>
<dd><p><code class="docutils literal notranslate"><span class="pre">finish_prepare_for_layout</span></code> signals that preparations for rendering a graph are complete.
This method should only be called by a <code class="docutils literal notranslate"><span class="pre">prepare_for_layout</span></code> reimplementation.</p>
</dd></dl>
<dl class="method">
<dt id="binaryninja.flowgraph.FlowGraph.get_nodes_in_region">
<code class="descname">get_nodes_in_region</code><span class="sig-paren">(</span><em>left</em>, <em>top</em>, <em>right</em>, <em>bottom</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binaryninja/flowgraph.html#FlowGraph.get_nodes_in_region"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.get_nodes_in_region" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="binaryninja.flowgraph.FlowGraph.layout">
<code class="descname">layout</code><span class="sig-paren">(</span><em>callback=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binaryninja/flowgraph.html#FlowGraph.layout"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.layout" title="Permalink to this definition"></a></dt>
<dd><p><code class="docutils literal notranslate"><span class="pre">layout</span></code> starts rendering a graph for display. Once a layout is complete, each node will contain
coordinates and extents that can be used to render a graph with minimum additional computation.
This function does not wait for the graph to be ready to display, but a callback can be provided
to signal when the graph is ready.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>callback</strong> (<em>callable</em><em>(</em><em>)</em>) Function to be called when the graph is ready to display</td>
</tr>
<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">Pending flow graph layout request object</td>
</tr>
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference internal" href="binaryninja.flowgraph.FlowGraphLayoutRequest.html#binaryninja.flowgraph.FlowGraphLayoutRequest" title="binaryninja.flowgraph.FlowGraphLayoutRequest">FlowGraphLayoutRequest</a></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="method">
<dt id="binaryninja.flowgraph.FlowGraph.layout_and_wait">
<code class="descname">layout_and_wait</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/binaryninja/flowgraph.html#FlowGraph.layout_and_wait"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.layout_and_wait" title="Permalink to this definition"></a></dt>
<dd><p><code class="docutils literal notranslate"><span class="pre">layout_and_wait</span></code> starts rendering a graph for display, and waits for the graph to be ready to
display. After this function returns, each node will contain coordinates and extents that can be
used to render a graph with minimum additional computation.</p>
<p>Do not use this API on the UI thread (use <code class="docutils literal notranslate"><span class="pre">layout</span></code> with a callback instead).</p>
</dd></dl>
<dl class="method">
<dt id="binaryninja.flowgraph.FlowGraph.populate_nodes">
<code class="descname">populate_nodes</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/binaryninja/flowgraph.html#FlowGraph.populate_nodes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.populate_nodes" title="Permalink to this definition"></a></dt>
<dd><p><code class="docutils literal notranslate"><span class="pre">prepare_for_layout</span></code> can be overridden by subclasses to create nodes in a graph when a flow
graph needs to be rendered. This will happen on a worker thread and will not block the UI.</p>
</dd></dl>
<dl class="method">
<dt id="binaryninja.flowgraph.FlowGraph.prepare_for_layout">
<code class="descname">prepare_for_layout</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/binaryninja/flowgraph.html#FlowGraph.prepare_for_layout"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.prepare_for_layout" title="Permalink to this definition"></a></dt>
<dd><p><code class="docutils literal notranslate"><span class="pre">prepare_for_layout</span></code> can be overridden by subclasses to handling preparations that must take
place before a flow graph is rendered, such as waiting for a function to finish analysis. If
this function is overridden, the <code class="docutils literal notranslate"><span class="pre">finish_prepare_for_layout</span></code> method must be called once
preparations are completed.</p>
</dd></dl>
<dl class="method">
<dt id="binaryninja.flowgraph.FlowGraph.show">
<code class="descname">show</code><span class="sig-paren">(</span><em>title</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binaryninja/flowgraph.html#FlowGraph.show"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.show" title="Permalink to this definition"></a></dt>
<dd><p><code class="docutils literal notranslate"><span class="pre">show</span></code> displays the graph in a new tab in the UI.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>title</strong> (<a class="reference external" href="https://docs.python.org/2/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) Title to show in the new tab</td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="method">
<dt id="binaryninja.flowgraph.FlowGraph.update">
<code class="descname">update</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/binaryninja/flowgraph.html#FlowGraph.update"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.update" title="Permalink to this definition"></a></dt>
<dd><p><code class="docutils literal notranslate"><span class="pre">update</span></code> can be overridden by subclasses to allow a graph to be updated after it has been
presented in the UI. This will automatically occur if the function referenced by the <code class="docutils literal notranslate"><span class="pre">function</span></code>
property has been updated.</p>
<p>Return a new <code class="docutils literal notranslate"><span class="pre">FlowGraph</span></code> object with the new information if updates are desired. If the graph
does not need updating, <code class="docutils literal notranslate"><span class="pre">None</span></code> can be returned to leave the graph in its current state.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">Updated graph, or <code class="docutils literal notranslate"><span class="pre">None</span></code></td>
</tr>
<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference internal" href="binaryninja.flowgraph.FlowGraph.html#binaryninja.flowgraph.FlowGraph" title="binaryninja.flowgraph.FlowGraph">FlowGraph</a></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraph.complete">
<code class="descname">complete</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.complete" title="Permalink to this definition"></a></dt>
<dd><p>Whether flow graph layout is complete (read-only)</p>
</dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraph.function">
<code class="descname">function</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.function" title="Permalink to this definition"></a></dt>
<dd><p>Function for a flow graph</p>
</dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraph.has_nodes">
<code class="descname">has_nodes</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.has_nodes" title="Permalink to this definition"></a></dt>
<dd><p>Whether the flow graph has at least one node (read-only)</p>
</dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraph.height">
<code class="descname">height</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.height" title="Permalink to this definition"></a></dt>
<dd><p>Flow graph height (read-only)</p>
</dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraph.horizontal_block_margin">
<code class="descname">horizontal_block_margin</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.horizontal_block_margin" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraph.il_function">
<code class="descname">il_function</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.il_function" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraph.is_il">
<code class="descname">is_il</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.is_il" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraph.is_low_level_il">
<code class="descname">is_low_level_il</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.is_low_level_il" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraph.is_medium_level_il">
<code class="descname">is_medium_level_il</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.is_medium_level_il" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraph.nodes">
<code class="descname">nodes</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.nodes" title="Permalink to this definition"></a></dt>
<dd><p>List of nodes in graph (read-only)</p>
</dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraph.vertical_block_margin">
<code class="descname">vertical_block_margin</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.vertical_block_margin" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraph.width">
<code class="descname">width</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraph.width" title="Permalink to this definition"></a></dt>
<dd><p>Flow graph width (read-only)</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="binaryninja.flowgraph.FlowGraphEdge">
<em class="property">class </em><code class="descname">FlowGraphEdge</code><span class="sig-paren">(</span><em>branch_type</em>, <em>source</em>, <em>target</em>, <em>points</em>, <em>back_edge</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binaryninja/flowgraph.html#FlowGraphEdge"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binaryninja.flowgraph.FlowGraphEdge" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference external" href="https://docs.python.org/2/library/functions.html#object" title="(in Python v2.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></a></p>
</dd></dl>
<dl class="class">
<dt id="binaryninja.flowgraph.FlowGraphLayoutRequest">
<em class="property">class </em><code class="descname">FlowGraphLayoutRequest</code><span class="sig-paren">(</span><em>graph</em>, <em>callback=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binaryninja/flowgraph.html#FlowGraphLayoutRequest"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binaryninja.flowgraph.FlowGraphLayoutRequest" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference external" href="https://docs.python.org/2/library/functions.html#object" title="(in Python v2.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></a></p>
<dl class="method">
<dt id="binaryninja.flowgraph.FlowGraphLayoutRequest.abort">
<code class="descname">abort</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/binaryninja/flowgraph.html#FlowGraphLayoutRequest.abort"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binaryninja.flowgraph.FlowGraphLayoutRequest.abort" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraphLayoutRequest.complete">
<code class="descname">complete</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraphLayoutRequest.complete" title="Permalink to this definition"></a></dt>
<dd><p>Whether flow graph layout is complete (read-only)</p>
</dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraphLayoutRequest.graph">
<code class="descname">graph</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraphLayoutRequest.graph" title="Permalink to this definition"></a></dt>
<dd><p>Flow graph that is being processed (read-only)</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="binaryninja.flowgraph.FlowGraphNode">
<em class="property">class </em><code class="descname">FlowGraphNode</code><span class="sig-paren">(</span><em>graph=None</em>, <em>handle=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binaryninja/flowgraph.html#FlowGraphNode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binaryninja.flowgraph.FlowGraphNode" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference external" href="https://docs.python.org/2/library/functions.html#object" title="(in Python v2.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></a></p>
<dl class="method">
<dt id="binaryninja.flowgraph.FlowGraphNode.add_outgoing_edge">
<code class="descname">add_outgoing_edge</code><span class="sig-paren">(</span><em>edge_type</em>, <em>target</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binaryninja/flowgraph.html#FlowGraphNode.add_outgoing_edge"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binaryninja.flowgraph.FlowGraphNode.add_outgoing_edge" title="Permalink to this definition"></a></dt>
<dd><p><code class="docutils literal notranslate"><span class="pre">add_outgoing_edge</span></code> connects two flow graph nodes with an edge.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
<li><strong>edge_type</strong> (<a class="reference internal" href="binaryninja.enums.BranchType.html#binaryninja.enums.BranchType" title="binaryninja.enums.BranchType"><em>BranchType</em></a>) Type of edge to add</li>
<li><strong>target</strong> (<a class="reference internal" href="binaryninja.flowgraph.FlowGraphNode.html#binaryninja.flowgraph.FlowGraphNode" title="binaryninja.flowgraph.FlowGraphNode"><em>FlowGraphNode</em></a>) Target node object</li>
</ul>
</td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraphNode.basic_block">
<code class="descname">basic_block</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraphNode.basic_block" title="Permalink to this definition"></a></dt>
<dd><p>Basic block associated with this part of the flow graph</p>
</dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraphNode.height">
<code class="descname">height</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraphNode.height" title="Permalink to this definition"></a></dt>
<dd><p>Flow graph block height (read-only)</p>
</dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraphNode.highlight">
<code class="descname">highlight</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraphNode.highlight" title="Permalink to this definition"></a></dt>
<dd><p>Gets or sets the highlight color for the node</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Example:</th><td class="field-body"><div class="first last highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">g</span> <span class="o">=</span> <span class="n">FlowGraph</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">node</span> <span class="o">=</span> <span class="n">FlowGraphNode</span><span class="p">(</span><span class="n">g</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">node</span><span class="o">.</span><span class="n">highlight</span> <span class="o">=</span> <span class="n">HighlightStandardColor</span><span class="o">.</span><span class="n">BlueHighlightColor</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">node</span><span class="o">.</span><span class="n">highlight</span>
<span class="go">&lt;color: blue&gt;</span>
</pre></div>
</div>
</td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraphNode.lines">
<code class="descname">lines</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraphNode.lines" title="Permalink to this definition"></a></dt>
<dd><p>Flow graph block list of text lines</p>
</dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraphNode.outgoing_edges">
<code class="descname">outgoing_edges</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraphNode.outgoing_edges" title="Permalink to this definition"></a></dt>
<dd><p>Flow graph block list of outgoing edges (read-only)</p>
</dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraphNode.width">
<code class="descname">width</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraphNode.width" title="Permalink to this definition"></a></dt>
<dd><p>Flow graph block width (read-only)</p>
</dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraphNode.x">
<code class="descname">x</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraphNode.x" title="Permalink to this definition"></a></dt>
<dd><p>Flow graph block X (read-only)</p>
</dd></dl>
<dl class="attribute">
<dt id="binaryninja.flowgraph.FlowGraphNode.y">
<code class="descname">y</code><a class="headerlink" href="#binaryninja.flowgraph.FlowGraphNode.y" title="Permalink to this definition"></a></dt>
<dd><p>Flow graph block Y (read-only)</p>
</dd></dl>
</dd></dl>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="binaryninja.flowgraph.CoreFlowGraph.html" class="btn btn-neutral float-right" title="binaryninja.flowgraph.CoreFlowGraph" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="binaryninja.filemetadata.NavigationHandler.html" class="btn btn-neutral" title="binaryninja.filemetadata.NavigationHandler" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2015-2019, Vector 35 Inc.
</p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
</body>
</html>