Added binja personal

This commit is contained in:
Giulio De Pasquale 2019-04-03 14:46:40 +01:00
parent 63e09ec72d
commit aba2b82010
1278 changed files with 261592 additions and 0 deletions

View File

@ -0,0 +1,249 @@
<!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>Architecture &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"/>
<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>
<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"><a class="reference internal" href="binaryninja.flowgraph-module.html">flowgraph</a></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>Architecture</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/Architecture_c++.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="architecture">
<h1>Architecture<a class="headerlink" href="#architecture" title="Permalink to this headline"></a></h1>
<div class="admonition warning">
<p class="first admonition-title">Warning</p>
<p class="last">doxygenclass: Cannot find file: /var/lib/jenkins/jobs/binaryninja-personal/workspace/os/linux/api/xml/index.xml</p>
</div>
</div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,249 @@
<!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>BinaryView &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"/>
<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>
<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"><a class="reference internal" href="binaryninja.flowgraph-module.html">flowgraph</a></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>BinaryView</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/BinaryView_c++.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="binaryview">
<h1>BinaryView<a class="headerlink" href="#binaryview" title="Permalink to this headline"></a></h1>
<div class="admonition warning">
<p class="first admonition-title">Warning</p>
<p class="last">doxygenclass: Cannot find file: /var/lib/jenkins/jobs/binaryninja-personal/workspace/os/linux/api/xml/index.xml</p>
</div>
</div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,294 @@
<!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>Console Logging &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"/>
<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>
<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"><a class="reference internal" href="binaryninja.flowgraph-module.html">flowgraph</a></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>Console Logging</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/ConsoleLogging_c++.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="console-logging">
<h1>Console Logging<a class="headerlink" href="#console-logging" title="Permalink to this headline"></a></h1>
<div class="section" id="bnloglevel">
<h2>BNLogLevel<a class="headerlink" href="#bnloglevel" title="Permalink to this headline"></a></h2>
<div class="admonition warning">
<p class="first admonition-title">Warning</p>
<p class="last">doxygenenum: Cannot find file: /var/lib/jenkins/jobs/binaryninja-personal/workspace/os/linux/api/xml/index.xml</p>
</div>
</div>
<div class="section" id="log">
<h2>Log<a class="headerlink" href="#log" title="Permalink to this headline"></a></h2>
<div class="admonition warning">
<p class="first admonition-title">Warning</p>
<p class="last">doxygenfunction: Cannot find file: /var/lib/jenkins/jobs/binaryninja-personal/workspace/os/linux/api/xml/index.xml</p>
</div>
</div>
<div class="section" id="logdebug">
<h2>LogDebug<a class="headerlink" href="#logdebug" title="Permalink to this headline"></a></h2>
<div class="admonition warning">
<p class="first admonition-title">Warning</p>
<p class="last">doxygenfunction: Cannot find file: /var/lib/jenkins/jobs/binaryninja-personal/workspace/os/linux/api/xml/index.xml</p>
</div>
</div>
<div class="section" id="loginfo">
<h2>LogInfo<a class="headerlink" href="#loginfo" title="Permalink to this headline"></a></h2>
<div class="admonition warning">
<p class="first admonition-title">Warning</p>
<p class="last">doxygenfunction: Cannot find file: /var/lib/jenkins/jobs/binaryninja-personal/workspace/os/linux/api/xml/index.xml</p>
</div>
</div>
<div class="section" id="logwarn">
<h2>LogWarn<a class="headerlink" href="#logwarn" title="Permalink to this headline"></a></h2>
<div class="admonition warning">
<p class="first admonition-title">Warning</p>
<p class="last">doxygenfunction: Cannot find file: /var/lib/jenkins/jobs/binaryninja-personal/workspace/os/linux/api/xml/index.xml</p>
</div>
</div>
<div class="section" id="logerror">
<h2>LogError<a class="headerlink" href="#logerror" title="Permalink to this headline"></a></h2>
<div class="admonition warning">
<p class="first admonition-title">Warning</p>
<p class="last">doxygenfunction: Cannot find file: /var/lib/jenkins/jobs/binaryninja-personal/workspace/os/linux/api/xml/index.xml</p>
</div>
</div>
<div class="section" id="logalert">
<h2>LogAlert<a class="headerlink" href="#logalert" title="Permalink to this headline"></a></h2>
<div class="admonition warning">
<p class="first admonition-title">Warning</p>
<p class="last">doxygenfunction: Cannot find file: /var/lib/jenkins/jobs/binaryninja-personal/workspace/os/linux/api/xml/index.xml</p>
</div>
</div>
</div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,249 @@
<!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>Platform &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"/>
<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>
<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"><a class="reference internal" href="binaryninja.flowgraph-module.html">flowgraph</a></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>Platform</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/Platform_c++.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="platform">
<h1>Platform<a class="headerlink" href="#platform" title="Permalink to this headline"></a></h1>
<div class="admonition warning">
<p class="first admonition-title">Warning</p>
<p class="last">doxygenclass: Cannot find file: /var/lib/jenkins/jobs/binaryninja-personal/workspace/os/linux/api/xml/index.xml</p>
</div>
</div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,545 @@
<!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>binaryninja &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="up" title="Module code" href="index.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>
<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"><a class="reference internal" href="../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="index.html">Module code</a> &raquo;</li>
<li>binaryninja</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span>
<span class="kn">import</span> <span class="nn">atexit</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">from</span> <span class="nn">time</span> <span class="k">import</span> <span class="n">gmtime</span>
<span class="c1"># 2-3 compatibility</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">builtins</span> <span class="c1"># __builtins__ for python2</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
<span class="k">pass</span>
<div class="viewcode-block" id="range"><a class="viewcode-back" href="../index.html#binaryninja.architecture.range">[docs]</a><span class="k">def</span> <span class="nf">range</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot; A Python2 and Python3 Compatible Range Generator &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="n">xrange</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span>
<span class="k">return</span> <span class="n">builtins</span><span class="o">.</span><span class="n">range</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span></div>
<div class="viewcode-block" id="with_metaclass"><a class="viewcode-back" href="../index.html#binaryninja.architecture.with_metaclass">[docs]</a><span class="k">def</span> <span class="nf">with_metaclass</span><span class="p">(</span><span class="n">meta</span><span class="p">,</span> <span class="o">*</span><span class="n">bases</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Create a base class with a metaclass.&quot;&quot;&quot;</span>
<span class="k">class</span> <span class="nc">metaclass</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">this_bases</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
<span class="k">return</span> <span class="n">meta</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">bases</span><span class="p">,</span> <span class="n">d</span><span class="p">)</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">__prepare__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">this_bases</span><span class="p">):</span>
<span class="k">return</span> <span class="n">meta</span><span class="o">.</span><span class="fm">__prepare__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">bases</span><span class="p">)</span>
<span class="k">return</span> <span class="nb">type</span><span class="o">.</span><span class="fm">__new__</span><span class="p">(</span><span class="n">metaclass</span><span class="p">,</span> <span class="s1">&#39;temporary_class&#39;</span><span class="p">,</span> <span class="p">(),</span> <span class="p">{})</span></div>
<span class="k">try</span><span class="p">:</span>
<span class="n">long</span> <span class="o">=</span> <span class="n">long</span>
<span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span>
<span class="n">long</span> <span class="o">=</span> <span class="nb">int</span>
<div class="viewcode-block" id="cstr"><a class="viewcode-back" href="../index.html#binaryninja.architecture.cstr">[docs]</a><span class="k">def</span> <span class="nf">cstr</span><span class="p">(</span><span class="n">arg</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">)</span> <span class="ow">or</span> <span class="n">arg</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="n">arg</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">arg</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;charmap&#39;</span><span class="p">)</span></div>
<div class="viewcode-block" id="pyNativeStr"><a class="viewcode-back" href="../index.html#binaryninja.architecture.pyNativeStr">[docs]</a><span class="k">def</span> <span class="nf">pyNativeStr</span><span class="p">(</span><span class="n">arg</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="k">return</span> <span class="n">arg</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">arg</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">&#39;charmap&#39;</span><span class="p">)</span></div>
<span class="c1"># Binary Ninja components</span>
<span class="kn">import</span> <span class="nn">binaryninja._binaryninjacore</span> <span class="k">as</span> <span class="nn">core</span>
<span class="c1"># __all__ = [</span>
<span class="c1"># &quot;enums&quot;,</span>
<span class="c1"># &quot;databuffer&quot;,</span>
<span class="c1"># &quot;filemetadata&quot;,</span>
<span class="c1"># &quot;fileaccessor&quot;,</span>
<span class="c1"># &quot;binaryview&quot;,</span>
<span class="c1"># &quot;transform&quot;,</span>
<span class="c1"># &quot;architecture&quot;,</span>
<span class="c1"># &quot;basicblock&quot;,</span>
<span class="c1"># &quot;function&quot;,</span>
<span class="c1"># &quot;log&quot;,</span>
<span class="c1"># &quot;lowlevelil&quot;,</span>
<span class="c1"># &quot;mediumlevelil&quot;,</span>
<span class="c1"># &quot;types&quot;,</span>
<span class="c1"># &quot;functionrecognizer&quot;,</span>
<span class="c1"># &quot;update&quot;,</span>
<span class="c1"># &quot;plugin&quot;,</span>
<span class="c1"># &quot;callingconvention&quot;,</span>
<span class="c1"># &quot;platform&quot;,</span>
<span class="c1"># &quot;demangle&quot;,</span>
<span class="c1"># &quot;mainthread&quot;,</span>
<span class="c1"># &quot;interaction&quot;,</span>
<span class="c1"># &quot;lineardisassembly&quot;,</span>
<span class="c1"># &quot;undoaction&quot;,</span>
<span class="c1"># &quot;highlight&quot;,</span>
<span class="c1"># &quot;scriptingprovider&quot;,</span>
<span class="c1"># &quot;pluginmanager&quot;,</span>
<span class="c1"># &quot;setting&quot;,</span>
<span class="c1"># &quot;metadata&quot;,</span>
<span class="c1"># &quot;flowgraph&quot;,</span>
<span class="c1"># ]</span>
<span class="kn">from</span> <span class="nn">binaryninja.enums</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.databuffer</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.filemetadata</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.fileaccessor</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.binaryview</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.transform</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.architecture</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.basicblock</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.function</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.log</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.lowlevelil</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.mediumlevelil</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.types</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.functionrecognizer</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.update</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.plugin</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.callingconvention</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.platform</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.demangle</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.mainthread</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.interaction</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.lineardisassembly</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.undoaction</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.highlight</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.scriptingprovider</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.downloadprovider</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.pluginmanager</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.settings</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.metadata</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.flowgraph</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">binaryninja.datarender</span> <span class="k">import</span> <span class="o">*</span>
<div class="viewcode-block" id="shutdown"><a class="viewcode-back" href="../index.html#binaryninja.architecture.shutdown">[docs]</a><span class="k">def</span> <span class="nf">shutdown</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``shutdown`` cleanly shuts down the core, stopping all workers and closing all log files.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNShutdown</span><span class="p">()</span></div>
<span class="n">atexit</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">shutdown</span><span class="p">)</span>
<div class="viewcode-block" id="get_unique_identifier"><a class="viewcode-back" href="../index.html#binaryninja.architecture.get_unique_identifier">[docs]</a><span class="k">def</span> <span class="nf">get_unique_identifier</span><span class="p">():</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetUniqueIdentifierString</span><span class="p">()</span></div>
<div class="viewcode-block" id="get_install_directory"><a class="viewcode-back" href="../index.html#binaryninja.architecture.get_install_directory">[docs]</a><span class="k">def</span> <span class="nf">get_install_directory</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``get_install_directory`` returns a string pointing to the installed binary currently running</span>
<span class="sd"> ..warning:: ONLY for use within the Binary Ninja UI, behavior is undefined and unreliable if run headlessly</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetInstallDirectory</span><span class="p">()</span></div>
<span class="n">_plugin_api_name</span> <span class="o">=</span> <span class="s2">&quot;python2&quot;</span>
<div class="viewcode-block" id="PluginManagerLoadPluginCallback"><a class="viewcode-back" href="../index.html#binaryninja.architecture.PluginManagerLoadPluginCallback">[docs]</a><span class="k">class</span> <span class="nc">PluginManagerLoadPluginCallback</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Callback for BNLoadPluginForApi(&quot;python2&quot;, ...), dynamically loads python plugins.&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cb</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span>
<span class="n">ctypes</span><span class="o">.</span><span class="n">c_bool</span><span class="p">,</span>
<span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span><span class="p">,</span>
<span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span><span class="p">,</span>
<span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">_load_plugin</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_load_plugin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">repo_path</span><span class="p">,</span> <span class="n">plugin_path</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">repo</span> <span class="o">=</span> <span class="n">RepositoryManager</span><span class="p">()[</span><span class="n">repo_path</span><span class="p">]</span>
<span class="n">plugin</span> <span class="o">=</span> <span class="n">repo</span><span class="p">[</span><span class="n">plugin_path</span><span class="p">]</span>
<span class="k">if</span> <span class="n">plugin</span><span class="o">.</span><span class="n">api</span> <span class="o">!=</span> <span class="n">_plugin_api_name</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Plugin API name is not &quot;</span> <span class="o">+</span> <span class="n">_plugin_api_name</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">plugin</span><span class="o">.</span><span class="n">installed</span><span class="p">:</span>
<span class="n">plugin</span><span class="o">.</span><span class="n">installed</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">full_path</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="p">:</span>
<span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">repo</span><span class="o">.</span><span class="n">full_path</span><span class="p">)</span>
<span class="nb">__import__</span><span class="p">(</span><span class="n">plugin</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
<span class="n">log_info</span><span class="p">(</span><span class="s2">&quot;Successfully loaded plugin: </span><span class="si">{}</span><span class="s2">/</span><span class="si">{}</span><span class="s2">: &quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">repo_path</span><span class="p">,</span> <span class="n">plugin_path</span><span class="p">))</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
<span class="n">log_error</span><span class="p">(</span><span class="s2">&quot;Failed to find python plugin: </span><span class="si">{}</span><span class="s2">/</span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">repo_path</span><span class="p">,</span> <span class="n">plugin_path</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">ImportError</span> <span class="k">as</span> <span class="n">ie</span><span class="p">:</span>
<span class="n">log_error</span><span class="p">(</span><span class="s2">&quot;Failed to import python plugin: </span><span class="si">{}</span><span class="s2">/</span><span class="si">{}</span><span class="s2">: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">repo_path</span><span class="p">,</span> <span class="n">plugin_path</span><span class="p">,</span> <span class="n">ie</span><span class="p">))</span>
<span class="k">return</span> <span class="kc">False</span></div>
<span class="n">load_plugin</span> <span class="o">=</span> <span class="n">PluginManagerLoadPluginCallback</span><span class="p">()</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterForPluginLoading</span><span class="p">(</span><span class="n">_plugin_api_name</span><span class="p">,</span> <span class="n">load_plugin</span><span class="o">.</span><span class="n">cb</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">_DestructionCallbackHandler</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNObjectDestructionCallbacks</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">context</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">destructBinaryView</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">destructBinaryView</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">destruct_binary_view</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">destructFileMetadata</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">destructFileMetadata</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">destruct_file_metadata</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">destructFunction</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">destructFunction</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">destruct_function</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterObjectDestructionCallbacks</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">destruct_binary_view</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">):</span>
<span class="n">BinaryView</span><span class="o">.</span><span class="n">_unregister</span><span class="p">(</span><span class="n">view</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">destruct_file_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">f</span><span class="p">):</span>
<span class="n">FileMetadata</span><span class="o">.</span><span class="n">_unregister</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">destruct_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="n">Function</span><span class="o">.</span><span class="n">_unregister</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
<span class="n">_plugin_init</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">_init_plugins</span><span class="p">():</span>
<span class="k">global</span> <span class="n">_plugin_init</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_plugin_init</span><span class="p">:</span>
<span class="n">_plugin_init</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNInitCorePlugins</span><span class="p">()</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNInitUserPlugins</span><span class="p">()</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNInitRepoPlugins</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsLicenseValidated</span><span class="p">():</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;License is not valid. Please supply a valid license.&quot;</span><span class="p">)</span>
<span class="n">_destruct_callbacks</span> <span class="o">=</span> <span class="n">_DestructionCallbackHandler</span><span class="p">()</span>
<div class="viewcode-block" id="bundled_plugin_path"><a class="viewcode-back" href="../index.html#binaryninja.architecture.bundled_plugin_path">[docs]</a><span class="k">def</span> <span class="nf">bundled_plugin_path</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``bundled_plugin_path`` returns a string containing the current plugin path inside the `install path &lt;https://docs.binary.ninja/getting-started.html#binary-path&gt;`_</span>
<span class="sd"> :return: current bundled plugin path</span>
<span class="sd"> :rtype: str, or None on failure</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBundledPluginDirectory</span><span class="p">()</span></div>
<div class="viewcode-block" id="user_plugin_path"><a class="viewcode-back" href="../index.html#binaryninja.architecture.user_plugin_path">[docs]</a><span class="k">def</span> <span class="nf">user_plugin_path</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``user_plugin_path`` returns a string containing the current plugin path inside the `user directory &lt;https://docs.binary.ninja/getting-started.html#user-folder&gt;`_</span>
<span class="sd"> :return: current user plugin path</span>
<span class="sd"> :rtype: str, or None on failure</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetUserPluginDirectory</span><span class="p">()</span></div>
<div class="viewcode-block" id="core_version"><a class="viewcode-back" href="../index.html#binaryninja.architecture.core_version">[docs]</a><span class="k">def</span> <span class="nf">core_version</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``core_version`` returns a string containing the current version</span>
<span class="sd"> :return: current version</span>
<span class="sd"> :rtype: str, or None on failure</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetVersionString</span><span class="p">()</span></div>
<div class="viewcode-block" id="core_build_id"><a class="viewcode-back" href="../index.html#binaryninja.architecture.core_build_id">[docs]</a><span class="k">def</span> <span class="nf">core_build_id</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``core_build_id`` returns a string containing the current build id</span>
<span class="sd"> :return: current build id</span>
<span class="sd"> :rtype: str, or None on failure</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNGetBuildId</span><span class="p">()</span></div>
<div class="viewcode-block" id="core_serial"><a class="viewcode-back" href="../index.html#binaryninja.architecture.core_serial">[docs]</a><span class="k">def</span> <span class="nf">core_serial</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``core_serial`` returns a string containing the current serial number</span>
<span class="sd"> :return: current serial</span>
<span class="sd"> :rtype: str, or None on failure</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetSerialNumber</span><span class="p">()</span></div>
<div class="viewcode-block" id="core_expires"><a class="viewcode-back" href="../index.html#binaryninja.architecture.core_expires">[docs]</a><span class="k">def</span> <span class="nf">core_expires</span><span class="p">():</span>
<span class="sd">&#39;&#39;&#39;License Expiration&#39;&#39;&#39;</span>
<span class="k">return</span> <span class="n">gmtime</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNGetLicenseExpirationTime</span><span class="p">())</span></div>
<div class="viewcode-block" id="core_product"><a class="viewcode-back" href="../index.html#binaryninja.architecture.core_product">[docs]</a><span class="k">def</span> <span class="nf">core_product</span><span class="p">():</span>
<span class="sd">&#39;&#39;&#39;Product string from the license file&#39;&#39;&#39;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetProduct</span><span class="p">()</span></div>
<div class="viewcode-block" id="core_product_type"><a class="viewcode-back" href="../index.html#binaryninja.architecture.core_product_type">[docs]</a><span class="k">def</span> <span class="nf">core_product_type</span><span class="p">():</span>
<span class="sd">&#39;&#39;&#39;Product type from the license file&#39;&#39;&#39;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetProductType</span><span class="p">()</span></div>
<div class="viewcode-block" id="core_license_count"><a class="viewcode-back" href="../index.html#binaryninja.architecture.core_license_count">[docs]</a><span class="k">def</span> <span class="nf">core_license_count</span><span class="p">():</span>
<span class="sd">&#39;&#39;&#39;License count from the license file&#39;&#39;&#39;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetLicenseCount</span><span class="p">()</span></div>
<div class="viewcode-block" id="core_ui_enabled"><a class="viewcode-back" href="../index.html#binaryninja.architecture.core_ui_enabled">[docs]</a><span class="k">def</span> <span class="nf">core_ui_enabled</span><span class="p">():</span>
<span class="sd">&#39;&#39;&#39;Indicates that a UI exists and the UI has invoked BNInitUI&#39;&#39;&#39;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsUIEnabled</span><span class="p">()</span></div>
</pre></div>
</div>
</div>
<footer>
<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>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,668 @@
<!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>binaryninja.basicblock &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.basicblock</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.basicblock</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="c1"># Binary Ninja components</span>
<span class="kn">import</span> <span class="nn">binaryninja</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">highlight</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<span class="kn">from</span> <span class="nn">binaryninja.enums</span> <span class="k">import</span> <span class="n">BranchType</span><span class="p">,</span> <span class="n">HighlightColorStyle</span><span class="p">,</span> <span class="n">HighlightStandardColor</span><span class="p">,</span> <span class="n">InstructionTextTokenType</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">log</span>
<span class="c1"># 2-3 compatibility</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="nb">range</span>
<div class="viewcode-block" id="BasicBlockEdge"><a class="viewcode-back" href="../../binaryninja.basicblock.BasicBlockEdge.html#binaryninja.basicblock.BasicBlockEdge">[docs]</a><span class="k">class</span> <span class="nc">BasicBlockEdge</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="BasicBlockEdge.__init__"><a class="viewcode-back" href="../../binaryninja.basicblock.BasicBlockEdge.html#binaryninja.basicblock.BasicBlockEdge.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">branch_type</span><span class="p">,</span> <span class="n">source</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">back_edge</span><span class="p">,</span> <span class="n">fall_through</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">branch_type</span>
<span class="bp">self</span><span class="o">.</span><span class="n">source</span> <span class="o">=</span> <span class="n">source</span>
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">target</span>
<span class="bp">self</span><span class="o">.</span><span class="n">back_edge</span> <span class="o">=</span> <span class="n">back_edge</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fall_through</span> <span class="o">=</span> <span class="n">fall_through</span></div>
<span class="k">def</span> <span class="nf">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">BasicBlockEdge</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">source</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">back_edge</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">fall_through</span><span class="p">)</span> <span class="o">==</span> <span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">value</span><span class="o">.</span><span class="n">source</span><span class="p">,</span> <span class="n">value</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="n">value</span><span class="o">.</span><span class="n">back_edge</span><span class="p">,</span> <span class="n">value</span><span class="o">.</span><span class="n">fall_through</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">hash</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">source</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">back_edge</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">fall_through</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">BranchType</span><span class="o">.</span><span class="n">UnresolvedBranch</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">%s</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="n">BranchType</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">)</span><span class="o">.</span><span class="n">name</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">arch</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">@</span><span class="si">%#x</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">BranchType</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">)</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">start</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">%s</span><span class="s2">: </span><span class="si">%#x</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">BranchType</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">)</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">start</span><span class="p">)</span></div>
<div class="viewcode-block" id="BasicBlock"><a class="viewcode-back" href="../../binaryninja.basicblock.BasicBlock.html#binaryninja.basicblock.BasicBlock">[docs]</a><span class="k">class</span> <span class="nc">BasicBlock</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="BasicBlock.__init__"><a class="viewcode-back" href="../../binaryninja.basicblock.BasicBlock.html#binaryninja.basicblock.BasicBlock.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">,</span> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_view</span> <span class="o">=</span> <span class="n">view</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">handle_of_type</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNBasicBlock</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_arch</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_func</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_instStarts</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_instLengths</span> <span class="o">=</span> <span class="kc">None</span></div>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeBasicBlock</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">BasicBlock</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span> <span class="o">==</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__ne__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">BasicBlock</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span> <span class="o">!=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="nb">object</span><span class="o">.</span><span class="fm">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="s2">&quot;attribute &#39;</span><span class="si">%s</span><span class="s2">&#39; is read only&quot;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockLength</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">arch</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span>
<span class="k">if</span> <span class="n">arch</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;&lt;block: </span><span class="si">%s</span><span class="s2">@</span><span class="si">%#x</span><span class="s2">-</span><span class="si">%#x</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">arch</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">end</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;&lt;block: </span><span class="si">%#x</span><span class="s2">-</span><span class="si">%#x</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">end</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_instStarts</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># don&#39;t and instruction start cache the object is likely ephemeral</span>
<span class="n">idx</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">start</span>
<span class="k">while</span> <span class="n">idx</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">end</span><span class="p">:</span>
<span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">idx</span><span class="p">,</span> <span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">max_instr_length</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">end</span> <span class="o">-</span> <span class="n">idx</span><span class="p">))</span>
<span class="n">inst_text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">get_instruction_text</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">idx</span><span class="p">)</span>
<span class="k">if</span> <span class="n">inst_text</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">yield</span> <span class="n">inst_text</span>
<span class="n">idx</span> <span class="o">+=</span> <span class="n">inst_text</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">length</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_instStarts</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_instLengths</span><span class="p">):</span>
<span class="n">inst_text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">get_instruction_text</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">length</span><span class="p">),</span> <span class="n">start</span><span class="p">)</span>
<span class="k">if</span> <span class="n">inst_text</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">yield</span> <span class="n">inst_text</span>
<span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_buildStartCache</span><span class="p">()</span>
<span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_instStarts</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">length</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_instLengths</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">length</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">get_instruction_text</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">start</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">hash</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">end</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">_buildStartCache</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_instStarts</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># build the instruction start cache</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_instLengths</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_instStarts</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">start</span>
<span class="k">while</span> <span class="n">start</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">end</span><span class="p">:</span>
<span class="n">length</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">get_instruction_length</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_instLengths</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">length</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_instStarts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
<span class="n">start</span> <span class="o">+=</span> <span class="n">length</span>
<span class="k">def</span> <span class="nf">_create_instance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">,</span> <span class="n">view</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Internal method used to instantiate child instances&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">BasicBlock</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">view</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">instruction_count</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_buildStartCache</span><span class="p">()</span>
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_instStarts</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">function</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Basic block function (read-only)&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_func</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_func</span>
<span class="n">func</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockFunction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="n">func</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_func</span> <span class="o">=</span><span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_view</span><span class="p">,</span> <span class="n">func</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_func</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">view</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Binary view that contains the basic block (read-ony)&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_view</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_view</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">view</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_view</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">arch</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Basic block architecture (read-only)&quot;&quot;&quot;</span>
<span class="c1"># The arch for a BasicBlock isn&#39;t going to change so just cache</span>
<span class="c1"># it the first time we need it</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_arch</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_arch</span>
<span class="n">arch</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockArchitecture</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="n">arch</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_arch</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">architecture</span><span class="o">.</span><span class="n">CoreArchitecture</span><span class="o">.</span><span class="n">_from_cache</span><span class="p">(</span><span class="n">arch</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_arch</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">source_block</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Basic block source block (read-only)&quot;&quot;&quot;</span>
<span class="n">block</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockSource</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="n">block</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">BasicBlock</span><span class="p">(</span><span class="n">block</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_view</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Basic block start (read-only)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockStart</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">end</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Basic block end (read-only)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockEnd</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">length</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Basic block length (read-only)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockLength</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">index</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Basic block index in list of blocks for the function (read-only)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockIndex</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">outgoing_edges</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;List of basic block outgoing edges (read-only)&quot;&quot;&quot;</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">edges</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockOutgoingEdges</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">branch_type</span> <span class="o">=</span> <span class="n">BranchType</span><span class="p">(</span><span class="n">edges</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
<span class="k">if</span> <span class="n">edges</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">target</span><span class="p">:</span>
<span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_instance</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewBasicBlockReference</span><span class="p">(</span><span class="n">edges</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">target</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">view</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">target</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">BasicBlockEdge</span><span class="p">(</span><span class="n">branch_type</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">edges</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">backEdge</span><span class="p">,</span> <span class="n">edges</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">fallThrough</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeBasicBlockEdgeList</span><span class="p">(</span><span class="n">edges</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">incoming_edges</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;List of basic block incoming edges (read-only)&quot;&quot;&quot;</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">edges</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockIncomingEdges</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">branch_type</span> <span class="o">=</span> <span class="n">BranchType</span><span class="p">(</span><span class="n">edges</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
<span class="k">if</span> <span class="n">edges</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">target</span><span class="p">:</span>
<span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_instance</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewBasicBlockReference</span><span class="p">(</span><span class="n">edges</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">target</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">view</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">target</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">BasicBlockEdge</span><span class="p">(</span><span class="n">branch_type</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">edges</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">backEdge</span><span class="p">,</span> <span class="n">edges</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">fallThrough</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeBasicBlockEdgeList</span><span class="p">(</span><span class="n">edges</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">has_undetermined_outgoing_edges</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Whether basic block has undetermined outgoing edges (read-only)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNBasicBlockHasUndeterminedOutgoingEdges</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">can_exit</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Whether basic block can return or is tagged as &#39;No Return&#39; (read-only)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNBasicBlockCanExit</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">dominators</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;List of dominators for this basic block (read-only)&quot;&quot;&quot;</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">blocks</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockDominators</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_create_instance</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewBasicBlockReference</span><span class="p">(</span><span class="n">blocks</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span> <span class="bp">self</span><span class="o">.</span><span class="n">view</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeBasicBlockList</span><span class="p">(</span><span class="n">blocks</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">strict_dominators</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;List of strict dominators for this basic block (read-only)&quot;&quot;&quot;</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">blocks</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockStrictDominators</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_create_instance</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewBasicBlockReference</span><span class="p">(</span><span class="n">blocks</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span> <span class="bp">self</span><span class="o">.</span><span class="n">view</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeBasicBlockList</span><span class="p">(</span><span class="n">blocks</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">immediate_dominator</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Immediate dominator of this basic block (read-only)&quot;&quot;&quot;</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockImmediateDominator</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_instance</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">view</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">dominator_tree_children</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;List of child blocks in the dominator tree for this basic block (read-only)&quot;&quot;&quot;</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">blocks</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockDominatorTreeChildren</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_create_instance</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewBasicBlockReference</span><span class="p">(</span><span class="n">blocks</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span> <span class="bp">self</span><span class="o">.</span><span class="n">view</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeBasicBlockList</span><span class="p">(</span><span class="n">blocks</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">dominance_frontier</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Dominance frontier for this basic block (read-only)&quot;&quot;&quot;</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">blocks</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockDominanceFrontier</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_create_instance</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewBasicBlockReference</span><span class="p">(</span><span class="n">blocks</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span> <span class="bp">self</span><span class="o">.</span><span class="n">view</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeBasicBlockList</span><span class="p">(</span><span class="n">blocks</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">annotations</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;List of automatic annotations for the start of this block (read-only)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">get_block_annotations</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">disassembly_text</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``disassembly_text`` property which returns a list of binaryninja.function.DisassemblyTextLine objects for the current basic block.</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; current_basic_block.disassembly_text</span>
<span class="sd"> [&lt;0x100000f30: _main:&gt;, ...]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_disassembly_text</span><span class="p">()</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">highlight</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Gets or sets the highlight color for basic block</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; current_basic_block.highlight = HighlightStandardColor.BlueHighlightColor</span>
<span class="sd"> &gt;&gt;&gt; current_basic_block.highlight</span>
<span class="sd"> &lt;color: blue&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">highlight</span><span class="o">.</span><span class="n">HighlightColor</span><span class="o">.</span><span class="n">_from_core_struct</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockHighlight</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">))</span>
<span class="nd">@highlight</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">highlight</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">set_user_highlight</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">is_il</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Whether the basic block contains IL&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsILBasicBlock</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">is_low_level_il</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Whether the basic block contains Low Level IL&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsLowLevelILBasicBlock</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">is_medium_level_il</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Whether the basic block contains Medium Level IL&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsMediumLevelILBasicBlock</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<div class="viewcode-block" id="BasicBlock.get_iterated_dominance_frontier"><a class="viewcode-back" href="../../binaryninja.basicblock-module.html#binaryninja.basicblock.BasicBlock.get_iterated_dominance_frontier">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">get_iterated_dominance_frontier</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">blocks</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">blocks</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[]</span>
<span class="n">block_set</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNBasicBlock</span><span class="p">)</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">blocks</span><span class="p">))()</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">blocks</span><span class="p">)):</span>
<span class="n">block_set</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">blocks</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">handle</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">out_blocks</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockIteratedDominanceFrontier</span><span class="p">(</span><span class="n">block_set</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">blocks</span><span class="p">),</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">BasicBlock</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewBasicBlockReference</span><span class="p">(</span><span class="n">out_blocks</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span> <span class="n">blocks</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">view</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeBasicBlockList</span><span class="p">(</span><span class="n">out_blocks</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span></div>
<div class="viewcode-block" id="BasicBlock.mark_recent_use"><a class="viewcode-back" href="../../binaryninja.basicblock-module.html#binaryninja.basicblock.BasicBlock.mark_recent_use">[docs]</a> <span class="k">def</span> <span class="nf">mark_recent_use</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNMarkBasicBlockAsRecentlyUsed</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
<div class="viewcode-block" id="BasicBlock.get_disassembly_text"><a class="viewcode-back" href="../../binaryninja.basicblock-module.html#binaryninja.basicblock.BasicBlock.get_disassembly_text">[docs]</a> <span class="k">def</span> <span class="nf">get_disassembly_text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">settings</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``get_disassembly_text`` returns a list of binaryninja.function.DisassemblyTextLine objects for the current basic block.</span>
<span class="sd"> :param DisassemblySettings settings: (optional) DisassemblySettings object</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; current_basic_block.get_disassembly_text()</span>
<span class="sd"> [&lt;0x100000f30: _main:&gt;, &lt;0x100000f30: push rbp&gt;, ... ]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">settings_obj</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">settings</span><span class="p">:</span>
<span class="n">settings_obj</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">handle</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">lines</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockDisassemblyText</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">settings_obj</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">addr</span> <span class="o">=</span> <span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">addr</span>
<span class="k">if</span> <span class="p">(</span><span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">instrIndex</span> <span class="o">!=</span> <span class="mh">0xffffffffffffffff</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">&#39;il_function&#39;</span><span class="p">):</span>
<span class="n">il_instr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">il_function</span><span class="p">[</span><span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">instrIndex</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">il_instr</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">color</span> <span class="o">=</span> <span class="n">highlight</span><span class="o">.</span><span class="n">HighlightColor</span><span class="o">.</span><span class="n">_from_core_struct</span><span class="p">(</span><span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">highlight</span><span class="p">)</span>
<span class="n">tokens</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">InstructionTextToken</span><span class="o">.</span><span class="n">get_instruction_lines</span><span class="p">(</span><span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">tokens</span><span class="p">,</span> <span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">count</span><span class="p">)</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">DisassemblyTextLine</span><span class="p">(</span><span class="n">tokens</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">il_instr</span><span class="p">,</span> <span class="n">color</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeDisassemblyTextLines</span><span class="p">(</span><span class="n">lines</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span></div>
<div class="viewcode-block" id="BasicBlock.set_auto_highlight"><a class="viewcode-back" href="../../binaryninja.basicblock-module.html#binaryninja.basicblock.BasicBlock.set_auto_highlight">[docs]</a> <span class="k">def</span> <span class="nf">set_auto_highlight</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">color</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``set_auto_highlight`` highlights the current BasicBlock with the supplied color.</span>
<span class="sd"> ..warning:: Use only in analysis plugins. Do not use in regular plugins, as colors won&#39;t be saved to the database.</span>
<span class="sd"> :param HighlightStandardColor or highlight.HighlightColor color: Color value to use for highlighting</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">color</span><span class="p">,</span> <span class="n">HighlightStandardColor</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">color</span><span class="p">,</span> <span class="n">highlight</span><span class="o">.</span><span class="n">HighlightColor</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Specified color is not one of HighlightStandardColor, highlight.HighlightColor&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">color</span><span class="p">,</span> <span class="n">HighlightStandardColor</span><span class="p">):</span>
<span class="n">color</span> <span class="o">=</span> <span class="n">highlight</span><span class="o">.</span><span class="n">HighlightColor</span><span class="p">(</span><span class="n">color</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetAutoBasicBlockHighlight</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">color</span><span class="o">.</span><span class="n">_get_core_struct</span><span class="p">())</span></div>
<div class="viewcode-block" id="BasicBlock.set_user_highlight"><a class="viewcode-back" href="../../binaryninja.basicblock-module.html#binaryninja.basicblock.BasicBlock.set_user_highlight">[docs]</a> <span class="k">def</span> <span class="nf">set_user_highlight</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">color</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``set_user_highlight`` highlights the current BasicBlock with the supplied color</span>
<span class="sd"> :param HighlightStandardColor or highlight.HighlightColor color: Color value to use for highlighting</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; current_basic_block.set_user_highlight(highlight.HighlightColor(red=0xff, blue=0xff, green=0))</span>
<span class="sd"> &gt;&gt;&gt; current_basic_block.set_user_highlight(HighlightStandardColor.BlueHighlightColor)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">color</span><span class="p">,</span> <span class="n">HighlightStandardColor</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">color</span><span class="p">,</span> <span class="n">highlight</span><span class="o">.</span><span class="n">HighlightColor</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Specified color is not one of HighlightStandardColor, highlight.HighlightColor&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">color</span><span class="p">,</span> <span class="n">HighlightStandardColor</span><span class="p">):</span>
<span class="n">color</span> <span class="o">=</span> <span class="n">highlight</span><span class="o">.</span><span class="n">HighlightColor</span><span class="p">(</span><span class="n">color</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetUserBasicBlockHighlight</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">color</span><span class="o">.</span><span class="n">_get_core_struct</span><span class="p">())</span></div></div>
</pre></div>
</div>
</div>
<footer>
<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>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,691 @@
<!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>binaryninja.callingconvention &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.callingconvention</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.callingconvention</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="kn">import</span> <span class="nn">traceback</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="c1"># Binary Ninja components</span>
<span class="kn">import</span> <span class="nn">binaryninja</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">log</span>
<span class="kn">from</span> <span class="nn">binaryninja.enums</span> <span class="k">import</span> <span class="n">VariableSourceType</span>
<span class="c1"># 2-3 compatibility</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="nb">range</span>
<div class="viewcode-block" id="CallingConvention"><a class="viewcode-back" href="../../binaryninja.callingconvention.CallingConvention.html#binaryninja.callingconvention.CallingConvention">[docs]</a><span class="k">class</span> <span class="nc">CallingConvention</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">caller_saved_regs</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">callee_saved_regs</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">int_arg_regs</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">float_arg_regs</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">arg_regs_share_index</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">stack_reserved_for_arg_regs</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">stack_adjusted_on_return</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">int_return_reg</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">high_int_return_reg</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">float_return_reg</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">global_pointer_reg</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">implicitly_defined_regs</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">_registered_calling_conventions</span> <span class="o">=</span> <span class="p">[]</span>
<div class="viewcode-block" id="CallingConvention.__init__"><a class="viewcode-back" href="../../binaryninja.callingconvention.CallingConvention.html#binaryninja.callingconvention.CallingConvention.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arch</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">confidence</span><span class="o">=</span><span class="n">binaryninja</span><span class="o">.</span><span class="n">types</span><span class="o">.</span><span class="n">max_confidence</span><span class="p">):</span>
<span class="k">if</span> <span class="n">handle</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="n">arch</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">name</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Must specify either handle or architecture and name&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">arch</span> <span class="o">=</span> <span class="n">arch</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_pending_reg_lists</span> <span class="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCustomCallingConvention</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">context</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getCallerSavedRegisters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getCallerSavedRegisters</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_caller_saved_regs</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getCalleeSavedRegisters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getCalleeSavedRegisters</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_callee_saved_regs</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getIntegerArgumentRegisters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getIntegerArgumentRegisters</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_int_arg_regs</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getFloatArgumentRegisters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getFloatArgumentRegisters</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_float_arg_regs</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">freeRegisterList</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">freeRegisterList</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_free_register_list</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">areArgumentRegistersSharedIndex</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">areArgumentRegistersSharedIndex</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_arg_regs_share_index</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">isStackReservedForArgumentRegisters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">isStackReservedForArgumentRegisters</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_stack_reserved_for_arg_regs</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">isStackAdjustedOnReturn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">isStackAdjustedOnReturn</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_stack_adjusted_on_return</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getIntegerReturnValueRegister</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getIntegerReturnValueRegister</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_int_return_reg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getHighIntegerReturnValueRegister</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getHighIntegerReturnValueRegister</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_high_int_return_reg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getFloatReturnValueRegister</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getFloatReturnValueRegister</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_float_return_reg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getGlobalPointerRegister</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getGlobalPointerRegister</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_global_pointer_reg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getImplicitlyDefinedRegisters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getImplicitlyDefinedRegisters</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_implicitly_defined_regs</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getIncomingRegisterValue</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getIncomingRegisterValue</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_incoming_reg_value</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getIncomingFlagValue</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getIncomingFlagValue</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_incoming_flag_value</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getIncomingVariableForParameterVariable</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getIncomingVariableForParameterVariable</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_incoming_var_for_parameter_var</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getParameterVariableForIncomingVariable</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getParameterVariableForIncomingVariable</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_parameter_var_for_incoming_var</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreateCallingConvention</span><span class="p">(</span><span class="n">arch</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_registered_calling_conventions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">handle</span>
<span class="bp">self</span><span class="o">.</span><span class="n">arch</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">architecture</span><span class="o">.</span><span class="n">CoreArchitecture</span><span class="o">.</span><span class="n">_from_cache</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNGetCallingConventionArchitecture</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetCallingConventionName</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;arg_regs_share_index&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNAreArgumentRegistersSharedIndex</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;stack_reserved_for_arg_regs&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsStackReservedForArgumentRegisters</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;stack_adjusted_on_return&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsStackAdjustedOnReturn</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">regs</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetCallerSavedRegisters</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">arch</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">arch</span><span class="o">.</span><span class="n">get_reg_name</span><span class="p">(</span><span class="n">regs</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeRegisterList</span><span class="p">(</span><span class="n">regs</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;caller_saved_regs&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">result</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">regs</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetCalleeSavedRegisters</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">arch</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">arch</span><span class="o">.</span><span class="n">get_reg_name</span><span class="p">(</span><span class="n">regs</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeRegisterList</span><span class="p">(</span><span class="n">regs</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;callee_saved_regs&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">result</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">regs</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetIntegerArgumentRegisters</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">arch</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">arch</span><span class="o">.</span><span class="n">get_reg_name</span><span class="p">(</span><span class="n">regs</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeRegisterList</span><span class="p">(</span><span class="n">regs</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;int_arg_regs&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">result</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">regs</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFloatArgumentRegisters</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">arch</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">arch</span><span class="o">.</span><span class="n">get_reg_name</span><span class="p">(</span><span class="n">regs</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeRegisterList</span><span class="p">(</span><span class="n">regs</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;float_arg_regs&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">result</span>
<span class="n">reg</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetIntegerReturnValueRegister</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="n">reg</span> <span class="o">==</span> <span class="mh">0xffffffff</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;int_return_reg&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;int_return_reg&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">get_reg_name</span><span class="p">(</span><span class="n">reg</span><span class="p">)</span>
<span class="n">reg</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetHighIntegerReturnValueRegister</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="n">reg</span> <span class="o">==</span> <span class="mh">0xffffffff</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;high_int_return_reg&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;high_int_return_reg&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">get_reg_name</span><span class="p">(</span><span class="n">reg</span><span class="p">)</span>
<span class="n">reg</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFloatReturnValueRegister</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="n">reg</span> <span class="o">==</span> <span class="mh">0xffffffff</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;float_return_reg&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;float_return_reg&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">get_reg_name</span><span class="p">(</span><span class="n">reg</span><span class="p">)</span>
<span class="n">reg</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetGlobalPointerRegister</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="n">reg</span> <span class="o">==</span> <span class="mh">0xffffffff</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;global_pointer_reg&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;global_pointer_reg&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">get_reg_name</span><span class="p">(</span><span class="n">reg</span><span class="p">)</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">regs</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetImplicitlyDefinedRegisters</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">arch</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">arch</span><span class="o">.</span><span class="n">get_reg_name</span><span class="p">(</span><span class="n">regs</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeRegisterList</span><span class="p">(</span><span class="n">regs</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;implicitly_defined_regs&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">result</span>
<span class="bp">self</span><span class="o">.</span><span class="n">confidence</span> <span class="o">=</span> <span class="n">confidence</span></div>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeCallingConvention</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">CallingConvention</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span> <span class="o">==</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__ne__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">CallingConvention</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span> <span class="o">!=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_get_caller_saved_regs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">count</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">regs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">caller_saved_regs</span>
<span class="n">count</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">regs</span><span class="p">)</span>
<span class="n">reg_buf</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_uint</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">regs</span><span class="p">))()</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">regs</span><span class="p">)):</span>
<span class="n">reg_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">regs</span><span class="p">[</span><span class="n">regs</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span><span class="o">.</span><span class="n">index</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">reg_buf</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_pending_reg_lists</span><span class="p">[</span><span class="n">result</span><span class="o">.</span><span class="n">value</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">reg_buf</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span><span class="o">.</span><span class="n">value</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="n">count</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">def</span> <span class="nf">_get_callee_saved_regs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">count</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">regs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">callee_saved_regs</span>
<span class="n">count</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">regs</span><span class="p">)</span>
<span class="n">reg_buf</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_uint</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">regs</span><span class="p">))()</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">regs</span><span class="p">)):</span>
<span class="n">reg_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">regs</span><span class="p">[</span><span class="n">regs</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span><span class="o">.</span><span class="n">index</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">reg_buf</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_pending_reg_lists</span><span class="p">[</span><span class="n">result</span><span class="o">.</span><span class="n">value</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">reg_buf</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span><span class="o">.</span><span class="n">value</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="n">count</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">def</span> <span class="nf">_get_int_arg_regs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">count</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">regs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">int_arg_regs</span>
<span class="n">count</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">regs</span><span class="p">)</span>
<span class="n">reg_buf</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_uint</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">regs</span><span class="p">))()</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">regs</span><span class="p">)):</span>
<span class="n">reg_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">regs</span><span class="p">[</span><span class="n">regs</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span><span class="o">.</span><span class="n">index</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">reg_buf</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_pending_reg_lists</span><span class="p">[</span><span class="n">result</span><span class="o">.</span><span class="n">value</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">reg_buf</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span><span class="o">.</span><span class="n">value</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="n">count</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">def</span> <span class="nf">_get_float_arg_regs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">count</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">regs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">float_arg_regs</span>
<span class="n">count</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">regs</span><span class="p">)</span>
<span class="n">reg_buf</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_uint</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">regs</span><span class="p">))()</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">regs</span><span class="p">)):</span>
<span class="n">reg_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">regs</span><span class="p">[</span><span class="n">regs</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span><span class="o">.</span><span class="n">index</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">reg_buf</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_pending_reg_lists</span><span class="p">[</span><span class="n">result</span><span class="o">.</span><span class="n">value</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">reg_buf</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span><span class="o">.</span><span class="n">value</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="n">count</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">def</span> <span class="nf">_free_register_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">regs</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">buf</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">regs</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)</span>
<span class="k">if</span> <span class="n">buf</span><span class="o">.</span><span class="n">value</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pending_reg_lists</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;freeing register list that wasn&#39;t allocated&quot;</span><span class="p">)</span>
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pending_reg_lists</span><span class="p">[</span><span class="n">buf</span><span class="o">.</span><span class="n">value</span><span class="p">]</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">_arg_regs_share_index</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">arg_regs_share_index</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">_stack_reserved_for_arg_regs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">stack_reserved_for_arg_regs</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">_stack_adjusted_on_return</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">stack_adjusted_on_return</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">_get_int_return_reg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">regs</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">int_return_reg</span><span class="p">]</span><span class="o">.</span><span class="n">index</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">_get_high_int_return_reg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">high_int_return_reg</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="mh">0xffffffff</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">regs</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">high_int_return_reg</span><span class="p">]</span><span class="o">.</span><span class="n">index</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">_get_float_return_reg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">float_return_reg</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="mh">0xffffffff</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">regs</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">float_int_return_reg</span><span class="p">]</span><span class="o">.</span><span class="n">index</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">_get_global_pointer_reg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">global_pointer_reg</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="mh">0xffffffff</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">regs</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">global_pointer_reg</span><span class="p">]</span><span class="o">.</span><span class="n">index</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">_get_implicitly_defined_regs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">count</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">regs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">implicitly_defined_regs</span>
<span class="n">count</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">regs</span><span class="p">)</span>
<span class="n">reg_buf</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_uint</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">regs</span><span class="p">))()</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">regs</span><span class="p">)):</span>
<span class="n">reg_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">regs</span><span class="p">[</span><span class="n">regs</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span><span class="o">.</span><span class="n">index</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">reg_buf</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_pending_reg_lists</span><span class="p">[</span><span class="n">result</span><span class="o">.</span><span class="n">value</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">reg_buf</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span><span class="o">.</span><span class="n">value</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="n">count</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">def</span> <span class="nf">_get_incoming_reg_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">reg</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">result</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">func_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewFunctionReference</span><span class="p">(</span><span class="n">func</span><span class="p">))</span>
<span class="n">reg_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">get_reg_name</span><span class="p">(</span><span class="n">reg</span><span class="p">)</span>
<span class="n">api_obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">perform_get_incoming_reg_value</span><span class="p">(</span><span class="n">reg_name</span><span class="p">,</span> <span class="n">func_obj</span><span class="p">)</span><span class="o">.</span><span class="n">_to_api_object</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="n">api_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">RegisterValue</span><span class="p">()</span><span class="o">.</span><span class="n">_to_api_object</span><span class="p">()</span>
<span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="n">api_obj</span><span class="o">.</span><span class="n">state</span>
<span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">api_obj</span><span class="o">.</span><span class="n">value</span>
<span class="k">def</span> <span class="nf">_get_incoming_flag_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">reg</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">result</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">func_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewFunctionReference</span><span class="p">(</span><span class="n">func</span><span class="p">))</span>
<span class="n">reg_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">get_reg_name</span><span class="p">(</span><span class="n">reg</span><span class="p">)</span>
<span class="n">api_obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">perform_get_incoming_flag_value</span><span class="p">(</span><span class="n">reg_name</span><span class="p">,</span> <span class="n">func_obj</span><span class="p">)</span><span class="o">.</span><span class="n">_to_api_object</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="n">api_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">RegisterValue</span><span class="p">()</span><span class="o">.</span><span class="n">_to_api_object</span><span class="p">()</span>
<span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="n">api_obj</span><span class="o">.</span><span class="n">state</span>
<span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">api_obj</span><span class="o">.</span><span class="n">value</span>
<span class="k">def</span> <span class="nf">_get_incoming_var_for_parameter_var</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">in_var</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">result</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">func</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">func_obj</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">func_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewFunctionReference</span><span class="p">(</span><span class="n">func</span><span class="p">))</span>
<span class="n">in_var_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">Variable</span><span class="p">(</span><span class="n">func_obj</span><span class="p">,</span> <span class="n">in_var</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">in_var</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">index</span><span class="p">,</span> <span class="n">in_var</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">storage</span><span class="p">)</span>
<span class="n">out_var</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">perform_get_incoming_var_for_parameter_var</span><span class="p">(</span><span class="n">in_var_obj</span><span class="p">,</span> <span class="n">func_obj</span><span class="p">)</span>
<span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">out_var</span><span class="o">.</span><span class="n">source_type</span>
<span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="n">out_var</span><span class="o">.</span><span class="n">index</span>
<span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">storage</span> <span class="o">=</span> <span class="n">out_var</span><span class="o">.</span><span class="n">storage</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">in_var</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">type</span>
<span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="n">in_var</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">index</span>
<span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">storage</span> <span class="o">=</span> <span class="n">in_var</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">storage</span>
<span class="k">def</span> <span class="nf">_get_parameter_var_for_incoming_var</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">in_var</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">result</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">func</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">func_obj</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">func_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewFunctionReference</span><span class="p">(</span><span class="n">func</span><span class="p">))</span>
<span class="n">in_var_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">Variable</span><span class="p">(</span><span class="n">func_obj</span><span class="p">,</span> <span class="n">in_var</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">in_var</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">index</span><span class="p">,</span> <span class="n">in_var</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">storage</span><span class="p">)</span>
<span class="n">out_var</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">perform_get_parameter_var_for_incoming_var</span><span class="p">(</span><span class="n">in_var_obj</span><span class="p">,</span> <span class="n">func_obj</span><span class="p">)</span>
<span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">out_var</span><span class="o">.</span><span class="n">source_type</span>
<span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="n">out_var</span><span class="o">.</span><span class="n">index</span>
<span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">storage</span> <span class="o">=</span> <span class="n">out_var</span><span class="o">.</span><span class="n">storage</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">in_var</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">type</span>
<span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="n">in_var</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">index</span>
<span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">storage</span> <span class="o">=</span> <span class="n">in_var</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">storage</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;calling convention: </span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
<div class="viewcode-block" id="CallingConvention.perform_get_incoming_reg_value"><a class="viewcode-back" href="../../binaryninja.callingconvention-module.html#binaryninja.callingconvention.CallingConvention.perform_get_incoming_reg_value">[docs]</a> <span class="k">def</span> <span class="nf">perform_get_incoming_reg_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">reg</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="n">reg_stack</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">get_reg_stack_for_reg</span><span class="p">(</span><span class="n">reg</span><span class="p">)</span>
<span class="k">if</span> <span class="n">reg_stack</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="n">reg</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">reg_stacks</span><span class="p">[</span><span class="n">reg_stack</span><span class="p">]</span><span class="o">.</span><span class="n">stack_top_reg</span><span class="p">:</span>
<span class="k">return</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">RegisterValue</span><span class="o">.</span><span class="n">constant</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="k">return</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">RegisterValue</span><span class="p">()</span></div>
<div class="viewcode-block" id="CallingConvention.perform_get_incoming_flag_value"><a class="viewcode-back" href="../../binaryninja.callingconvention-module.html#binaryninja.callingconvention.CallingConvention.perform_get_incoming_flag_value">[docs]</a> <span class="k">def</span> <span class="nf">perform_get_incoming_flag_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">reg</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="k">return</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">RegisterValue</span><span class="p">()</span></div>
<div class="viewcode-block" id="CallingConvention.perform_get_incoming_var_for_parameter_var"><a class="viewcode-back" href="../../binaryninja.callingconvention-module.html#binaryninja.callingconvention.CallingConvention.perform_get_incoming_var_for_parameter_var">[docs]</a> <span class="k">def</span> <span class="nf">perform_get_incoming_var_for_parameter_var</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_var</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="n">in_buf</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNVariable</span><span class="p">()</span>
<span class="n">in_buf</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">in_var</span><span class="o">.</span><span class="n">source_type</span>
<span class="n">in_buf</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="n">in_var</span><span class="o">.</span><span class="n">index</span>
<span class="n">in_buf</span><span class="o">.</span><span class="n">storage</span> <span class="o">=</span> <span class="n">in_var</span><span class="o">.</span><span class="n">storage</span>
<span class="n">out_var</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetDefaultIncomingVariableForParameterVariable</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">in_buf</span><span class="p">)</span>
<span class="n">name</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="p">(</span><span class="n">func</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">out_var</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">VariableSourceType</span><span class="o">.</span><span class="n">RegisterVariableSourceType</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">func</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">get_reg_name</span><span class="p">(</span><span class="n">out_var</span><span class="o">.</span><span class="n">storage</span><span class="p">)</span>
<span class="k">return</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">Variable</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">out_var</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">out_var</span><span class="o">.</span><span class="n">index</span><span class="p">,</span> <span class="n">out_var</span><span class="o">.</span><span class="n">storage</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span></div>
<div class="viewcode-block" id="CallingConvention.perform_get_parameter_var_for_incoming_var"><a class="viewcode-back" href="../../binaryninja.callingconvention-module.html#binaryninja.callingconvention.CallingConvention.perform_get_parameter_var_for_incoming_var">[docs]</a> <span class="k">def</span> <span class="nf">perform_get_parameter_var_for_incoming_var</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_var</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="n">in_buf</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNVariable</span><span class="p">()</span>
<span class="n">in_buf</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">in_var</span><span class="o">.</span><span class="n">source_type</span>
<span class="n">in_buf</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="n">in_var</span><span class="o">.</span><span class="n">index</span>
<span class="n">in_buf</span><span class="o">.</span><span class="n">storage</span> <span class="o">=</span> <span class="n">in_var</span><span class="o">.</span><span class="n">storage</span>
<span class="n">out_var</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetDefaultParameterVariableForIncomingVariable</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">in_buf</span><span class="p">)</span>
<span class="k">return</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">Variable</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">out_var</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">out_var</span><span class="o">.</span><span class="n">index</span><span class="p">,</span> <span class="n">out_var</span><span class="o">.</span><span class="n">storage</span><span class="p">)</span></div>
<div class="viewcode-block" id="CallingConvention.with_confidence"><a class="viewcode-back" href="../../binaryninja.callingconvention-module.html#binaryninja.callingconvention.CallingConvention.with_confidence">[docs]</a> <span class="k">def</span> <span class="nf">with_confidence</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">confidence</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CallingConvention</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewCallingConventionReference</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">),</span>
<span class="n">confidence</span> <span class="o">=</span> <span class="n">confidence</span><span class="p">)</span></div>
<div class="viewcode-block" id="CallingConvention.get_incoming_reg_value"><a class="viewcode-back" href="../../binaryninja.callingconvention-module.html#binaryninja.callingconvention.CallingConvention.get_incoming_reg_value">[docs]</a> <span class="k">def</span> <span class="nf">get_incoming_reg_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">reg</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="n">reg_num</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">get_reg_index</span><span class="p">(</span><span class="n">reg</span><span class="p">)</span>
<span class="n">func_handle</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">func</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">func_handle</span> <span class="o">=</span> <span class="n">func</span><span class="o">.</span><span class="n">handle</span>
<span class="k">return</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">RegisterValue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetIncomingRegisterValue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">reg_num</span><span class="p">,</span> <span class="n">func_handle</span><span class="p">))</span></div>
<div class="viewcode-block" id="CallingConvention.get_incoming_flag_value"><a class="viewcode-back" href="../../binaryninja.callingconvention-module.html#binaryninja.callingconvention.CallingConvention.get_incoming_flag_value">[docs]</a> <span class="k">def</span> <span class="nf">get_incoming_flag_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">flag</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="n">reg_num</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">get_flag_index</span><span class="p">(</span><span class="n">flag</span><span class="p">)</span>
<span class="n">func_handle</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">func</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">func_handle</span> <span class="o">=</span> <span class="n">func</span><span class="o">.</span><span class="n">handle</span>
<span class="k">return</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">RegisterValue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetIncomingFlagValue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">reg_num</span><span class="p">,</span> <span class="n">func_handle</span><span class="p">))</span></div>
<div class="viewcode-block" id="CallingConvention.get_incoming_var_for_parameter_var"><a class="viewcode-back" href="../../binaryninja.callingconvention-module.html#binaryninja.callingconvention.CallingConvention.get_incoming_var_for_parameter_var">[docs]</a> <span class="k">def</span> <span class="nf">get_incoming_var_for_parameter_var</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_var</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="n">in_buf</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNVariable</span><span class="p">()</span>
<span class="n">in_buf</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">in_var</span><span class="o">.</span><span class="n">source_type</span>
<span class="n">in_buf</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="n">in_var</span><span class="o">.</span><span class="n">index</span>
<span class="n">in_buf</span><span class="o">.</span><span class="n">storage</span> <span class="o">=</span> <span class="n">in_var</span><span class="o">.</span><span class="n">storage</span>
<span class="k">if</span> <span class="n">func</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">func_obj</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">func_obj</span> <span class="o">=</span> <span class="n">func</span><span class="o">.</span><span class="n">handle</span>
<span class="n">out_var</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetIncomingVariableForParameterVariable</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">in_buf</span><span class="p">,</span> <span class="n">func_obj</span><span class="p">)</span>
<span class="n">name</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="p">(</span><span class="n">func</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">out_var</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">VariableSourceType</span><span class="o">.</span><span class="n">RegisterVariableSourceType</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">func</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">get_reg_name</span><span class="p">(</span><span class="n">out_var</span><span class="o">.</span><span class="n">storage</span><span class="p">)</span>
<span class="k">return</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">Variable</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">out_var</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">out_var</span><span class="o">.</span><span class="n">index</span><span class="p">,</span> <span class="n">out_var</span><span class="o">.</span><span class="n">storage</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span></div>
<div class="viewcode-block" id="CallingConvention.get_parameter_var_for_incoming_var"><a class="viewcode-back" href="../../binaryninja.callingconvention-module.html#binaryninja.callingconvention.CallingConvention.get_parameter_var_for_incoming_var">[docs]</a> <span class="k">def</span> <span class="nf">get_parameter_var_for_incoming_var</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_var</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="n">in_buf</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNVariable</span><span class="p">()</span>
<span class="n">in_buf</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">in_var</span><span class="o">.</span><span class="n">source_type</span>
<span class="n">in_buf</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="n">in_var</span><span class="o">.</span><span class="n">index</span>
<span class="n">in_buf</span><span class="o">.</span><span class="n">storage</span> <span class="o">=</span> <span class="n">in_var</span><span class="o">.</span><span class="n">storage</span>
<span class="k">if</span> <span class="n">func</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">func_obj</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">func_obj</span> <span class="o">=</span> <span class="n">func</span><span class="o">.</span><span class="n">handle</span>
<span class="n">out_var</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetParameterVariableForIncomingVariable</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">in_buf</span><span class="p">,</span> <span class="n">func_obj</span><span class="p">)</span>
<span class="k">return</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">Variable</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">out_var</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">out_var</span><span class="o">.</span><span class="n">index</span><span class="p">,</span> <span class="n">out_var</span><span class="o">.</span><span class="n">storage</span><span class="p">)</span></div></div>
</pre></div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,397 @@
<!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>binaryninja.databuffer &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.databuffer</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.databuffer</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="c1"># Binary Ninja components</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<span class="c1"># 2-3 compatibility</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">pyNativeStr</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">long</span>
<div class="viewcode-block" id="DataBuffer"><a class="viewcode-back" href="../../binaryninja.databuffer.DataBuffer.html#binaryninja.databuffer.DataBuffer">[docs]</a><span class="k">class</span> <span class="nc">DataBuffer</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="DataBuffer.__init__"><a class="viewcode-back" href="../../binaryninja.databuffer.DataBuffer.html#binaryninja.databuffer.DataBuffer.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">contents</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">handle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">handle_of_type</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNDataBuffer</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">contents</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">contents</span><span class="p">,</span> <span class="n">long</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreateDataBuffer</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">contents</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">contents</span><span class="p">,</span> <span class="n">DataBuffer</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNDuplicateDataBuffer</span><span class="p">(</span><span class="n">contents</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreateDataBuffer</span><span class="p">(</span><span class="n">contents</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">contents</span><span class="p">))</span></div>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeDataBuffer</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNGetDataBufferLength</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">):</span>
<span class="n">result</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">source</span> <span class="o">=</span> <span class="nb">bytes</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">i</span><span class="p">:</span>
<span class="n">result</span> <span class="o">+=</span> <span class="n">source</span><span class="p">[</span><span class="n">s</span><span class="p">]</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="nb">slice</span><span class="p">):</span>
<span class="k">if</span> <span class="n">i</span><span class="o">.</span><span class="n">step</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">i</span> <span class="o">=</span> <span class="n">i</span><span class="o">.</span><span class="n">indices</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
<span class="n">start</span> <span class="o">=</span> <span class="n">i</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">stop</span> <span class="o">=</span> <span class="n">i</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">if</span> <span class="n">stop</span> <span class="o">&lt;=</span> <span class="n">start</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;&quot;</span>
<span class="n">buf</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_string_buffer</span><span class="p">(</span><span class="n">stop</span> <span class="o">-</span> <span class="n">start</span><span class="p">)</span>
<span class="n">ctypes</span><span class="o">.</span><span class="n">memmove</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetDataBufferContentsAt</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">start</span><span class="p">),</span> <span class="n">stop</span> <span class="o">-</span> <span class="n">start</span><span class="p">)</span>
<span class="k">return</span> <span class="n">buf</span><span class="o">.</span><span class="n">raw</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">bytes</span><span class="p">(</span><span class="bp">self</span><span class="p">)[</span><span class="n">i</span><span class="p">]</span>
<span class="k">elif</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">&gt;=</span> <span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">chr</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNGetDataBufferByte</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">+</span> <span class="n">i</span><span class="p">)))</span>
<span class="k">raise</span> <span class="ne">IndexError</span><span class="p">(</span><span class="s2">&quot;index out of range&quot;</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">chr</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNGetDataBufferByte</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)))</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">IndexError</span><span class="p">(</span><span class="s2">&quot;index out of range&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__setitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="nb">slice</span><span class="p">):</span>
<span class="k">if</span> <span class="n">i</span><span class="o">.</span><span class="n">step</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">IndexError</span><span class="p">(</span><span class="s2">&quot;step not supported on assignment&quot;</span><span class="p">)</span>
<span class="n">i</span> <span class="o">=</span> <span class="n">i</span><span class="o">.</span><span class="n">indices</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
<span class="n">start</span> <span class="o">=</span> <span class="n">i</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">stop</span> <span class="o">=</span> <span class="n">i</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">if</span> <span class="n">stop</span> <span class="o">&lt;</span> <span class="n">start</span><span class="p">:</span>
<span class="n">stop</span> <span class="o">=</span> <span class="n">start</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="o">!=</span> <span class="p">(</span><span class="n">stop</span> <span class="o">-</span> <span class="n">start</span><span class="p">):</span>
<span class="n">data</span> <span class="o">=</span> <span class="nb">bytes</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">start</span><span class="p">]</span> <span class="o">+</span> <span class="n">value</span> <span class="o">+</span> <span class="n">data</span><span class="p">[</span><span class="n">stop</span><span class="p">:]</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetDataBufferContents</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="n">buf</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_string_buffer</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="n">ctypes</span><span class="o">.</span><span class="n">memmove</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNGetDataBufferContentsAt</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">start</span><span class="p">),</span> <span class="n">buf</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
<span class="k">elif</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">&gt;=</span> <span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;expected single byte for assignment&quot;</span><span class="p">)</span>
<span class="n">value</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="n">buf</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_string_buffer</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="n">ctypes</span><span class="o">.</span><span class="n">memmove</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNGetDataBufferContentsAt</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">+</span> <span class="n">i</span><span class="p">)),</span> <span class="n">buf</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">IndexError</span><span class="p">(</span><span class="s2">&quot;index out of range&quot;</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;expected single byte for assignment&quot;</span><span class="p">)</span>
<span class="n">value</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="n">buf</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_string_buffer</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="n">ctypes</span><span class="o">.</span><span class="n">memmove</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNGetDataBufferContentsAt</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)),</span> <span class="n">buf</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">IndexError</span><span class="p">(</span><span class="s2">&quot;index out of range&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">buf</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_string_buffer</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
<span class="n">ctypes</span><span class="o">.</span><span class="n">memmove</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetDataBufferContents</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
<span class="k">return</span> <span class="n">pyNativeStr</span><span class="p">(</span><span class="n">buf</span><span class="o">.</span><span class="n">raw</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__bytes__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">buf</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_string_buffer</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
<span class="n">ctypes</span><span class="o">.</span><span class="n">memmove</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetDataBufferContents</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
<span class="k">return</span> <span class="n">buf</span><span class="o">.</span><span class="n">raw</span>
<div class="viewcode-block" id="DataBuffer.escape"><a class="viewcode-back" href="../../binaryninja.databuffer-module.html#binaryninja.databuffer.DataBuffer.escape">[docs]</a> <span class="k">def</span> <span class="nf">escape</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNDataBufferToEscapedString</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
<div class="viewcode-block" id="DataBuffer.unescape"><a class="viewcode-back" href="../../binaryninja.databuffer-module.html#binaryninja.databuffer.DataBuffer.unescape">[docs]</a> <span class="k">def</span> <span class="nf">unescape</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">DataBuffer</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">core</span><span class="o">.</span><span class="n">BNDecodeEscapedString</span><span class="p">(</span><span class="nb">bytes</span><span class="p">(</span><span class="bp">self</span><span class="p">)))</span></div>
<div class="viewcode-block" id="DataBuffer.base64_encode"><a class="viewcode-back" href="../../binaryninja.databuffer-module.html#binaryninja.databuffer.DataBuffer.base64_encode">[docs]</a> <span class="k">def</span> <span class="nf">base64_encode</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNDataBufferToBase64</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
<div class="viewcode-block" id="DataBuffer.base64_decode"><a class="viewcode-back" href="../../binaryninja.databuffer-module.html#binaryninja.databuffer.DataBuffer.base64_decode">[docs]</a> <span class="k">def</span> <span class="nf">base64_decode</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">DataBuffer</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNDecodeBase64</span><span class="p">(</span><span class="nb">bytes</span><span class="p">(</span><span class="bp">self</span><span class="p">)))</span></div>
<div class="viewcode-block" id="DataBuffer.zlib_compress"><a class="viewcode-back" href="../../binaryninja.databuffer-module.html#binaryninja.databuffer.DataBuffer.zlib_compress">[docs]</a> <span class="k">def</span> <span class="nf">zlib_compress</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">buf</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNZlibCompress</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="n">buf</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">DataBuffer</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">buf</span><span class="p">)</span></div>
<div class="viewcode-block" id="DataBuffer.zlib_decompress"><a class="viewcode-back" href="../../binaryninja.databuffer-module.html#binaryninja.databuffer.DataBuffer.zlib_decompress">[docs]</a> <span class="k">def</span> <span class="nf">zlib_decompress</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">buf</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNZlibDecompress</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="n">buf</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">DataBuffer</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">buf</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="escape_string"><a class="viewcode-back" href="../../binaryninja.databuffer.escape_string.html#binaryninja.databuffer.escape_string">[docs]</a><span class="k">def</span> <span class="nf">escape_string</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="k">return</span> <span class="n">DataBuffer</span><span class="p">(</span><span class="n">text</span><span class="p">)</span><span class="o">.</span><span class="n">escape</span><span class="p">()</span></div>
<div class="viewcode-block" id="unescape_string"><a class="viewcode-back" href="../../binaryninja.databuffer.unescape_string.html#binaryninja.databuffer.unescape_string">[docs]</a><span class="k">def</span> <span class="nf">unescape_string</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="k">return</span> <span class="n">DataBuffer</span><span class="p">(</span><span class="n">text</span><span class="p">)</span><span class="o">.</span><span class="n">unescape</span><span class="p">()</span></div>
</pre></div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,412 @@
<!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>binaryninja.datarender &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.datarender</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.datarender</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="kn">import</span> <span class="nn">traceback</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">binaryninja</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<span class="kn">from</span> <span class="nn">binaryninja.filemetadata</span> <span class="k">import</span> <span class="n">FileMetadata</span>
<span class="kn">from</span> <span class="nn">binaryninja.binaryview</span> <span class="k">import</span> <span class="n">BinaryView</span>
<span class="kn">from</span> <span class="nn">binaryninja.function</span> <span class="k">import</span> <span class="p">(</span><span class="n">DisassemblyTextLine</span><span class="p">,</span> <span class="n">InstructionTextToken</span><span class="p">)</span>
<span class="kn">from</span> <span class="nn">binaryninja.enums</span> <span class="k">import</span> <span class="n">InstructionTextTokenType</span><span class="p">,</span> <span class="n">TypeClass</span><span class="p">,</span> <span class="n">HighlightStandardColor</span>
<span class="kn">from</span> <span class="nn">binaryninja.log</span> <span class="k">import</span> <span class="n">log_error</span>
<span class="kn">from</span> <span class="nn">binaryninja.types</span> <span class="k">import</span> <span class="n">Type</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">highlight</span>
<div class="viewcode-block" id="DataRenderer"><a class="viewcode-back" href="../../binaryninja.datarender.DataRenderer.html#binaryninja.datarender.DataRenderer">[docs]</a><span class="k">class</span> <span class="nc">DataRenderer</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="n">_registered_renderers</span> <span class="o">=</span> <span class="p">[]</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> DataRenderer objects tell the Linear View how to render specific types.</span>
<span class="sd"> The `perform_is_valid_for_data` method returns a boolean to indicate if your derived class</span>
<span class="sd"> is able to render the type, given the `addr` and `context`. The `context` is a list of Type</span>
<span class="sd"> objects which represents the chain of nested objects that is being displayed.</span>
<span class="sd"> The `perform_get_lines_for_data` method returns a list of `DisassemblyTextLine` objects each one</span>
<span class="sd"> representing a single line of Linear View output. The `prefix` variable is a list of `InstructionTextToken`&#39;s</span>
<span class="sd"> which have already been generated by other `DataRenderer`&#39;s.</span>
<span class="sd"> After defining the `DataRenderer` subclass you must then register it with the core. This is done by calling</span>
<span class="sd"> either `register_type_specific` or `register_generic`. A &quot;generic&quot; type renderer is able to be overridden by</span>
<span class="sd"> a &quot;type specific&quot; renderer. For instance there is a generic struct render which renders any struct that hasn&#39;t</span>
<span class="sd"> been explicitly overridden by a &quot;type specific&quot; renderer.</span>
<span class="sd"> In the below example we create a data renderer that overrides the default display for `struct BAR`.</span>
<span class="sd"> class BarDataRenderer(DataRenderer):</span>
<span class="sd"> def __init__(self):</span>
<span class="sd"> DataRenderer.__init__(self)</span>
<span class="sd"> def perform_is_valid_for_data(self, ctxt, view, addr, type, context):</span>
<span class="sd"> return DataRenderer.is_type_of_struct_name(type, &quot;BAR&quot;, context)</span>
<span class="sd"> def perform_get_lines_for_data(self, ctxt, view, addr, type, prefix, width, context):</span>
<span class="sd"> prefix.append(InstructionTextToken(InstructionTextTokenType.TextToken, &quot;I&#39;m in ur BAR&quot;))</span>
<span class="sd"> return [DisassemblyTextLine(prefix, addr)]</span>
<span class="sd"> def __del__(self):</span>
<span class="sd"> pass</span>
<span class="sd"> BarDataRenderer().register_type_specific()</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="DataRenderer.__init__"><a class="viewcode-back" href="../../binaryninja.datarender.DataRenderer.html#binaryninja.datarender.DataRenderer.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCustomDataRenderer</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">context</span> <span class="o">=</span> <span class="n">context</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">freeObject</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">freeObject</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_free_object</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">isValidForData</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">isValidForData</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_is_valid_for_data</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getLinesForData</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getLinesForData</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_lines_for_data</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreateDataRenderer</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="p">)</span></div>
<div class="viewcode-block" id="DataRenderer.is_type_of_struct_name"><a class="viewcode-back" href="../../binaryninja.datarender-module.html#binaryninja.datarender.DataRenderer.is_type_of_struct_name">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">is_type_of_struct_name</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="nb">type</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
<span class="k">return</span> <span class="p">(</span><span class="nb">type</span><span class="o">.</span><span class="n">type_class</span> <span class="o">==</span> <span class="n">TypeClass</span><span class="o">.</span><span class="n">StructureTypeClass</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">context</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span>
<span class="ow">and</span> <span class="n">context</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">type_class</span> <span class="o">==</span> <span class="n">TypeClass</span><span class="o">.</span><span class="n">NamedTypeReferenceClass</span> <span class="ow">and</span>
<span class="n">context</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">named_type_reference</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="n">name</span><span class="p">)</span></div>
<div class="viewcode-block" id="DataRenderer.register_type_specific"><a class="viewcode-back" href="../../binaryninja.datarender-module.html#binaryninja.datarender.DataRenderer.register_type_specific">[docs]</a> <span class="k">def</span> <span class="nf">register_type_specific</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterTypeSpecificDataRenderer</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNGetDataRendererContainer</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_registered_renderers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
<div class="viewcode-block" id="DataRenderer.register_generic"><a class="viewcode-back" href="../../binaryninja.datarender-module.html#binaryninja.datarender.DataRenderer.register_generic">[docs]</a> <span class="k">def</span> <span class="nf">register_generic</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterGenericDataRenderer</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNGetDataRendererContainer</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_registered_renderers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">_free_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">perform_free_object</span><span class="p">(</span><span class="n">ctxt</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">_is_valid_for_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="nb">type</span><span class="p">,</span> <span class="n">context</span><span class="p">,</span> <span class="n">ctxCount</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">file_metadata</span> <span class="o">=</span> <span class="n">FileMetadata</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">core</span><span class="o">.</span><span class="n">BNGetFileForView</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span><span class="o">=</span><span class="n">file_metadata</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="nb">type</span> <span class="o">=</span> <span class="n">Type</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewTypeReference</span><span class="p">(</span><span class="nb">type</span><span class="p">))</span>
<span class="n">pycontext</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">ctxCount</span><span class="p">):</span>
<span class="n">pycontext</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Type</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewTypeReference</span><span class="p">(</span><span class="n">context</span><span class="p">[</span><span class="n">i</span><span class="p">])))</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">perform_is_valid_for_data</span><span class="p">(</span><span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="nb">type</span><span class="p">,</span> <span class="n">pycontext</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">_get_lines_for_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="nb">type</span><span class="p">,</span> <span class="n">prefix</span><span class="p">,</span> <span class="n">prefixCount</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">count</span><span class="p">,</span> <span class="n">typeCtx</span><span class="p">,</span> <span class="n">ctxCount</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">file_metadata</span> <span class="o">=</span> <span class="n">FileMetadata</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">core</span><span class="o">.</span><span class="n">BNGetFileForView</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span><span class="o">=</span><span class="n">file_metadata</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="nb">type</span> <span class="o">=</span> <span class="n">Type</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewTypeReference</span><span class="p">(</span><span class="nb">type</span><span class="p">))</span>
<span class="n">prefixTokens</span> <span class="o">=</span> <span class="n">InstructionTextToken</span><span class="o">.</span><span class="n">get_instruction_lines</span><span class="p">(</span><span class="n">prefix</span><span class="p">,</span> <span class="n">prefixCount</span><span class="p">)</span>
<span class="n">pycontext</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ctxCount</span><span class="p">):</span>
<span class="n">pycontext</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Type</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewTypeReference</span><span class="p">(</span><span class="n">typeCtx</span><span class="p">[</span><span class="n">i</span><span class="p">])))</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">perform_get_lines_for_data</span><span class="p">(</span><span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="nb">type</span><span class="p">,</span> <span class="n">prefixTokens</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">pycontext</span><span class="p">)</span>
<span class="n">count</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
<span class="n">line_buf</span> <span class="o">=</span> <span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNDisassemblyTextLine</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">result</span><span class="p">))()</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">result</span><span class="p">)):</span>
<span class="n">line</span> <span class="o">=</span> <span class="n">result</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">color</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">highlight</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">color</span><span class="p">,</span> <span class="n">HighlightStandardColor</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">color</span><span class="p">,</span> <span class="n">highlight</span><span class="o">.</span><span class="n">HighlightColor</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Specified color is not one of HighlightStandardColor, highlight.HighlightColor&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">color</span><span class="p">,</span> <span class="n">HighlightStandardColor</span><span class="p">):</span>
<span class="n">color</span> <span class="o">=</span> <span class="n">highlight</span><span class="o">.</span><span class="n">HighlightColor</span><span class="p">(</span><span class="n">color</span><span class="p">)</span>
<span class="n">line_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">highlight</span> <span class="o">=</span> <span class="n">color</span><span class="o">.</span><span class="n">_get_core_struct</span><span class="p">()</span>
<span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">address</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">tokens</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">line_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">addr</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">address</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">line_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">addr</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">line_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">addr</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">address</span>
<span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">il_instruction</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">line_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">instrIndex</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">il_instruction</span><span class="o">.</span><span class="n">instr_index</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">line_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">instrIndex</span> <span class="o">=</span> <span class="mh">0xffffffffffffffff</span>
<span class="n">line_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">tokens</span><span class="p">)</span>
<span class="n">line_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">tokens</span> <span class="o">=</span> <span class="n">InstructionTextToken</span><span class="o">.</span><span class="n">get_instruction_lines</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">tokens</span><span class="p">)</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">line_buf</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">None</span>
<div class="viewcode-block" id="DataRenderer.perform_free_object"><a class="viewcode-back" href="../../binaryninja.datarender-module.html#binaryninja.datarender.DataRenderer.perform_free_object">[docs]</a> <span class="k">def</span> <span class="nf">perform_free_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="DataRenderer.perform_is_valid_for_data"><a class="viewcode-back" href="../../binaryninja.datarender-module.html#binaryninja.datarender.DataRenderer.perform_is_valid_for_data">[docs]</a> <span class="k">def</span> <span class="nf">perform_is_valid_for_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="nb">type</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span></div>
<div class="viewcode-block" id="DataRenderer.perform_get_lines_for_data"><a class="viewcode-back" href="../../binaryninja.datarender-module.html#binaryninja.datarender.DataRenderer.perform_get_lines_for_data">[docs]</a> <span class="k">def</span> <span class="nf">perform_get_lines_for_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="nb">type</span><span class="p">,</span> <span class="n">prefix</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
<span class="k">return</span> <span class="p">[]</span></div>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">pass</span></div>
</pre></div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,333 @@
<!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>binaryninja.demangle &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.demangle</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.demangle</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="c1"># Binary Ninja components</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">types</span>
<span class="c1"># 2-3 compatibility</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="nb">range</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">pyNativeStr</span>
<div class="viewcode-block" id="get_qualified_name"><a class="viewcode-back" href="../../binaryninja.demangle.get_qualified_name.html#binaryninja.demangle.get_qualified_name">[docs]</a><span class="k">def</span> <span class="nf">get_qualified_name</span><span class="p">(</span><span class="n">names</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``get_qualified_name`` gets a qualified name for the provided name list.</span>
<span class="sd"> :param list(str) names: name list to qualify</span>
<span class="sd"> :return: a qualified name</span>
<span class="sd"> :rtype: str</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; type, name = demangle_ms(Architecture[&quot;x86_64&quot;], &quot;?testf@Foobar@@SA?AW4foo@1@W421@@Z&quot;)</span>
<span class="sd"> &gt;&gt;&gt; get_qualified_name(name)</span>
<span class="sd"> &#39;Foobar::testf&#39;</span>
<span class="sd"> &gt;&gt;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="s2">&quot;::&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">names</span><span class="p">)</span></div>
<div class="viewcode-block" id="demangle_ms"><a class="viewcode-back" href="../../binaryninja.demangle.demangle_ms.html#binaryninja.demangle.demangle_ms">[docs]</a><span class="k">def</span> <span class="nf">demangle_ms</span><span class="p">(</span><span class="n">arch</span><span class="p">,</span> <span class="n">mangled_name</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``demangle_ms`` demangles a mangled Microsoft Visual Studio C++ name to a Type object.</span>
<span class="sd"> :param Architecture arch: Architecture for the symbol. Required for pointer and integer sizes.</span>
<span class="sd"> :param str mangled_name: a mangled Microsoft Visual Studio C++ name</span>
<span class="sd"> :return: returns tuple of (Type, demangled_name) or (None, mangled_name) on error</span>
<span class="sd"> :rtype: Tuple</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; demangle_ms(Architecture[&quot;x86_64&quot;], &quot;?testf@Foobar@@SA?AW4foo@1@W421@@Z&quot;)</span>
<span class="sd"> (&lt;type: public: static enum Foobar::foo __cdecl (enum Foobar::foo)&gt;, [&#39;Foobar&#39;, &#39;testf&#39;])</span>
<span class="sd"> &gt;&gt;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">handle</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNType</span><span class="p">)()</span>
<span class="n">outName</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span><span class="p">)()</span>
<span class="n">outSize</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">names</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span> <span class="n">core</span><span class="o">.</span><span class="n">BNDemangleMS</span><span class="p">(</span><span class="n">arch</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">mangled_name</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">handle</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">outName</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">outSize</span><span class="p">)):</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">outSize</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pyNativeStr</span><span class="p">(</span><span class="n">outName</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeDemangledName</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">outName</span><span class="p">),</span> <span class="n">outSize</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="p">(</span><span class="n">types</span><span class="o">.</span><span class="n">Type</span><span class="p">(</span><span class="n">handle</span><span class="p">),</span> <span class="n">names</span><span class="p">)</span>
<span class="k">return</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">mangled_name</span><span class="p">)</span></div>
<div class="viewcode-block" id="demangle_gnu3"><a class="viewcode-back" href="../../binaryninja.demangle.demangle_gnu3.html#binaryninja.demangle.demangle_gnu3">[docs]</a><span class="k">def</span> <span class="nf">demangle_gnu3</span><span class="p">(</span><span class="n">arch</span><span class="p">,</span> <span class="n">mangled_name</span><span class="p">):</span>
<span class="n">handle</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNType</span><span class="p">)()</span>
<span class="n">outName</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span><span class="p">)()</span>
<span class="n">outSize</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">names</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span> <span class="n">core</span><span class="o">.</span><span class="n">BNDemangleGNU3</span><span class="p">(</span><span class="n">arch</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">mangled_name</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">handle</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">outName</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">outSize</span><span class="p">)):</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">outSize</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pyNativeStr</span><span class="p">(</span><span class="n">outName</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeDemangledName</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">outName</span><span class="p">),</span> <span class="n">outSize</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">handle</span><span class="p">:</span>
<span class="k">return</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">names</span><span class="p">)</span>
<span class="k">return</span> <span class="p">(</span><span class="n">types</span><span class="o">.</span><span class="n">Type</span><span class="p">(</span><span class="n">handle</span><span class="p">),</span> <span class="n">names</span><span class="p">)</span>
<span class="k">return</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">mangled_name</span><span class="p">)</span></div>
</pre></div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,528 @@
<!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>binaryninja.downloadprovider &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.downloadprovider</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.downloadprovider</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="kn">import</span> <span class="nn">abc</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">import</span> <span class="nn">traceback</span>
<span class="c1"># Binary Ninja Components</span>
<span class="kn">import</span> <span class="nn">binaryninja._binaryninjacore</span> <span class="k">as</span> <span class="nn">core</span>
<span class="kn">import</span> <span class="nn">binaryninja</span>
<span class="kn">from</span> <span class="nn">binaryninja.settings</span> <span class="k">import</span> <span class="n">Settings</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">with_metaclass</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">startup</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">log</span>
<span class="c1"># 2-3 compatibility</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">pyNativeStr</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="nb">range</span>
<div class="viewcode-block" id="DownloadInstance"><a class="viewcode-back" href="../../binaryninja.downloadprovider.DownloadInstance.html#binaryninja.downloadprovider.DownloadInstance">[docs]</a><span class="k">class</span> <span class="nc">DownloadInstance</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="n">_registered_instances</span> <span class="o">=</span> <span class="p">[]</span>
<div class="viewcode-block" id="DownloadInstance.__init__"><a class="viewcode-back" href="../../binaryninja.downloadprovider.DownloadInstance.html#binaryninja.downloadprovider.DownloadInstance.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">provider</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">handle</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNDownloadInstanceCallbacks</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">context</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">destroyInstance</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">destroyInstance</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_destroy_instance</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">performRequest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">performRequest</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_perform_request</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNInitDownloadInstance</span><span class="p">(</span><span class="n">provider</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_registered_instances</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">handle_of_type</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNDownloadInstance</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_must_free</span> <span class="o">=</span> <span class="n">handle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span></div>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_must_free</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeDownloadInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_destroy_instance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_registered_instances</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_registered_instances</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">perform_destroy_instance</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">_perform_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">url</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">perform_request</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
<div class="viewcode-block" id="DownloadInstance.perform_destroy_instance"><a class="viewcode-back" href="../../binaryninja.downloadprovider-module.html#binaryninja.downloadprovider.DownloadInstance.perform_destroy_instance">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_destroy_instance</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span></div>
<span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">url</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span>
<div class="viewcode-block" id="DownloadInstance.perform_request"><a class="viewcode-back" href="../../binaryninja.downloadprovider-module.html#binaryninja.downloadprovider.DownloadInstance.perform_request">[docs]</a> <span class="k">def</span> <span class="nf">perform_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">callbacks</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNPerformDownloadRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">callbacks</span><span class="p">)</span></div></div>
<span class="k">class</span> <span class="nc">_DownloadProviderMetaclass</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;List all DownloadProvider types (read-only)&quot;&quot;&quot;</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">types</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetDownloadProviderList</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">DownloadProvider</span><span class="p">(</span><span class="n">types</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeDownloadProviderList</span><span class="p">(</span><span class="n">types</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">types</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetDownloadProviderList</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="k">yield</span> <span class="n">DownloadProvider</span><span class="p">(</span><span class="n">types</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeDownloadProviderList</span><span class="p">(</span><span class="n">types</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">provider</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetDownloadProviderByName</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
<span class="k">if</span> <span class="n">provider</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="s2">&quot;&#39;</span><span class="si">%s</span><span class="s2">&#39; is not a valid download provider&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
<span class="k">return</span> <span class="n">DownloadProvider</span><span class="p">(</span><span class="n">provider</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="nb">type</span><span class="o">.</span><span class="fm">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="s2">&quot;attribute &#39;</span><span class="si">%s</span><span class="s2">&#39; is read only&quot;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
<div class="viewcode-block" id="DownloadProvider"><a class="viewcode-back" href="../../binaryninja.downloadprovider.DownloadProvider.html#binaryninja.downloadprovider.DownloadProvider">[docs]</a><span class="k">class</span> <span class="nc">DownloadProvider</span><span class="p">(</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">_DownloadProviderMetaclass</span><span class="p">,</span> <span class="nb">object</span><span class="p">)):</span>
<span class="n">name</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">instance_class</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_registered_providers</span> <span class="o">=</span> <span class="p">[]</span>
<div class="viewcode-block" id="DownloadProvider.__init__"><a class="viewcode-back" href="../../binaryninja.downloadprovider.DownloadProvider.html#binaryninja.downloadprovider.DownloadProvider.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">handle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">handle_of_type</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNDownloadProvider</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetDownloadProviderName</span><span class="p">(</span><span class="n">handle</span><span class="p">)</span></div>
<div class="viewcode-block" id="DownloadProvider.register"><a class="viewcode-back" href="../../binaryninja.downloadprovider-module.html#binaryninja.downloadprovider.DownloadProvider.register">[docs]</a> <span class="k">def</span> <span class="nf">register</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNDownloadProviderCallbacks</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">context</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">createInstance</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">createInstance</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_create_instance</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNRegisterDownloadProvider</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_registered_providers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">_create_instance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">instance_class</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewDownloadInstanceReference</span><span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">handle</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">None</span>
<div class="viewcode-block" id="DownloadProvider.create_instance"><a class="viewcode-back" href="../../binaryninja.downloadprovider-module.html#binaryninja.downloadprovider.DownloadProvider.create_instance">[docs]</a> <span class="k">def</span> <span class="nf">create_instance</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreateDownloadProviderInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">DownloadInstance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">result</span><span class="p">)</span></div></div>
<span class="k">if</span> <span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">platform</span> <span class="o">!=</span> <span class="s2">&quot;win32&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">version_info</span> <span class="o">&gt;=</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">9</span><span class="p">)):</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">urllib.request</span> <span class="k">import</span> <span class="n">urlopen</span><span class="p">,</span> <span class="n">build_opener</span><span class="p">,</span> <span class="n">install_opener</span><span class="p">,</span> <span class="n">ProxyHandler</span>
<span class="kn">from</span> <span class="nn">urllib.error</span> <span class="k">import</span> <span class="n">URLError</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">urllib2</span> <span class="k">import</span> <span class="n">urlopen</span><span class="p">,</span> <span class="n">build_opener</span><span class="p">,</span> <span class="n">install_opener</span><span class="p">,</span> <span class="n">ProxyHandler</span><span class="p">,</span> <span class="n">URLError</span>
<span class="k">class</span> <span class="nc">PythonDownloadInstance</span><span class="p">(</span><span class="n">DownloadInstance</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">provider</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">PythonDownloadInstance</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">provider</span><span class="p">)</span>
<span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_destroy_instance</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">pass</span>
<span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">proxy_setting</span> <span class="o">=</span> <span class="n">Settings</span><span class="p">()</span><span class="o">.</span><span class="n">get_string</span><span class="p">(</span><span class="s1">&#39;downloadClient.httpsProxy&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">proxy_setting</span><span class="p">:</span>
<span class="n">opener</span> <span class="o">=</span> <span class="n">build_opener</span><span class="p">(</span><span class="n">ProxyHandler</span><span class="p">({</span><span class="s1">&#39;https&#39;</span><span class="p">:</span> <span class="n">proxy_setting</span><span class="p">}))</span>
<span class="n">install_opener</span><span class="p">(</span><span class="n">opener</span><span class="p">)</span>
<span class="n">r</span> <span class="o">=</span> <span class="n">urlopen</span><span class="p">(</span><span class="n">pyNativeStr</span><span class="p">(</span><span class="n">url</span><span class="p">))</span>
<span class="n">total_size</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">headers</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;content-length&#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
<span class="n">bytes_sent</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">4096</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">data</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">raw_bytes</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_ubyte</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="n">bytes_wrote</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNWriteDataForDownloadInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">raw_bytes</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">raw_bytes</span><span class="p">))</span>
<span class="k">if</span> <span class="n">bytes_wrote</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">raw_bytes</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetErrorForDownloadInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="s2">&quot;Bytes written mismatch!&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
<span class="n">bytes_sent</span> <span class="o">=</span> <span class="n">bytes_sent</span> <span class="o">+</span> <span class="n">bytes_wrote</span>
<span class="n">continue_download</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNotifyProgressForDownloadInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">bytes_sent</span><span class="p">,</span> <span class="n">total_size</span><span class="p">)</span>
<span class="k">if</span> <span class="n">continue_download</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetErrorForDownloadInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="s2">&quot;Download aborted!&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">bytes_sent</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetErrorForDownloadInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="s2">&quot;Received no data!&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
<span class="k">except</span> <span class="n">URLError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetErrorForDownloadInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetErrorForDownloadInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="s2">&quot;Unknown Exception!&quot;</span><span class="p">)</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
<span class="k">return</span> <span class="mi">0</span>
<span class="k">class</span> <span class="nc">PythonDownloadProvider</span><span class="p">(</span><span class="n">DownloadProvider</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;PythonDownloadProvider&quot;</span>
<span class="n">instance_class</span> <span class="o">=</span> <span class="n">PythonDownloadInstance</span>
<span class="n">PythonDownloadProvider</span><span class="p">()</span><span class="o">.</span><span class="n">register</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">requests</span>
<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">platform</span> <span class="o">!=</span> <span class="s2">&quot;win32&quot;</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">requests</span> <span class="k">import</span> <span class="n">pyopenssl</span>
<div class="viewcode-block" id="PythonDownloadInstance"><a class="viewcode-back" href="../../binaryninja.downloadprovider.PythonDownloadInstance.html#binaryninja.downloadprovider.PythonDownloadInstance">[docs]</a> <span class="k">class</span> <span class="nc">PythonDownloadInstance</span><span class="p">(</span><span class="n">DownloadInstance</span><span class="p">):</span>
<div class="viewcode-block" id="PythonDownloadInstance.__init__"><a class="viewcode-back" href="../../binaryninja.downloadprovider.PythonDownloadInstance.html#binaryninja.downloadprovider.PythonDownloadInstance.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">provider</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">PythonDownloadInstance</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">provider</span><span class="p">)</span></div>
<div class="viewcode-block" id="PythonDownloadInstance.perform_destroy_instance"><a class="viewcode-back" href="../../binaryninja.downloadprovider-module.html#binaryninja.downloadprovider.PythonDownloadInstance.perform_destroy_instance">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_destroy_instance</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="PythonDownloadInstance.perform_request"><a class="viewcode-back" href="../../binaryninja.downloadprovider-module.html#binaryninja.downloadprovider.PythonDownloadInstance.perform_request">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">proxy_setting</span> <span class="o">=</span> <span class="n">Settings</span><span class="p">()</span><span class="o">.</span><span class="n">get_string</span><span class="p">(</span><span class="s1">&#39;downloadClient.httpsProxy&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">proxy_setting</span><span class="p">:</span>
<span class="n">proxies</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;https&quot;</span><span class="p">:</span> <span class="n">proxy_setting</span><span class="p">}</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">proxies</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">pyNativeStr</span><span class="p">(</span><span class="n">url</span><span class="p">),</span> <span class="n">proxies</span><span class="o">=</span><span class="n">proxies</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">r</span><span class="o">.</span><span class="n">ok</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetErrorForDownloadInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="s2">&quot;Received error from server&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">content</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetErrorForDownloadInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="s2">&quot;No data received from server!&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
<span class="n">raw_bytes</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_ubyte</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="n">bytes_wrote</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNWriteDataForDownloadInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">raw_bytes</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">raw_bytes</span><span class="p">))</span>
<span class="k">if</span> <span class="n">bytes_wrote</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">raw_bytes</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetErrorForDownloadInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="s2">&quot;Bytes written mismatch!&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
<span class="n">continue_download</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNotifyProgressForDownloadInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">bytes_wrote</span><span class="p">,</span> <span class="n">bytes_wrote</span><span class="p">)</span>
<span class="k">if</span> <span class="n">continue_download</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetErrorForDownloadInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="s2">&quot;Download aborted!&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
<span class="k">except</span> <span class="n">requests</span><span class="o">.</span><span class="n">RequestException</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetErrorForDownloadInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetErrorForDownloadInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="s2">&quot;Unknown Exception!&quot;</span><span class="p">)</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
<span class="k">return</span> <span class="mi">0</span></div></div>
<div class="viewcode-block" id="PythonDownloadProvider"><a class="viewcode-back" href="../../binaryninja.downloadprovider.PythonDownloadProvider.html#binaryninja.downloadprovider.PythonDownloadProvider">[docs]</a> <span class="k">class</span> <span class="nc">PythonDownloadProvider</span><span class="p">(</span><span class="n">DownloadProvider</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;PythonDownloadProvider&quot;</span>
<span class="n">instance_class</span> <span class="o">=</span> <span class="n">PythonDownloadInstance</span></div>
<span class="n">PythonDownloadProvider</span><span class="p">()</span><span class="o">.</span><span class="n">register</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">platform</span> <span class="o">==</span> <span class="s2">&quot;win32&quot;</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="s2">&quot;The pip requests package is required for network connectivity!&quot;</span><span class="p">)</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="s2">&quot;Please install the requests package into the selected Python environment:&quot;</span><span class="p">)</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="s2">&quot; python -m pip install requests&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="s2">&quot;On Python versions below 2.7.9, the pip requests[security] package is required for network connectivity!&quot;</span><span class="p">)</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="s2">&quot;On an Ubuntu 14.04 install, the following three commands are sufficient to enable networking for the current user:&quot;</span><span class="p">)</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="s2">&quot; sudo apt install python-pip&quot;</span><span class="p">)</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="s2">&quot; python -m pip install pip --upgrade --user&quot;</span><span class="p">)</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="s2">&quot; python -m pip install requests[security] --upgrade --user&quot;</span><span class="p">)</span>
</pre></div>
</div>
</div>
<footer>
<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>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,332 @@
<!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>binaryninja.fileaccessor &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.fileaccessor</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.fileaccessor</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="kn">import</span> <span class="nn">traceback</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="c1"># Binary Ninja components</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<div class="viewcode-block" id="FileAccessor"><a class="viewcode-back" href="../../binaryninja.fileaccessor.FileAccessor.html#binaryninja.fileaccessor.FileAccessor">[docs]</a><span class="k">class</span> <span class="nc">FileAccessor</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="FileAccessor.__init__"><a class="viewcode-back" href="../../binaryninja.fileaccessor.FileAccessor.html#binaryninja.fileaccessor.FileAccessor.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNFileAccessor</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">context</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getLength</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getLength</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_length</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">read</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_read</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">write</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">write</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_write</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_length</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">_get_length</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_length</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="mi">0</span>
<span class="k">def</span> <span class="nf">_read</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">dest</span><span class="p">,</span> <span class="n">offset</span><span class="p">,</span> <span class="n">length</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">offset</span><span class="p">,</span> <span class="n">length</span><span class="p">)</span>
<span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="mi">0</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">&gt;</span> <span class="n">length</span><span class="p">:</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">length</span><span class="p">]</span>
<span class="n">ctypes</span><span class="o">.</span><span class="n">memmove</span><span class="p">(</span><span class="n">dest</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="mi">0</span>
<span class="k">def</span> <span class="nf">_write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">offset</span><span class="p">,</span> <span class="n">src</span><span class="p">,</span> <span class="n">length</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_string_buffer</span><span class="p">(</span><span class="n">length</span><span class="p">)</span>
<span class="n">ctypes</span><span class="o">.</span><span class="n">memmove</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">src</span><span class="p">,</span> <span class="n">length</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">offset</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">raw</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="mi">0</span></div>
<div class="viewcode-block" id="CoreFileAccessor"><a class="viewcode-back" href="../../binaryninja.fileaccessor.CoreFileAccessor.html#binaryninja.fileaccessor.CoreFileAccessor">[docs]</a><span class="k">class</span> <span class="nc">CoreFileAccessor</span><span class="p">(</span><span class="n">FileAccessor</span><span class="p">):</span>
<div class="viewcode-block" id="CoreFileAccessor.__init__"><a class="viewcode-back" href="../../binaryninja.fileaccessor.CoreFileAccessor.html#binaryninja.fileaccessor.CoreFileAccessor.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">accessor</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">context</span> <span class="o">=</span> <span class="n">accessor</span><span class="o">.</span><span class="n">context</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getLength</span> <span class="o">=</span> <span class="n">accessor</span><span class="o">.</span><span class="n">getLength</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">read</span> <span class="o">=</span> <span class="n">accessor</span><span class="o">.</span><span class="n">read</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">write</span> <span class="o">=</span> <span class="n">accessor</span><span class="o">.</span><span class="n">write</span></div>
<div class="viewcode-block" id="CoreFileAccessor.get_length"><a class="viewcode-back" href="../../binaryninja.fileaccessor-module.html#binaryninja.fileaccessor.CoreFileAccessor.get_length">[docs]</a> <span class="k">def</span> <span class="nf">get_length</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getLength</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">context</span><span class="p">)</span></div>
<div class="viewcode-block" id="CoreFileAccessor.read"><a class="viewcode-back" href="../../binaryninja.fileaccessor-module.html#binaryninja.fileaccessor.CoreFileAccessor.read">[docs]</a> <span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">offset</span><span class="p">,</span> <span class="n">length</span><span class="p">):</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_string_buffer</span><span class="p">(</span><span class="n">length</span><span class="p">)</span>
<span class="n">length</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">offset</span><span class="p">,</span> <span class="n">length</span><span class="p">)</span>
<span class="k">return</span> <span class="n">data</span><span class="o">.</span><span class="n">raw</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">length</span><span class="p">]</span></div>
<div class="viewcode-block" id="CoreFileAccessor.write"><a class="viewcode-back" href="../../binaryninja.fileaccessor-module.html#binaryninja.fileaccessor.CoreFileAccessor.write">[docs]</a> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">offset</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">value</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">create_string_buffer</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="n">offset</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">value</span><span class="p">))</span></div></div>
</pre></div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,605 @@
<!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>binaryninja.filemetadata &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.filemetadata</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.filemetadata</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span>
<span class="kn">import</span> <span class="nn">traceback</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="c1"># Binary Ninja Components</span>
<span class="kn">import</span> <span class="nn">binaryninja</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">associateddatastore</span> <span class="c1">#required for _FileMetadataAssociatedDataStore</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">log</span>
<div class="viewcode-block" id="NavigationHandler"><a class="viewcode-back" href="../../binaryninja.filemetadata.NavigationHandler.html#binaryninja.datarender.NavigationHandler">[docs]</a><span class="k">class</span> <span class="nc">NavigationHandler</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">_register</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNavigationHandler</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">context</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getCurrentView</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getCurrentView</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_current_view</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getCurrentOffset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getCurrentOffset</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_current_offset</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">navigate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">navigate</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_navigate</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetFileMetadataNavigationHandler</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_get_current_view</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_current_view</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="n">view</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNAllocString</span><span class="p">(</span><span class="n">view</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_get_current_offset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_current_offset</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="mi">0</span>
<span class="k">def</span> <span class="nf">_navigate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">offset</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">navigate</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span></div>
<span class="k">class</span> <span class="nc">_FileMetadataAssociatedDataStore</span><span class="p">(</span><span class="n">associateddatastore</span><span class="o">.</span><span class="n">_AssociatedDataStore</span><span class="p">):</span>
<span class="n">_defaults</span> <span class="o">=</span> <span class="p">{}</span>
<div class="viewcode-block" id="FileMetadata"><a class="viewcode-back" href="../../binaryninja.filemetadata.FileMetadata.html#binaryninja.datarender.FileMetadata">[docs]</a><span class="k">class</span> <span class="nc">FileMetadata</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``class FileMetadata`` represents the file being analyzed by Binary Ninja. It is responsible for opening,</span>
<span class="sd"> closing, creating the database (.bndb) files, and is used to keep track of undoable actions.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">_associated_data</span> <span class="o">=</span> <span class="p">{}</span>
<div class="viewcode-block" id="FileMetadata.__init__"><a class="viewcode-back" href="../../binaryninja.filemetadata.FileMetadata.html#binaryninja.datarender.FileMetadata.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Instantiates a new FileMetadata class.</span>
<span class="sd"> :param filename: The string path to the file to be opened. Defaults to None.</span>
<span class="sd"> :param handle: A handle to the underlying C FileMetadata object. Defaults to None.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">handle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">handle_of_type</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNFileMetadata</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreateFileMetadata</span><span class="p">()</span>
<span class="k">if</span> <span class="n">filename</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetFilename</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">filename</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">nav</span> <span class="o">=</span> <span class="kc">None</span></div>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">navigation</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetFileMetadataNavigationHandler</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeFileMetadata</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">FileMetadata</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span> <span class="o">==</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__ne__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">FileMetadata</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span> <span class="o">!=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">_unregister</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">f</span><span class="p">):</span>
<span class="n">handle</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)</span>
<span class="k">if</span> <span class="n">handle</span><span class="o">.</span><span class="n">value</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_associated_data</span><span class="p">:</span>
<span class="k">del</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_associated_data</span><span class="p">[</span><span class="n">handle</span><span class="o">.</span><span class="n">value</span><span class="p">]</span>
<div class="viewcode-block" id="FileMetadata.set_default_session_data"><a class="viewcode-back" href="../../binaryninja.filemetadata-module.html#binaryninja.datarender.FileMetadata.set_default_session_data">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">set_default_session_data</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">_FileMetadataAssociatedDataStore</span><span class="o">.</span><span class="n">set_default</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span></div>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">original_filename</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The original name of the binary opened if a bndb, otherwise reads or sets the current filename (read/write)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetOriginalFilename</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@original_filename</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">original_filename</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetOriginalFilename</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">filename</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The name of the open bndb or binary filename (read/write)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFilename</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@filename</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">filename</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetFilename</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">modified</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Boolean result of whether the file is modified (Inverse of &#39;saved&#39; property) (read/write)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsFileModified</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@modified</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">modified</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="n">value</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNMarkFileModified</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNMarkFileSaved</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">analysis_changed</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Boolean result of whether the auto-analysis results have changed (read-only)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsAnalysisChanged</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">has_database</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Whether the FileMetadata is backed by a database (read-only)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsBackedByDatabase</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">view</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetCurrentView</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@view</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">view</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNNavigate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">),</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetCurrentOffset</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">))</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">offset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;The current offset into the file (read/write)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetCurrentOffset</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@offset</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">offset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNNavigate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetCurrentView</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">),</span> <span class="n">value</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">raw</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Gets the &quot;Raw&quot; BinaryView of the file&quot;&quot;&quot;</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFileViewOfType</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="s2">&quot;Raw&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="bp">self</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">view</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">saved</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Boolean result of whether the file has been saved (Inverse of &#39;modified&#39; property) (read/write)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="ow">not</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsFileModified</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@saved</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">saved</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="n">value</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNMarkFileSaved</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNMarkFileModified</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">navigation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">nav</span>
<span class="nd">@navigation</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">navigation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">value</span><span class="o">.</span><span class="n">_register</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">nav</span> <span class="o">=</span> <span class="n">value</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">session_data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Dictionary object where plugins can store arbitrary data associated with the file&quot;&quot;&quot;</span>
<span class="n">handle</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)</span>
<span class="k">if</span> <span class="n">handle</span><span class="o">.</span><span class="n">value</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">FileMetadata</span><span class="o">.</span><span class="n">_associated_data</span><span class="p">:</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">_FileMetadataAssociatedDataStore</span><span class="p">()</span>
<span class="n">FileMetadata</span><span class="o">.</span><span class="n">_associated_data</span><span class="p">[</span><span class="n">handle</span><span class="o">.</span><span class="n">value</span><span class="p">]</span> <span class="o">=</span> <span class="n">obj</span>
<span class="k">return</span> <span class="n">obj</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">FileMetadata</span><span class="o">.</span><span class="n">_associated_data</span><span class="p">[</span><span class="n">handle</span><span class="o">.</span><span class="n">value</span><span class="p">]</span>
<div class="viewcode-block" id="FileMetadata.close"><a class="viewcode-back" href="../../binaryninja.filemetadata-module.html#binaryninja.datarender.FileMetadata.close">[docs]</a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Closes the underlying file handle. It is recommended that this is done in a</span>
<span class="sd"> `finally` clause to avoid handle leaks.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNCloseFile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
<div class="viewcode-block" id="FileMetadata.begin_undo_actions"><a class="viewcode-back" href="../../binaryninja.filemetadata-module.html#binaryninja.datarender.FileMetadata.begin_undo_actions">[docs]</a> <span class="k">def</span> <span class="nf">begin_undo_actions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``begin_undo_actions`` start recording actions taken so the can be undone at some point.</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; bv.get_disassembly(0x100012f1)</span>
<span class="sd"> &#39;xor eax, eax&#39;</span>
<span class="sd"> &gt;&gt;&gt; bv.begin_undo_actions()</span>
<span class="sd"> &gt;&gt;&gt; bv.convert_to_nop(0x100012f1)</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt; bv.commit_undo_actions()</span>
<span class="sd"> &gt;&gt;&gt; bv.get_disassembly(0x100012f1)</span>
<span class="sd"> &#39;nop&#39;</span>
<span class="sd"> &gt;&gt;&gt; bv.undo()</span>
<span class="sd"> &gt;&gt;&gt; bv.get_disassembly(0x100012f1)</span>
<span class="sd"> &#39;xor eax, eax&#39;</span>
<span class="sd"> &gt;&gt;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNBeginUndoActions</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
<div class="viewcode-block" id="FileMetadata.commit_undo_actions"><a class="viewcode-back" href="../../binaryninja.filemetadata-module.html#binaryninja.datarender.FileMetadata.commit_undo_actions">[docs]</a> <span class="k">def</span> <span class="nf">commit_undo_actions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``commit_undo_actions`` commit the actions taken since the last commit to the undo database.</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; bv.get_disassembly(0x100012f1)</span>
<span class="sd"> &#39;xor eax, eax&#39;</span>
<span class="sd"> &gt;&gt;&gt; bv.begin_undo_actions()</span>
<span class="sd"> &gt;&gt;&gt; bv.convert_to_nop(0x100012f1)</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt; bv.commit_undo_actions()</span>
<span class="sd"> &gt;&gt;&gt; bv.get_disassembly(0x100012f1)</span>
<span class="sd"> &#39;nop&#39;</span>
<span class="sd"> &gt;&gt;&gt; bv.undo()</span>
<span class="sd"> &gt;&gt;&gt; bv.get_disassembly(0x100012f1)</span>
<span class="sd"> &#39;xor eax, eax&#39;</span>
<span class="sd"> &gt;&gt;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNCommitUndoActions</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
<div class="viewcode-block" id="FileMetadata.undo"><a class="viewcode-back" href="../../binaryninja.filemetadata-module.html#binaryninja.datarender.FileMetadata.undo">[docs]</a> <span class="k">def</span> <span class="nf">undo</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``undo`` undo the last commited action in the undo database.</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; bv.get_disassembly(0x100012f1)</span>
<span class="sd"> &#39;xor eax, eax&#39;</span>
<span class="sd"> &gt;&gt;&gt; bv.begin_undo_actions()</span>
<span class="sd"> &gt;&gt;&gt; bv.convert_to_nop(0x100012f1)</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt; bv.commit_undo_actions()</span>
<span class="sd"> &gt;&gt;&gt; bv.get_disassembly(0x100012f1)</span>
<span class="sd"> &#39;nop&#39;</span>
<span class="sd"> &gt;&gt;&gt; bv.undo()</span>
<span class="sd"> &gt;&gt;&gt; bv.get_disassembly(0x100012f1)</span>
<span class="sd"> &#39;xor eax, eax&#39;</span>
<span class="sd"> &gt;&gt;&gt; bv.redo()</span>
<span class="sd"> &gt;&gt;&gt; bv.get_disassembly(0x100012f1)</span>
<span class="sd"> &#39;nop&#39;</span>
<span class="sd"> &gt;&gt;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNUndo</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
<div class="viewcode-block" id="FileMetadata.redo"><a class="viewcode-back" href="../../binaryninja.filemetadata-module.html#binaryninja.datarender.FileMetadata.redo">[docs]</a> <span class="k">def</span> <span class="nf">redo</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``redo`` redo the last commited action in the undo database.</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; bv.get_disassembly(0x100012f1)</span>
<span class="sd"> &#39;xor eax, eax&#39;</span>
<span class="sd"> &gt;&gt;&gt; bv.begin_undo_actions()</span>
<span class="sd"> &gt;&gt;&gt; bv.convert_to_nop(0x100012f1)</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt; bv.commit_undo_actions()</span>
<span class="sd"> &gt;&gt;&gt; bv.get_disassembly(0x100012f1)</span>
<span class="sd"> &#39;nop&#39;</span>
<span class="sd"> &gt;&gt;&gt; bv.undo()</span>
<span class="sd"> &gt;&gt;&gt; bv.get_disassembly(0x100012f1)</span>
<span class="sd"> &#39;xor eax, eax&#39;</span>
<span class="sd"> &gt;&gt;&gt; bv.redo()</span>
<span class="sd"> &gt;&gt;&gt; bv.get_disassembly(0x100012f1)</span>
<span class="sd"> &#39;nop&#39;</span>
<span class="sd"> &gt;&gt;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRedo</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
<div class="viewcode-block" id="FileMetadata.navigate"><a class="viewcode-back" href="../../binaryninja.filemetadata-module.html#binaryninja.datarender.FileMetadata.navigate">[docs]</a> <span class="k">def</span> <span class="nf">navigate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">offset</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNavigate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">view</span><span class="p">),</span> <span class="n">offset</span><span class="p">)</span></div>
<div class="viewcode-block" id="FileMetadata.create_database"><a class="viewcode-back" href="../../binaryninja.filemetadata-module.html#binaryninja.datarender.FileMetadata.create_database">[docs]</a> <span class="k">def</span> <span class="nf">create_database</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">progress_func</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">progress_func</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreateDatabase</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">raw</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">filename</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreateDatabaseWithProgress</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">raw</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">)(</span>
<span class="k">lambda</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">cur</span><span class="p">,</span> <span class="n">total</span><span class="p">:</span> <span class="n">progress_func</span><span class="p">(</span><span class="n">cur</span><span class="p">,</span> <span class="n">total</span><span class="p">)))</span></div>
<div class="viewcode-block" id="FileMetadata.open_existing_database"><a class="viewcode-back" href="../../binaryninja.filemetadata-module.html#binaryninja.datarender.FileMetadata.open_existing_database">[docs]</a> <span class="k">def</span> <span class="nf">open_existing_database</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">progress_func</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">progress_func</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNOpenExistingDatabase</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">filename</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNOpenExistingDatabaseWithProgress</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">)(</span>
<span class="k">lambda</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">cur</span><span class="p">,</span> <span class="n">total</span><span class="p">:</span> <span class="n">progress_func</span><span class="p">(</span><span class="n">cur</span><span class="p">,</span> <span class="n">total</span><span class="p">)))</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="bp">self</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">view</span><span class="p">)</span></div>
<div class="viewcode-block" id="FileMetadata.save_auto_snapshot"><a class="viewcode-back" href="../../binaryninja.filemetadata-module.html#binaryninja.datarender.FileMetadata.save_auto_snapshot">[docs]</a> <span class="k">def</span> <span class="nf">save_auto_snapshot</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">progress_func</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">progress_func</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSaveAutoSnapshot</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">raw</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSaveAutoSnapshotWithProgress</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">raw</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">)(</span>
<span class="k">lambda</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">cur</span><span class="p">,</span> <span class="n">total</span><span class="p">:</span> <span class="n">progress_func</span><span class="p">(</span><span class="n">cur</span><span class="p">,</span> <span class="n">total</span><span class="p">)))</span></div>
<div class="viewcode-block" id="FileMetadata.get_view_of_type"><a class="viewcode-back" href="../../binaryninja.filemetadata-module.html#binaryninja.datarender.FileMetadata.get_view_of_type">[docs]</a> <span class="k">def</span> <span class="nf">get_view_of_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFileViewOfType</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">view_type</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBinaryViewTypeByName</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
<span class="k">if</span> <span class="n">view_type</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreateBinaryViewOfType</span><span class="p">(</span><span class="n">view_type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="bp">self</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">view</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="nb">object</span><span class="o">.</span><span class="fm">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="s2">&quot;attribute &#39;</span><span class="si">%s</span><span class="s2">&#39; is read only&quot;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span></div>
</pre></div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,862 @@
<!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>binaryninja.flowgraph &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.flowgraph</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.flowgraph</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">threading</span>
<span class="kn">import</span> <span class="nn">traceback</span>
<span class="c1"># Binary Ninja components</span>
<span class="kn">import</span> <span class="nn">binaryninja</span>
<span class="kn">from</span> <span class="nn">binaryninja.enums</span> <span class="k">import</span> <span class="p">(</span><span class="n">BranchType</span><span class="p">,</span> <span class="n">InstructionTextTokenType</span><span class="p">,</span> <span class="n">HighlightStandardColor</span><span class="p">)</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">function</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">binaryview</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">lowlevelil</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">mediumlevelil</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">basicblock</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">log</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">highlight</span>
<span class="c1"># 2-3 compatibility</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="nb">range</span>
<div class="viewcode-block" id="FlowGraphEdge"><a class="viewcode-back" href="../../binaryninja.flowgraph.FlowGraphEdge.html#binaryninja.flowgraph.FlowGraphEdge">[docs]</a><span class="k">class</span> <span class="nc">FlowGraphEdge</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="FlowGraphEdge.__init__"><a class="viewcode-back" href="../../binaryninja.flowgraph.FlowGraphEdge.html#binaryninja.flowgraph.FlowGraphEdge.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">branch_type</span><span class="p">,</span> <span class="n">source</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">points</span><span class="p">,</span> <span class="n">back_edge</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">BranchType</span><span class="p">(</span><span class="n">branch_type</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">source</span> <span class="o">=</span> <span class="n">source</span>
<span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">target</span>
<span class="bp">self</span><span class="o">.</span><span class="n">points</span> <span class="o">=</span> <span class="n">points</span>
<span class="bp">self</span><span class="o">.</span><span class="n">back_edge</span> <span class="o">=</span> <span class="n">back_edge</span></div>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">))</span></div>
<div class="viewcode-block" id="FlowGraphNode"><a class="viewcode-back" href="../../binaryninja.flowgraph.FlowGraphNode.html#binaryninja.flowgraph.FlowGraphNode">[docs]</a><span class="k">class</span> <span class="nc">FlowGraphNode</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="FlowGraphNode.__init__"><a class="viewcode-back" href="../../binaryninja.flowgraph.FlowGraphNode.html#binaryninja.flowgraph.FlowGraphNode.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">graph</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">handle</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="n">graph</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;flow graph node must be associated with a graph&quot;</span><span class="p">)</span>
<span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreateFlowGraphNode</span><span class="p">(</span><span class="n">graph</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">handle</span>
<span class="bp">self</span><span class="o">.</span><span class="n">graph</span> <span class="o">=</span> <span class="n">graph</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">graph</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">graph</span> <span class="o">=</span> <span class="n">FlowGraph</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFlowGraphNodeOwner</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">))</span></div>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeFlowGraphNode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">FlowGraphNode</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span> <span class="o">==</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__ne__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">FlowGraphNode</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span> <span class="o">!=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">basic_block</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Basic block associated with this part of the flow graph&quot;&quot;&quot;</span>
<span class="n">block</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFlowGraphBasicBlock</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">block</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">func_handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockFunction</span><span class="p">(</span><span class="n">block</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">func_handle</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeBasicBlock</span><span class="p">(</span><span class="n">block</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFunctionData</span><span class="p">(</span><span class="n">func_handle</span><span class="p">))</span>
<span class="n">func</span> <span class="o">=</span> <span class="n">function</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">func_handle</span><span class="p">)</span>
<span class="k">if</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsLowLevelILBasicBlock</span><span class="p">(</span><span class="n">block</span><span class="p">):</span>
<span class="n">block</span> <span class="o">=</span> <span class="n">lowlevelil</span><span class="o">.</span><span class="n">LowLevelILBasicBlock</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span>
<span class="n">lowlevelil</span><span class="o">.</span><span class="n">LowLevelILFunction</span><span class="p">(</span><span class="n">func</span><span class="o">.</span><span class="n">arch</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockLowLevelILFunction</span><span class="p">(</span><span class="n">block</span><span class="p">),</span> <span class="n">func</span><span class="p">))</span>
<span class="k">elif</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsMediumLevelILBasicBlock</span><span class="p">(</span><span class="n">block</span><span class="p">):</span>
<span class="n">block</span> <span class="o">=</span> <span class="n">mediumlevelil</span><span class="o">.</span><span class="n">MediumLevelILBasicBlock</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span>
<span class="n">mediumlevelil</span><span class="o">.</span><span class="n">MediumLevelILFunction</span><span class="p">(</span><span class="n">func</span><span class="o">.</span><span class="n">arch</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockMediumLevelILFunction</span><span class="p">(</span><span class="n">block</span><span class="p">),</span> <span class="n">func</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">block</span> <span class="o">=</span> <span class="n">basicblock</span><span class="o">.</span><span class="n">BasicBlock</span><span class="p">(</span><span class="n">block</span><span class="p">,</span> <span class="n">view</span><span class="p">)</span>
<span class="k">return</span> <span class="n">block</span>
<span class="nd">@basic_block</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">basic_block</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">block</span><span class="p">):</span>
<span class="k">if</span> <span class="n">block</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetFlowGraphBasicBlock</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetFlowGraphBasicBlock</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">block</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">x</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Flow graph block X (read-only)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFlowGraphNodeX</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">y</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Flow graph block Y (read-only)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFlowGraphNodeY</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">width</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Flow graph block width (read-only)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFlowGraphNodeWidth</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">height</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Flow graph block height (read-only)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFlowGraphNodeHeight</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">lines</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Flow graph block list of text lines&quot;&quot;&quot;</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">lines</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFlowGraphNodeLines</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">block</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">basic_block</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">addr</span> <span class="o">=</span> <span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">addr</span>
<span class="k">if</span> <span class="p">(</span><span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">instrIndex</span> <span class="o">!=</span> <span class="mh">0xffffffffffffffff</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">block</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">block</span><span class="p">,</span> <span class="s1">&#39;il_function&#39;</span><span class="p">):</span>
<span class="n">il_instr</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">il_function</span><span class="p">[</span><span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">instrIndex</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">il_instr</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">color</span> <span class="o">=</span> <span class="n">highlight</span><span class="o">.</span><span class="n">HighlightColor</span><span class="o">.</span><span class="n">_from_core_struct</span><span class="p">(</span><span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">highlight</span><span class="p">)</span>
<span class="n">tokens</span> <span class="o">=</span> <span class="n">function</span><span class="o">.</span><span class="n">InstructionTextToken</span><span class="o">.</span><span class="n">get_instruction_lines</span><span class="p">(</span><span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">tokens</span><span class="p">,</span> <span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">count</span><span class="p">)</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">function</span><span class="o">.</span><span class="n">DisassemblyTextLine</span><span class="p">(</span><span class="n">tokens</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">il_instr</span><span class="p">,</span> <span class="n">color</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeDisassemblyTextLines</span><span class="p">(</span><span class="n">lines</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="nd">@lines</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">lines</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">lines</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">lines</span> <span class="o">=</span> <span class="n">lines</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
<span class="n">line_buf</span> <span class="o">=</span> <span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNDisassemblyTextLine</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">))()</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)):</span>
<span class="n">line</span> <span class="o">=</span> <span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">line</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">line</span> <span class="o">=</span> <span class="n">function</span><span class="o">.</span><span class="n">DisassemblyTextLine</span><span class="p">([</span><span class="n">function</span><span class="o">.</span><span class="n">InstructionTextToken</span><span class="p">(</span><span class="n">InstructionTextTokenType</span><span class="o">.</span><span class="n">TextToken</span><span class="p">,</span> <span class="n">line</span><span class="p">)])</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">line</span><span class="p">,</span> <span class="n">function</span><span class="o">.</span><span class="n">DisassemblyTextLine</span><span class="p">):</span>
<span class="n">line</span> <span class="o">=</span> <span class="n">function</span><span class="o">.</span><span class="n">DisassemblyTextLine</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
<span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">address</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">tokens</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">line_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">addr</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">address</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">line_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">addr</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">line_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">addr</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">address</span>
<span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">il_instruction</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">line_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">instrIndex</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">il_instruction</span><span class="o">.</span><span class="n">instr_index</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">line_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">instrIndex</span> <span class="o">=</span> <span class="mh">0xffffffffffffffff</span>
<span class="n">color</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">highlight</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">color</span><span class="p">,</span> <span class="n">HighlightStandardColor</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">color</span><span class="p">,</span> <span class="n">highlight</span><span class="o">.</span><span class="n">HighlightColor</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Specified color is not one of HighlightStandardColor, highlight.HighlightColor&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">color</span><span class="p">,</span> <span class="n">HighlightStandardColor</span><span class="p">):</span>
<span class="n">color</span> <span class="o">=</span> <span class="n">highlight</span><span class="o">.</span><span class="n">HighlightColor</span><span class="p">(</span><span class="n">color</span><span class="p">)</span>
<span class="n">line_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">highlight</span> <span class="o">=</span> <span class="n">color</span><span class="o">.</span><span class="n">_get_core_struct</span><span class="p">()</span>
<span class="n">line_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">tokens</span><span class="p">)</span>
<span class="n">line_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">tokens</span> <span class="o">=</span> <span class="n">function</span><span class="o">.</span><span class="n">InstructionTextToken</span><span class="o">.</span><span class="n">get_instruction_lines</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">tokens</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetFlowGraphNodeLines</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">line_buf</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">))</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">outgoing_edges</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Flow graph block list of outgoing edges (read-only)&quot;&quot;&quot;</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">edges</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFlowGraphNodeOutgoingEdges</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">branch_type</span> <span class="o">=</span> <span class="n">BranchType</span><span class="p">(</span><span class="n">edges</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
<span class="n">target</span> <span class="o">=</span> <span class="n">edges</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">target</span>
<span class="k">if</span> <span class="n">target</span><span class="p">:</span>
<span class="n">target</span> <span class="o">=</span> <span class="n">FlowGraphNode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">graph</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewFlowGraphNodeReference</span><span class="p">(</span><span class="n">target</span><span class="p">))</span>
<span class="n">points</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">edges</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">pointCount</span><span class="p">):</span>
<span class="n">points</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">edges</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">points</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">edges</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">points</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="o">.</span><span class="n">y</span><span class="p">))</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">FlowGraphEdge</span><span class="p">(</span><span class="n">branch_type</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">points</span><span class="p">,</span> <span class="n">edges</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">backEdge</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeFlowGraphNodeOutgoingEdgeList</span><span class="p">(</span><span class="n">edges</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">highlight</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Gets or sets the highlight color for the node</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; g = FlowGraph()</span>
<span class="sd"> &gt;&gt;&gt; node = FlowGraphNode(g)</span>
<span class="sd"> &gt;&gt;&gt; node.highlight = HighlightStandardColor.BlueHighlightColor</span>
<span class="sd"> &gt;&gt;&gt; node.highlight</span>
<span class="sd"> &lt;color: blue&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">highlight</span><span class="o">.</span><span class="n">HighlightColor</span><span class="o">.</span><span class="n">_from_core_struct</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNGetFlowGraphNodeHighlight</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">))</span>
<span class="nd">@highlight</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">highlight</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">color</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">color</span><span class="p">,</span> <span class="n">HighlightStandardColor</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">color</span><span class="p">,</span> <span class="n">highlight</span><span class="o">.</span><span class="n">HighlightColor</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Specified color is not one of HighlightStandardColor, highlight.HighlightColor&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">color</span><span class="p">,</span> <span class="n">HighlightStandardColor</span><span class="p">):</span>
<span class="n">color</span> <span class="o">=</span> <span class="n">highlight</span><span class="o">.</span><span class="n">HighlightColor</span><span class="p">(</span><span class="n">color</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetFlowGraphNodeHighlight</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">color</span><span class="o">.</span><span class="n">_get_core_struct</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">block</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">basic_block</span>
<span class="k">if</span> <span class="n">block</span><span class="p">:</span>
<span class="n">arch</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">arch</span>
<span class="k">if</span> <span class="n">arch</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;&lt;graph node: </span><span class="si">%s</span><span class="s2">@</span><span class="si">%#x</span><span class="s2">-</span><span class="si">%#x</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">arch</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">block</span><span class="o">.</span><span class="n">start</span><span class="p">,</span> <span class="n">block</span><span class="o">.</span><span class="n">end</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;&lt;graph node: </span><span class="si">%#x</span><span class="s2">-</span><span class="si">%#x</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">block</span><span class="o">.</span><span class="n">start</span><span class="p">,</span> <span class="n">block</span><span class="o">.</span><span class="n">end</span><span class="p">)</span>
<span class="k">return</span> <span class="s2">&quot;&lt;graph node&gt;&quot;</span>
<span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">lines</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFlowGraphNodeLines</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">block</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">basic_block</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">addr</span> <span class="o">=</span> <span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">addr</span>
<span class="k">if</span> <span class="p">(</span><span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">instrIndex</span> <span class="o">!=</span> <span class="mh">0xffffffffffffffff</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">block</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">block</span><span class="p">,</span> <span class="s1">&#39;il_function&#39;</span><span class="p">):</span>
<span class="n">il_instr</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">il_function</span><span class="p">[</span><span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">instrIndex</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">il_instr</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">tokens</span> <span class="o">=</span> <span class="n">function</span><span class="o">.</span><span class="n">InstructionTextToken</span><span class="o">.</span><span class="n">get_instruction_lines</span><span class="p">(</span><span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">tokens</span><span class="p">,</span> <span class="n">lines</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">count</span><span class="p">)</span>
<span class="k">yield</span> <span class="n">function</span><span class="o">.</span><span class="n">DisassemblyTextLine</span><span class="p">(</span><span class="n">tokens</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">il_instr</span><span class="p">)</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeDisassemblyTextLines</span><span class="p">(</span><span class="n">lines</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<div class="viewcode-block" id="FlowGraphNode.add_outgoing_edge"><a class="viewcode-back" href="../../binaryninja.flowgraph-module.html#binaryninja.flowgraph.FlowGraphNode.add_outgoing_edge">[docs]</a> <span class="k">def</span> <span class="nf">add_outgoing_edge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">edge_type</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``add_outgoing_edge`` connects two flow graph nodes with an edge.</span>
<span class="sd"> :param BranchType edge_type: Type of edge to add</span>
<span class="sd"> :param FlowGraphNode target: Target node object</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNAddFlowGraphNodeOutgoingEdge</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">edge_type</span><span class="p">,</span> <span class="n">target</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="FlowGraphLayoutRequest"><a class="viewcode-back" href="../../binaryninja.flowgraph.FlowGraphLayoutRequest.html#binaryninja.flowgraph.FlowGraphLayoutRequest">[docs]</a><span class="k">class</span> <span class="nc">FlowGraphLayoutRequest</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="FlowGraphLayoutRequest.__init__"><a class="viewcode-back" href="../../binaryninja.flowgraph.FlowGraphLayoutRequest.html#binaryninja.flowgraph.FlowGraphLayoutRequest.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">graph</span><span class="p">,</span> <span class="n">callback</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">on_complete</span> <span class="o">=</span> <span class="n">callback</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">_complete</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNStartFlowGraphLayout</span><span class="p">(</span><span class="n">graph</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">abort</span><span class="p">()</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeFlowGraphLayoutRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_complete</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_complete</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">on_complete</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">complete</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Whether flow graph layout is complete (read-only)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsFlowGraphLayoutRequestComplete</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">graph</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Flow graph that is being processed (read-only)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">CoreFlowGraph</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNGetGraphForFlowGraphLayoutRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">))</span>
<div class="viewcode-block" id="FlowGraphLayoutRequest.abort"><a class="viewcode-back" href="../../binaryninja.flowgraph-module.html#binaryninja.flowgraph.FlowGraphLayoutRequest.abort">[docs]</a> <span class="k">def</span> <span class="nf">abort</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNAbortFlowGraphLayoutRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">on_complete</span> <span class="o">=</span> <span class="kc">None</span></div></div>
<div class="viewcode-block" id="FlowGraph"><a class="viewcode-back" href="../../binaryninja.flowgraph.FlowGraph.html#binaryninja.flowgraph.FlowGraph">[docs]</a><span class="k">class</span> <span class="nc">FlowGraph</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``class FlowGraph`` implements a directed flow graph to be shown in the UI. This class allows plugins to</span>
<span class="sd"> create custom flow graphs and render them in the UI using the flow graph report API.</span>
<span class="sd"> An example of creating a flow graph and presenting it in the UI:</span>
<span class="sd"> &gt;&gt;&gt; graph = FlowGraph()</span>
<span class="sd"> &gt;&gt;&gt; node_a = FlowGraphNode(graph)</span>
<span class="sd"> &gt;&gt;&gt; node_a.lines = [&quot;Node A&quot;]</span>
<span class="sd"> &gt;&gt;&gt; node_b = FlowGraphNode(graph)</span>
<span class="sd"> &gt;&gt;&gt; node_b.lines = [&quot;Node B&quot;]</span>
<span class="sd"> &gt;&gt;&gt; node_c = FlowGraphNode(graph)</span>
<span class="sd"> &gt;&gt;&gt; node_c.lines = [&quot;Node C&quot;]</span>
<span class="sd"> &gt;&gt;&gt; graph.append(node_a)</span>
<span class="sd"> 0</span>
<span class="sd"> &gt;&gt;&gt; graph.append(node_b)</span>
<span class="sd"> 1</span>
<span class="sd"> &gt;&gt;&gt; graph.append(node_c)</span>
<span class="sd"> 2</span>
<span class="sd"> &gt;&gt;&gt; node_a.add_outgoing_edge(BranchType.UnconditionalBranch, node_b)</span>
<span class="sd"> &gt;&gt;&gt; node_a.add_outgoing_edge(BranchType.UnconditionalBranch, node_c)</span>
<span class="sd"> &gt;&gt;&gt; show_graph_report(&quot;Custom Graph&quot;, graph)</span>
<span class="sd"> .. note:: In the current implementation, only graphs that have a single start node where all other nodes are \</span>
<span class="sd"> reachable from outgoing edges can be rendered correctly. This describes the natural limitations of a control \</span>
<span class="sd"> flow graph, which is what the rendering logic was designed for. Graphs that have nodes that are only reachable \</span>
<span class="sd"> from incoming edges, or graphs that have disjoint subgraphs will not render correctly. This will be fixed \</span>
<span class="sd"> in a future version.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="FlowGraph.__init__"><a class="viewcode-back" href="../../binaryninja.flowgraph.FlowGraph.html#binaryninja.flowgraph.FlowGraph.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">handle</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_ext_cb</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCustomFlowGraph</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_ext_cb</span><span class="o">.</span><span class="n">context</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_ext_cb</span><span class="o">.</span><span class="n">prepareForLayout</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ext_cb</span><span class="o">.</span><span class="n">prepareForLayout</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prepare_for_layout</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_ext_cb</span><span class="o">.</span><span class="n">populateNodes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ext_cb</span><span class="o">.</span><span class="n">populateNodes</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_populate_nodes</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_ext_cb</span><span class="o">.</span><span class="n">completeLayout</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ext_cb</span><span class="o">.</span><span class="n">completeLayout</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_complete_layout</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_ext_cb</span><span class="o">.</span><span class="n">update</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ext_cb</span><span class="o">.</span><span class="n">update</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_update</span><span class="p">)</span>
<span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreateCustomFlowGraph</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_ext_cb</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">handle</span></div>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeFlowGraph</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">FlowGraph</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span> <span class="o">==</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__ne__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">FlowGraph</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span> <span class="o">!=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_prepare_for_layout</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">prepare_for_layout</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">_populate_nodes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">populate_nodes</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">_complete_layout</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">complete_layout</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">_update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">graph</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
<span class="k">if</span> <span class="n">graph</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewFlowGraphReference</span><span class="p">(</span><span class="n">graph</span><span class="o">.</span><span class="n">handle</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">None</span>
<div class="viewcode-block" id="FlowGraph.finish_prepare_for_layout"><a class="viewcode-back" href="../../binaryninja.flowgraph-module.html#binaryninja.flowgraph.FlowGraph.finish_prepare_for_layout">[docs]</a> <span class="k">def</span> <span class="nf">finish_prepare_for_layout</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``finish_prepare_for_layout`` signals that preparations for rendering a graph are complete.</span>
<span class="sd"> This method should only be called by a ``prepare_for_layout`` reimplementation.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFinishPrepareForLayout</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
<div class="viewcode-block" id="FlowGraph.prepare_for_layout"><a class="viewcode-back" href="../../binaryninja.flowgraph-module.html#binaryninja.flowgraph.FlowGraph.prepare_for_layout">[docs]</a> <span class="k">def</span> <span class="nf">prepare_for_layout</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``prepare_for_layout`` can be overridden by subclasses to handling preparations that must take</span>
<span class="sd"> place before a flow graph is rendered, such as waiting for a function to finish analysis. If</span>
<span class="sd"> this function is overridden, the ``finish_prepare_for_layout`` method must be called once</span>
<span class="sd"> preparations are completed.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">finish_prepare_for_layout</span><span class="p">()</span></div>
<div class="viewcode-block" id="FlowGraph.populate_nodes"><a class="viewcode-back" href="../../binaryninja.flowgraph-module.html#binaryninja.flowgraph.FlowGraph.populate_nodes">[docs]</a> <span class="k">def</span> <span class="nf">populate_nodes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``prepare_for_layout`` can be overridden by subclasses to create nodes in a graph when a flow</span>
<span class="sd"> graph needs to be rendered. This will happen on a worker thread and will not block the UI.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="FlowGraph.complete_layout"><a class="viewcode-back" href="../../binaryninja.flowgraph-module.html#binaryninja.flowgraph.FlowGraph.complete_layout">[docs]</a> <span class="k">def</span> <span class="nf">complete_layout</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``complete_layout`` can be overridden by subclasses and is called when a graph layout is completed.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span></div>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">function</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Function for a flow graph&quot;&quot;&quot;</span>
<span class="n">func</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFunctionForFlowGraph</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="n">func</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">function</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">func</span><span class="p">)</span>
<span class="nd">@function</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="k">if</span> <span class="n">func</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">func</span> <span class="o">=</span> <span class="n">func</span><span class="o">.</span><span class="n">handle</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetFunctionForFlowGraph</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">func</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">complete</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Whether flow graph layout is complete (read-only)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsFlowGraphLayoutComplete</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">nodes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;List of nodes in graph (read-only)&quot;&quot;&quot;</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">blocks</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFlowGraphNodes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">FlowGraphNode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewFlowGraphNodeReference</span><span class="p">(</span><span class="n">blocks</span><span class="p">[</span><span class="n">i</span><span class="p">])))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeFlowGraphNodeList</span><span class="p">(</span><span class="n">blocks</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">has_nodes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Whether the flow graph has at least one node (read-only)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNFlowGraphHasNodes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">width</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Flow graph width (read-only)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFlowGraphWidth</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">height</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Flow graph height (read-only)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFlowGraphHeight</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">horizontal_block_margin</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetHorizontalFlowGraphBlockMargin</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@horizontal_block_margin</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">horizontal_block_margin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetFlowGraphBlockMargins</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">vertical_block_margin</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">vertical_block_margin</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetVerticalFlowGraphBlockMargin</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@vertical_block_margin</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">vertical_block_margin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetFlowGraphBlockMargins</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">horizontal_block_margin</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">is_il</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsILFlowGraph</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">is_low_level_il</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsLowLevelILFlowGraph</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">is_medium_level_il</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsMediumLevelILFlowGraph</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">il_function</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_low_level_il</span><span class="p">:</span>
<span class="n">il_func</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFlowGraphLowLevelILFunction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">il_func</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">function</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">function</span>
<span class="k">if</span> <span class="n">function</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">lowlevelil</span><span class="o">.</span><span class="n">LowLevelILFunction</span><span class="p">(</span><span class="n">function</span><span class="o">.</span><span class="n">arch</span><span class="p">,</span> <span class="n">il_func</span><span class="p">,</span> <span class="n">function</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_medium_level_il</span><span class="p">:</span>
<span class="n">il_func</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFlowGraphMediumLevelILFunction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">il_func</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">function</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">function</span>
<span class="k">if</span> <span class="n">function</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">mediumlevelil</span><span class="o">.</span><span class="n">MediumLevelILFunction</span><span class="p">(</span><span class="n">function</span><span class="o">.</span><span class="n">arch</span><span class="p">,</span> <span class="n">il_func</span><span class="p">,</span> <span class="n">function</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="nd">@il_function</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">il_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">lowlevelil</span><span class="o">.</span><span class="n">LowLevelILFunction</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetFlowGraphLowLevelILFunction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">func</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetFlowGraphMediumLevelILFunction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">mediumlevelil</span><span class="o">.</span><span class="n">MediumLevelILFunction</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetFlowGraphLowLevelILFunction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetFlowGraphMediumLevelILFunction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">func</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">func</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetFlowGraphLowLevelILFunction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetFlowGraphMediumLevelILFunction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;expected IL function for setting il_function property&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="nb">object</span><span class="o">.</span><span class="fm">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="s2">&quot;attribute &#39;</span><span class="si">%s</span><span class="s2">&#39; is read only&quot;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">function</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">function</span>
<span class="k">if</span> <span class="n">function</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;&lt;flow graph&gt;&quot;</span>
<span class="k">return</span> <span class="s2">&quot;&lt;graph of </span><span class="si">%s</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="nb">repr</span><span class="p">(</span><span class="n">function</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">nodes</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFlowGraphNodes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="k">yield</span> <span class="n">FlowGraphNode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewFlowGraphNodeReference</span><span class="p">(</span><span class="n">nodes</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeFlowGraphNodeList</span><span class="p">(</span><span class="n">nodes</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<div class="viewcode-block" id="FlowGraph.layout"><a class="viewcode-back" href="../../binaryninja.flowgraph-module.html#binaryninja.flowgraph.FlowGraph.layout">[docs]</a> <span class="k">def</span> <span class="nf">layout</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">callback</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``layout`` starts rendering a graph for display. Once a layout is complete, each node will contain</span>
<span class="sd"> coordinates and extents that can be used to render a graph with minimum additional computation.</span>
<span class="sd"> This function does not wait for the graph to be ready to display, but a callback can be provided</span>
<span class="sd"> to signal when the graph is ready.</span>
<span class="sd"> :param callable() callback: Function to be called when the graph is ready to display</span>
<span class="sd"> :return: Pending flow graph layout request object</span>
<span class="sd"> :rtype: FlowGraphLayoutRequest</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">FlowGraphLayoutRequest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">_wait_complete</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_wait_cond</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
<div class="viewcode-block" id="FlowGraph.layout_and_wait"><a class="viewcode-back" href="../../binaryninja.flowgraph-module.html#binaryninja.flowgraph.FlowGraph.layout_and_wait">[docs]</a> <span class="k">def</span> <span class="nf">layout_and_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``layout_and_wait`` starts rendering a graph for display, and waits for the graph to be ready to</span>
<span class="sd"> display. After this function returns, each node will contain coordinates and extents that can be</span>
<span class="sd"> used to render a graph with minimum additional computation.</span>
<span class="sd"> Do not use this API on the UI thread (use ``layout`` with a callback instead).</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_wait_cond</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_wait_cond</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
<span class="n">request</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">layout</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_wait_complete</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_wait_cond</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_wait_cond</span><span class="o">.</span><span class="n">release</span><span class="p">()</span></div>
<div class="viewcode-block" id="FlowGraph.get_nodes_in_region"><a class="viewcode-back" href="../../binaryninja.flowgraph-module.html#binaryninja.flowgraph.FlowGraph.get_nodes_in_region">[docs]</a> <span class="k">def</span> <span class="nf">get_nodes_in_region</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">left</span><span class="p">,</span> <span class="n">top</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">bottom</span><span class="p">):</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">nodes</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFlowGraphNodesInRegion</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">left</span><span class="p">,</span> <span class="n">top</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">bottom</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">FlowGraphNode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewFlowGraphNodeReference</span><span class="p">(</span><span class="n">nodes</span><span class="p">[</span><span class="n">i</span><span class="p">])))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeFlowGraphNodeList</span><span class="p">(</span><span class="n">nodes</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span></div>
<div class="viewcode-block" id="FlowGraph.append"><a class="viewcode-back" href="../../binaryninja.flowgraph-module.html#binaryninja.flowgraph.FlowGraph.append">[docs]</a> <span class="k">def</span> <span class="nf">append</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``append`` adds a node to a flow graph.</span>
<span class="sd"> :param FlowGraphNode node: Node to add</span>
<span class="sd"> :return: Index of node</span>
<span class="sd"> :rtype: int</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNAddFlowGraphNode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">node</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">):</span>
<span class="n">node</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFlowGraphNode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
<span class="k">if</span> <span class="n">node</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">FlowGraphNode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
<div class="viewcode-block" id="FlowGraph.show"><a class="viewcode-back" href="../../binaryninja.flowgraph-module.html#binaryninja.flowgraph.FlowGraph.show">[docs]</a> <span class="k">def</span> <span class="nf">show</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">title</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``show`` displays the graph in a new tab in the UI.</span>
<span class="sd"> :param str title: Title to show in the new tab</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">interaction</span><span class="o">.</span><span class="n">show_graph_report</span><span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span></div>
<div class="viewcode-block" id="FlowGraph.update"><a class="viewcode-back" href="../../binaryninja.flowgraph-module.html#binaryninja.flowgraph.FlowGraph.update">[docs]</a> <span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``update`` can be overridden by subclasses to allow a graph to be updated after it has been</span>
<span class="sd"> presented in the UI. This will automatically occur if the function referenced by the ``function``</span>
<span class="sd"> property has been updated.</span>
<span class="sd"> Return a new ``FlowGraph`` object with the new information if updates are desired. If the graph</span>
<span class="sd"> does not need updating, ``None`` can be returned to leave the graph in its current state.</span>
<span class="sd"> :return: Updated graph, or ``None``</span>
<span class="sd"> :rtype: FlowGraph</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="kc">None</span></div></div>
<div class="viewcode-block" id="CoreFlowGraph"><a class="viewcode-back" href="../../binaryninja.flowgraph.CoreFlowGraph.html#binaryninja.flowgraph.CoreFlowGraph">[docs]</a><span class="k">class</span> <span class="nc">CoreFlowGraph</span><span class="p">(</span><span class="n">FlowGraph</span><span class="p">):</span>
<div class="viewcode-block" id="CoreFlowGraph.__init__"><a class="viewcode-back" href="../../binaryninja.flowgraph.CoreFlowGraph.html#binaryninja.flowgraph.CoreFlowGraph.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">CoreFlowGraph</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">handle</span><span class="p">)</span></div>
<div class="viewcode-block" id="CoreFlowGraph.update"><a class="viewcode-back" href="../../binaryninja.flowgraph-module.html#binaryninja.flowgraph.CoreFlowGraph.update">[docs]</a> <span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">graph</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNUpdateFlowGraph</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">graph</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">CoreFlowGraph</span><span class="p">(</span><span class="n">graph</span><span class="p">)</span></div></div>
</pre></div>
</div>
</div>
<footer>
<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>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,327 @@
<!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>binaryninja.functionrecognizer &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.functionrecognizer</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.functionrecognizer</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="kn">import</span> <span class="nn">traceback</span>
<span class="c1"># Binary Ninja components</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">function</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">filemetadata</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">binaryview</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">lowlevelil</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">log</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">mediumlevelil</span>
<div class="viewcode-block" id="FunctionRecognizer"><a class="viewcode-back" href="../../binaryninja.functionrecognizer.FunctionRecognizer.html#binaryninja.functionrecognizer.FunctionRecognizer">[docs]</a><span class="k">class</span> <span class="nc">FunctionRecognizer</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="n">_instance</span> <span class="o">=</span> <span class="kc">None</span>
<div class="viewcode-block" id="FunctionRecognizer.__init__"><a class="viewcode-back" href="../../binaryninja.functionrecognizer.FunctionRecognizer.html#binaryninja.functionrecognizer.FunctionRecognizer.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNFunctionRecognizer</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">context</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">recognizeLowLevelIL</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">recognizeLowLevelIL</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_recognize_low_level_il</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">recognizeMediumLevelIL</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">recognizeMediumLevelIL</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_recognize_medium_level_il</span><span class="p">)</span></div>
<div class="viewcode-block" id="FunctionRecognizer.register_global"><a class="viewcode-back" href="../../binaryninja.functionrecognizer-module.html#binaryninja.functionrecognizer.FunctionRecognizer.register_global">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">register_global</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_instance</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">_instance</span> <span class="o">=</span> <span class="bp">cls</span><span class="p">()</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterGlobalFunctionRecognizer</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">_instance</span><span class="o">.</span><span class="n">_cb</span><span class="p">)</span></div>
<div class="viewcode-block" id="FunctionRecognizer.register_arch"><a class="viewcode-back" href="../../binaryninja.functionrecognizer-module.html#binaryninja.functionrecognizer.FunctionRecognizer.register_arch">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">register_arch</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">arch</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_instance</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">_instance</span> <span class="o">=</span> <span class="bp">cls</span><span class="p">()</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterArchitectureFunctionRecognizer</span><span class="p">(</span><span class="n">arch</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_instance</span><span class="o">.</span><span class="n">_cb</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">_recognize_low_level_il</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">il</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">file_metadata</span> <span class="o">=</span> <span class="n">filemetadata</span><span class="o">.</span><span class="n">FileMetadata</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFileForView</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="n">file_metadata</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
<span class="n">func</span> <span class="o">=</span> <span class="n">function</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewFunctionReference</span><span class="p">(</span><span class="n">func</span><span class="p">))</span>
<span class="n">il</span> <span class="o">=</span> <span class="n">lowlevelil</span><span class="o">.</span><span class="n">LowLevelILFunction</span><span class="p">(</span><span class="n">func</span><span class="o">.</span><span class="n">arch</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewLowLevelILFunctionReference</span><span class="p">(</span><span class="n">il</span><span class="p">))</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">recognize_low_level_il</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">il</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<div class="viewcode-block" id="FunctionRecognizer.recognize_low_level_il"><a class="viewcode-back" href="../../binaryninja.functionrecognizer-module.html#binaryninja.functionrecognizer.FunctionRecognizer.recognize_low_level_il">[docs]</a> <span class="k">def</span> <span class="nf">recognize_low_level_il</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">il</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span></div>
<span class="k">def</span> <span class="nf">_recognize_medium_level_il</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">il</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">file_metadata</span> <span class="o">=</span> <span class="n">filemetadata</span><span class="o">.</span><span class="n">FileMetadata</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFileForView</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="n">file_metadata</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
<span class="n">func</span> <span class="o">=</span> <span class="n">function</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewFunctionReference</span><span class="p">(</span><span class="n">func</span><span class="p">))</span>
<span class="n">il</span> <span class="o">=</span> <span class="n">mediumlevelil</span><span class="o">.</span><span class="n">MediumLevelILFunction</span><span class="p">(</span><span class="n">func</span><span class="o">.</span><span class="n">arch</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewMediumLevelILFunctionReference</span><span class="p">(</span><span class="n">il</span><span class="p">))</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">recognize_medium_level_il</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">il</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<div class="viewcode-block" id="FunctionRecognizer.recognize_medium_level_il"><a class="viewcode-back" href="../../binaryninja.functionrecognizer-module.html#binaryninja.functionrecognizer.FunctionRecognizer.recognize_medium_level_il">[docs]</a> <span class="k">def</span> <span class="nf">recognize_medium_level_il</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">il</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span></div></div>
</pre></div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,368 @@
<!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>binaryninja.highlight &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.highlight</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.highlight</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="c1"># Binary Ninja components</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<span class="kn">from</span> <span class="nn">binaryninja.enums</span> <span class="k">import</span> <span class="n">HighlightColorStyle</span><span class="p">,</span> <span class="n">HighlightStandardColor</span>
<div class="viewcode-block" id="HighlightColor"><a class="viewcode-back" href="../../binaryninja.highlight.HighlightColor.html#binaryninja.highlight.HighlightColor">[docs]</a><span class="k">class</span> <span class="nc">HighlightColor</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="HighlightColor.__init__"><a class="viewcode-back" href="../../binaryninja.highlight.HighlightColor.html#binaryninja.highlight.HighlightColor.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">color</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">mix_color</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">mix</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">red</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">green</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">blue</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">alpha</span> <span class="o">=</span> <span class="mi">255</span><span class="p">):</span>
<span class="k">if</span> <span class="p">(</span><span class="n">red</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">green</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">blue</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">style</span> <span class="o">=</span> <span class="n">HighlightColorStyle</span><span class="o">.</span><span class="n">CustomHighlightColor</span>
<span class="bp">self</span><span class="o">.</span><span class="n">red</span> <span class="o">=</span> <span class="n">red</span>
<span class="bp">self</span><span class="o">.</span><span class="n">green</span> <span class="o">=</span> <span class="n">green</span>
<span class="bp">self</span><span class="o">.</span><span class="n">blue</span> <span class="o">=</span> <span class="n">blue</span>
<span class="k">elif</span> <span class="p">(</span><span class="n">mix_color</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">mix</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">style</span> <span class="o">=</span> <span class="n">HighlightColorStyle</span><span class="o">.</span><span class="n">MixedHighlightColor</span>
<span class="k">if</span> <span class="n">color</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">color</span> <span class="o">=</span> <span class="n">HighlightStandardColor</span><span class="o">.</span><span class="n">NoHighlightColor</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">color</span> <span class="o">=</span> <span class="n">color</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mix_color</span> <span class="o">=</span> <span class="n">mix_color</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mix</span> <span class="o">=</span> <span class="n">mix</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">style</span> <span class="o">=</span> <span class="n">HighlightColorStyle</span><span class="o">.</span><span class="n">StandardHighlightColor</span>
<span class="k">if</span> <span class="n">color</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">color</span> <span class="o">=</span> <span class="n">HighlightStandardColor</span><span class="o">.</span><span class="n">NoHighlightColor</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">color</span> <span class="o">=</span> <span class="n">color</span>
<span class="bp">self</span><span class="o">.</span><span class="n">alpha</span> <span class="o">=</span> <span class="n">alpha</span></div>
<span class="k">def</span> <span class="nf">_standard_color_to_str</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">color</span><span class="p">):</span>
<span class="k">if</span> <span class="n">color</span> <span class="o">==</span> <span class="n">HighlightStandardColor</span><span class="o">.</span><span class="n">NoHighlightColor</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;none&quot;</span>
<span class="k">if</span> <span class="n">color</span> <span class="o">==</span> <span class="n">HighlightStandardColor</span><span class="o">.</span><span class="n">BlueHighlightColor</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;blue&quot;</span>
<span class="k">if</span> <span class="n">color</span> <span class="o">==</span> <span class="n">HighlightStandardColor</span><span class="o">.</span><span class="n">GreenHighlightColor</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;green&quot;</span>
<span class="k">if</span> <span class="n">color</span> <span class="o">==</span> <span class="n">HighlightStandardColor</span><span class="o">.</span><span class="n">CyanHighlightColor</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;cyan&quot;</span>
<span class="k">if</span> <span class="n">color</span> <span class="o">==</span> <span class="n">HighlightStandardColor</span><span class="o">.</span><span class="n">RedHighlightColor</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;red&quot;</span>
<span class="k">if</span> <span class="n">color</span> <span class="o">==</span> <span class="n">HighlightStandardColor</span><span class="o">.</span><span class="n">MagentaHighlightColor</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;magenta&quot;</span>
<span class="k">if</span> <span class="n">color</span> <span class="o">==</span> <span class="n">HighlightStandardColor</span><span class="o">.</span><span class="n">YellowHighlightColor</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;yellow&quot;</span>
<span class="k">if</span> <span class="n">color</span> <span class="o">==</span> <span class="n">HighlightStandardColor</span><span class="o">.</span><span class="n">OrangeHighlightColor</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;orange&quot;</span>
<span class="k">if</span> <span class="n">color</span> <span class="o">==</span> <span class="n">HighlightStandardColor</span><span class="o">.</span><span class="n">WhiteHighlightColor</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;white&quot;</span>
<span class="k">if</span> <span class="n">color</span> <span class="o">==</span> <span class="n">HighlightStandardColor</span><span class="o">.</span><span class="n">BlackHighlightColor</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;black&quot;</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">color</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">style</span> <span class="o">==</span> <span class="n">HighlightColorStyle</span><span class="o">.</span><span class="n">StandardHighlightColor</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">alpha</span> <span class="o">==</span> <span class="mi">255</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;&lt;color: </span><span class="si">%s</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">_standard_color_to_str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">color</span><span class="p">)</span>
<span class="k">return</span> <span class="s2">&quot;&lt;color: </span><span class="si">%s</span><span class="s2">, alpha </span><span class="si">%d</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_standard_color_to_str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">color</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">alpha</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">style</span> <span class="o">==</span> <span class="n">HighlightColorStyle</span><span class="o">.</span><span class="n">MixedHighlightColor</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">alpha</span> <span class="o">==</span> <span class="mi">255</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;&lt;color: mix </span><span class="si">%s</span><span class="s2"> to </span><span class="si">%s</span><span class="s2"> factor </span><span class="si">%d</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_standard_color_to_str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">color</span><span class="p">),</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_standard_color_to_str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mix_color</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">mix</span><span class="p">)</span>
<span class="k">return</span> <span class="s2">&quot;&lt;color: mix </span><span class="si">%s</span><span class="s2"> to </span><span class="si">%s</span><span class="s2"> factor </span><span class="si">%d</span><span class="s2">, alpha </span><span class="si">%d</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_standard_color_to_str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">color</span><span class="p">),</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_standard_color_to_str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mix_color</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">mix</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">alpha</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">style</span> <span class="o">==</span> <span class="n">HighlightColorStyle</span><span class="o">.</span><span class="n">CustomHighlightColor</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">alpha</span> <span class="o">==</span> <span class="mi">255</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;&lt;color: #</span><span class="si">%.2x%.2x%.2x</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">red</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">green</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">blue</span><span class="p">)</span>
<span class="k">return</span> <span class="s2">&quot;&lt;color: #</span><span class="si">%.2x%.2x%.2x</span><span class="s2">, alpha </span><span class="si">%d</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">red</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">green</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">blue</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">alpha</span><span class="p">)</span>
<span class="k">return</span> <span class="s2">&quot;&lt;color&gt;&quot;</span>
<span class="k">def</span> <span class="nf">_get_core_struct</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNHighlightColor</span><span class="p">()</span>
<span class="n">result</span><span class="o">.</span><span class="n">style</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">style</span>
<span class="n">result</span><span class="o">.</span><span class="n">color</span> <span class="o">=</span> <span class="n">HighlightStandardColor</span><span class="o">.</span><span class="n">NoHighlightColor</span>
<span class="n">result</span><span class="o">.</span><span class="n">mix_color</span> <span class="o">=</span> <span class="n">HighlightStandardColor</span><span class="o">.</span><span class="n">NoHighlightColor</span>
<span class="n">result</span><span class="o">.</span><span class="n">mix</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">result</span><span class="o">.</span><span class="n">r</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">result</span><span class="o">.</span><span class="n">g</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">result</span><span class="o">.</span><span class="n">b</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">result</span><span class="o">.</span><span class="n">alpha</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">alpha</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">style</span> <span class="o">==</span> <span class="n">HighlightColorStyle</span><span class="o">.</span><span class="n">StandardHighlightColor</span><span class="p">:</span>
<span class="n">result</span><span class="o">.</span><span class="n">color</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">color</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">style</span> <span class="o">==</span> <span class="n">HighlightColorStyle</span><span class="o">.</span><span class="n">MixedHighlightColor</span><span class="p">:</span>
<span class="n">result</span><span class="o">.</span><span class="n">color</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">color</span>
<span class="n">result</span><span class="o">.</span><span class="n">mixColor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mix_color</span>
<span class="n">result</span><span class="o">.</span><span class="n">mix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mix</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">style</span> <span class="o">==</span> <span class="n">HighlightColorStyle</span><span class="o">.</span><span class="n">CustomHighlightColor</span><span class="p">:</span>
<span class="n">result</span><span class="o">.</span><span class="n">r</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">red</span>
<span class="n">result</span><span class="o">.</span><span class="n">g</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">green</span>
<span class="n">result</span><span class="o">.</span><span class="n">b</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">blue</span>
<span class="k">return</span> <span class="n">result</span>
<span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">_from_core_struct</span><span class="p">(</span><span class="n">color</span><span class="p">):</span>
<span class="k">if</span> <span class="n">color</span><span class="o">.</span><span class="n">style</span> <span class="o">==</span> <span class="n">HighlightColorStyle</span><span class="o">.</span><span class="n">StandardHighlightColor</span><span class="p">:</span>
<span class="k">return</span> <span class="n">HighlightColor</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="o">.</span><span class="n">color</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="n">color</span><span class="o">.</span><span class="n">alpha</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">color</span><span class="o">.</span><span class="n">style</span> <span class="o">==</span> <span class="n">HighlightColorStyle</span><span class="o">.</span><span class="n">MixedHighlightColor</span><span class="p">:</span>
<span class="k">return</span> <span class="n">HighlightColor</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="o">.</span><span class="n">color</span><span class="p">,</span> <span class="n">mix_color</span><span class="o">=</span><span class="n">color</span><span class="o">.</span><span class="n">mixColor</span><span class="p">,</span> <span class="n">mix</span><span class="o">=</span><span class="n">color</span><span class="o">.</span><span class="n">mix</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="n">color</span><span class="o">.</span><span class="n">alpha</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">color</span><span class="o">.</span><span class="n">style</span> <span class="o">==</span> <span class="n">HighlightColorStyle</span><span class="o">.</span><span class="n">CustomHighlightColor</span><span class="p">:</span>
<span class="k">return</span> <span class="n">HighlightColor</span><span class="p">(</span><span class="n">red</span><span class="o">=</span><span class="n">color</span><span class="o">.</span><span class="n">r</span><span class="p">,</span> <span class="n">green</span><span class="o">=</span><span class="n">color</span><span class="o">.</span><span class="n">g</span><span class="p">,</span> <span class="n">blue</span><span class="o">=</span><span class="n">color</span><span class="o">.</span><span class="n">b</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="n">color</span><span class="o">.</span><span class="n">alpha</span><span class="p">)</span>
<span class="k">return</span> <span class="n">HighlightColor</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="n">HighlightStandardColor</span><span class="o">.</span><span class="n">NoHighlightColor</span><span class="p">)</span></div>
</pre></div>
</div>
</div>
<footer>
<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>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,293 @@
<!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>binaryninja.lineardisassembly &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.lineardisassembly</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.lineardisassembly</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<div class="viewcode-block" id="LinearDisassemblyPosition"><a class="viewcode-back" href="../../binaryninja.lineardisassembly.LinearDisassemblyPosition.html#binaryninja.lineardisassembly.LinearDisassemblyPosition">[docs]</a><span class="k">class</span> <span class="nc">LinearDisassemblyPosition</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``class LinearDisassemblyPosition`` is a helper object containing the position of the current Linear Disassembly.</span>
<span class="sd"> .. note:: This object should not be instantiated directly. Rather call \</span>
<span class="sd"> :py:meth:`get_linear_disassembly_position_at` which instantiates this object.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="LinearDisassemblyPosition.__init__"><a class="viewcode-back" href="../../binaryninja.lineardisassembly.LinearDisassemblyPosition.html#binaryninja.lineardisassembly.LinearDisassemblyPosition.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="n">addr</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">function</span> <span class="o">=</span> <span class="n">func</span>
<span class="bp">self</span><span class="o">.</span><span class="n">block</span> <span class="o">=</span> <span class="n">block</span>
<span class="bp">self</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">addr</span></div></div>
<div class="viewcode-block" id="LinearDisassemblyLine"><a class="viewcode-back" href="../../binaryninja.lineardisassembly.LinearDisassemblyLine.html#binaryninja.lineardisassembly.LinearDisassemblyLine">[docs]</a><span class="k">class</span> <span class="nc">LinearDisassemblyLine</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="LinearDisassemblyLine.__init__"><a class="viewcode-back" href="../../binaryninja.lineardisassembly.LinearDisassemblyLine.html#binaryninja.lineardisassembly.LinearDisassemblyLine.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">line_type</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="n">line_offset</span><span class="p">,</span> <span class="n">contents</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">line_type</span>
<span class="bp">self</span><span class="o">.</span><span class="n">function</span> <span class="o">=</span> <span class="n">func</span>
<span class="bp">self</span><span class="o">.</span><span class="n">block</span> <span class="o">=</span> <span class="n">block</span>
<span class="bp">self</span><span class="o">.</span><span class="n">line_offset</span> <span class="o">=</span> <span class="n">line_offset</span>
<span class="bp">self</span><span class="o">.</span><span class="n">contents</span> <span class="o">=</span> <span class="n">contents</span></div>
<span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span></div>
</pre></div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,430 @@
<!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>binaryninja.log &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.log</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.log</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="c1"># Binary Ninja components</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<span class="kn">from</span> <span class="nn">binaryninja.enums</span> <span class="k">import</span> <span class="n">LogLevel</span>
<span class="n">_output_to_log</span> <span class="o">=</span> <span class="kc">False</span>
<div class="viewcode-block" id="redirect_output_to_log"><a class="viewcode-back" href="../../binaryninja.log.redirect_output_to_log.html#binaryninja.datarender.redirect_output_to_log">[docs]</a><span class="k">def</span> <span class="nf">redirect_output_to_log</span><span class="p">():</span>
<span class="k">global</span> <span class="n">_output_to_log</span>
<span class="n">_output_to_log</span> <span class="o">=</span> <span class="kc">True</span></div>
<div class="viewcode-block" id="is_output_redirected_to_log"><a class="viewcode-back" href="../../binaryninja.log.is_output_redirected_to_log.html#binaryninja.datarender.is_output_redirected_to_log">[docs]</a><span class="k">def</span> <span class="nf">is_output_redirected_to_log</span><span class="p">():</span>
<span class="k">global</span> <span class="n">_output_to_log</span>
<span class="k">return</span> <span class="n">_output_to_log</span></div>
<div class="viewcode-block" id="log"><a class="viewcode-back" href="../../binaryninja.log.log.html#binaryninja.datarender.log">[docs]</a><span class="k">def</span> <span class="nf">log</span><span class="p">(</span><span class="n">level</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``log`` writes messages to the log console for the given log level.</span>
<span class="sd"> ============ ======== =======================================================================</span>
<span class="sd"> LogLevelName LogLevel Description</span>
<span class="sd"> ============ ======== =======================================================================</span>
<span class="sd"> DebugLog 0 Logs debuging information messages to the console.</span>
<span class="sd"> InfoLog 1 Logs general information messages to the console.</span>
<span class="sd"> WarningLog 2 Logs message to console with **Warning** icon.</span>
<span class="sd"> ErrorLog 3 Logs message to console with **Error** icon, focusing the error console.</span>
<span class="sd"> AlertLog 4 Logs message to pop up window.</span>
<span class="sd"> ============ ======== =======================================================================</span>
<span class="sd"> :param LogLevel level: Log level to use</span>
<span class="sd"> :param str text: message to print</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNLog</span><span class="p">(</span><span class="n">level</span><span class="p">,</span> <span class="s1">&#39;</span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
<div class="viewcode-block" id="log_debug"><a class="viewcode-back" href="../../binaryninja.log.log_debug.html#binaryninja.datarender.log_debug">[docs]</a><span class="k">def</span> <span class="nf">log_debug</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``log_debug`` Logs debugging information messages to the console.</span>
<span class="sd"> :param str text: message to print</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; log_to_stdout(LogLevel.DebugLog)</span>
<span class="sd"> &gt;&gt;&gt; log_debug(&quot;Hotdogs!&quot;)</span>
<span class="sd"> Hotdogs!</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNLogDebug</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
<div class="viewcode-block" id="log_info"><a class="viewcode-back" href="../../binaryninja.log.log_info.html#binaryninja.datarender.log_info">[docs]</a><span class="k">def</span> <span class="nf">log_info</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``log_info`` Logs general information messages to the console.</span>
<span class="sd"> :param str text: message to print</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; log_info(&quot;Saucisson!&quot;)</span>
<span class="sd"> Saucisson!</span>
<span class="sd"> &gt;&gt;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNLogInfo</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
<div class="viewcode-block" id="log_warn"><a class="viewcode-back" href="../../binaryninja.log.log_warn.html#binaryninja.datarender.log_warn">[docs]</a><span class="k">def</span> <span class="nf">log_warn</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``log_warn`` Logs message to console, if run through the GUI it logs with **Warning** icon.</span>
<span class="sd"> :param str text: message to print</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; log_to_stdout(LogLevel.DebugLog)</span>
<span class="sd"> &gt;&gt;&gt; log_info(&quot;Chilidogs!&quot;)</span>
<span class="sd"> Chilidogs!</span>
<span class="sd"> &gt;&gt;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNLogWarn</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
<div class="viewcode-block" id="log_error"><a class="viewcode-back" href="../../binaryninja.log.log_error.html#binaryninja.datarender.log_error">[docs]</a><span class="k">def</span> <span class="nf">log_error</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``log_error`` Logs message to console, if run through the GUI it logs with **Error** icon, focusing the error console.</span>
<span class="sd"> :param str text: message to print</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; log_to_stdout(LogLevel.DebugLog)</span>
<span class="sd"> &gt;&gt;&gt; log_error(&quot;Spanferkel!&quot;)</span>
<span class="sd"> Spanferkel!</span>
<span class="sd"> &gt;&gt;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNLogError</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
<div class="viewcode-block" id="log_alert"><a class="viewcode-back" href="../../binaryninja.log.log_alert.html#binaryninja.datarender.log_alert">[docs]</a><span class="k">def</span> <span class="nf">log_alert</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``log_alert`` Logs message console and to a pop up window if run through the GUI.</span>
<span class="sd"> :param str text: message to print</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; log_to_stdout(LogLevel.DebugLog)</span>
<span class="sd"> &gt;&gt;&gt; log_alert(&quot;Kielbasa!&quot;)</span>
<span class="sd"> Kielbasa!</span>
<span class="sd"> &gt;&gt;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNLogAlert</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
<div class="viewcode-block" id="log_to_stdout"><a class="viewcode-back" href="../../binaryninja.log.log_to_stdout.html#binaryninja.datarender.log_to_stdout">[docs]</a><span class="k">def</span> <span class="nf">log_to_stdout</span><span class="p">(</span><span class="n">min_level</span><span class="o">=</span><span class="n">LogLevel</span><span class="o">.</span><span class="n">InfoLog</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``log_to_stdout`` redirects minimum log level to standard out.</span>
<span class="sd"> :param int min_level: minimum level to log to</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; log_debug(&quot;Hotdogs!&quot;)</span>
<span class="sd"> &gt;&gt;&gt; log_to_stdout(LogLevel.DebugLog)</span>
<span class="sd"> &gt;&gt;&gt; log_debug(&quot;Hotdogs!&quot;)</span>
<span class="sd"> Hotdogs!</span>
<span class="sd"> &gt;&gt;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNLogToStdout</span><span class="p">(</span><span class="n">min_level</span><span class="p">)</span></div>
<div class="viewcode-block" id="log_to_stderr"><a class="viewcode-back" href="../../binaryninja.log.log_to_stderr.html#binaryninja.datarender.log_to_stderr">[docs]</a><span class="k">def</span> <span class="nf">log_to_stderr</span><span class="p">(</span><span class="n">min_level</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``log_to_stderr`` redirects minimum log level to standard error.</span>
<span class="sd"> :param int min_level: minimum level to log to</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNLogToStderr</span><span class="p">(</span><span class="n">min_level</span><span class="p">)</span></div>
<div class="viewcode-block" id="log_to_file"><a class="viewcode-back" href="../../binaryninja.log.log_to_file.html#binaryninja.datarender.log_to_file">[docs]</a><span class="k">def</span> <span class="nf">log_to_file</span><span class="p">(</span><span class="n">min_level</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">append</span> <span class="o">=</span> <span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``log_to_file`` redirects minimum log level to a file named ``path``, optionally appending rather than overwriting.</span>
<span class="sd"> :param int min_level: minimum level to log to</span>
<span class="sd"> :param str path: path to log to</span>
<span class="sd"> :param bool append: optional flag for specifying appending. True = append, False = overwrite.</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNLogToFile</span><span class="p">(</span><span class="n">min_level</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">path</span><span class="p">),</span> <span class="n">append</span><span class="p">)</span></div>
<div class="viewcode-block" id="close_logs"><a class="viewcode-back" href="../../binaryninja.log.close_logs.html#binaryninja.datarender.close_logs">[docs]</a><span class="k">def</span> <span class="nf">close_logs</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``close_logs`` close all log files.</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNCloseLogs</span><span class="p">()</span></div>
</pre></div>
</div>
</div>
<footer>
<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>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,306 @@
<!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>binaryninja.mainthread &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.mainthread</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.mainthread</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="c1"># Binary Ninja components</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">scriptingprovider</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">plugin</span>
<div class="viewcode-block" id="execute_on_main_thread"><a class="viewcode-back" href="../../binaryninja.mainthread.execute_on_main_thread.html#binaryninja.mainthread.execute_on_main_thread">[docs]</a><span class="k">def</span> <span class="nf">execute_on_main_thread</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
<span class="n">action</span> <span class="o">=</span> <span class="n">scriptingprovider</span><span class="o">.</span><span class="n">_ThreadActionContext</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNExecuteOnMainThread</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">action</span><span class="o">.</span><span class="n">callback</span><span class="p">)</span>
<span class="k">if</span> <span class="n">obj</span><span class="p">:</span>
<span class="k">return</span> <span class="n">plugin</span><span class="o">.</span><span class="n">MainThreadAction</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">None</span></div>
<div class="viewcode-block" id="execute_on_main_thread_and_wait"><a class="viewcode-back" href="../../binaryninja.mainthread.execute_on_main_thread_and_wait.html#binaryninja.mainthread.execute_on_main_thread_and_wait">[docs]</a><span class="k">def</span> <span class="nf">execute_on_main_thread_and_wait</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
<span class="n">action</span> <span class="o">=</span> <span class="n">scriptingprovider</span><span class="o">.</span><span class="n">_ThreadActionContext</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNExecuteOnMainThreadAndWait</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">action</span><span class="o">.</span><span class="n">callback</span><span class="p">)</span></div>
<div class="viewcode-block" id="worker_enqueue"><a class="viewcode-back" href="../../binaryninja.mainthread.worker_enqueue.html#binaryninja.mainthread.worker_enqueue">[docs]</a><span class="k">def</span> <span class="nf">worker_enqueue</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
<span class="n">action</span> <span class="o">=</span> <span class="n">scriptingprovider</span><span class="o">.</span><span class="n">_ThreadActionContext</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNWorkerEnqueue</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">action</span><span class="o">.</span><span class="n">callback</span><span class="p">)</span></div>
<div class="viewcode-block" id="worker_priority_enqueue"><a class="viewcode-back" href="../../binaryninja.mainthread.worker_priority_enqueue.html#binaryninja.mainthread.worker_priority_enqueue">[docs]</a><span class="k">def</span> <span class="nf">worker_priority_enqueue</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
<span class="n">action</span> <span class="o">=</span> <span class="n">scriptingprovider</span><span class="o">.</span><span class="n">_ThreadActionContext</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNWorkerPriorityEnqueue</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">action</span><span class="o">.</span><span class="n">callback</span><span class="p">)</span></div>
<div class="viewcode-block" id="worker_interactive_enqueue"><a class="viewcode-back" href="../../binaryninja.mainthread.worker_interactive_enqueue.html#binaryninja.mainthread.worker_interactive_enqueue">[docs]</a><span class="k">def</span> <span class="nf">worker_interactive_enqueue</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
<span class="n">action</span> <span class="o">=</span> <span class="n">scriptingprovider</span><span class="o">.</span><span class="n">_ThreadActionContext</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNWorkerInteractiveEnqueue</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">action</span><span class="o">.</span><span class="n">callback</span><span class="p">)</span></div>
<div class="viewcode-block" id="get_worker_thread_count"><a class="viewcode-back" href="../../binaryninja.mainthread.get_worker_thread_count.html#binaryninja.mainthread.get_worker_thread_count">[docs]</a><span class="k">def</span> <span class="nf">get_worker_thread_count</span><span class="p">():</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetWorkerThreadCount</span><span class="p">()</span></div>
<div class="viewcode-block" id="set_worker_thread_count"><a class="viewcode-back" href="../../binaryninja.mainthread.set_worker_thread_count.html#binaryninja.mainthread.set_worker_thread_count">[docs]</a><span class="k">def</span> <span class="nf">set_worker_thread_count</span><span class="p">(</span><span class="n">count</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetWorkerThreadCount</span><span class="p">(</span><span class="n">count</span><span class="p">)</span></div>
</pre></div>
</div>
</div>
<footer>
<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>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,528 @@
<!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>binaryninja.metadata &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.metadata</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.metadata</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">numbers</span>
<span class="c1"># Binary Ninja components</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<span class="kn">from</span> <span class="nn">binaryninja.enums</span> <span class="k">import</span> <span class="n">MetadataType</span>
<span class="c1"># 2-3 compatibility</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="nb">range</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">pyNativeStr</span>
<div class="viewcode-block" id="Metadata"><a class="viewcode-back" href="../../binaryninja.metadata.Metadata.html#binaryninja.metadata.Metadata">[docs]</a><span class="k">class</span> <span class="nc">Metadata</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="Metadata.__init__"><a class="viewcode-back" href="../../binaryninja.metadata.Metadata.html#binaryninja.metadata.Metadata.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">signed</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">raw</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">handle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">handle</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">numbers</span><span class="o">.</span><span class="n">Integral</span><span class="p">):</span>
<span class="k">if</span> <span class="n">signed</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreateMetadataSignedIntegerData</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreateMetadataUnsignedIntegerData</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">bool</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreateMetadataBooleanData</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">)):</span>
<span class="k">if</span> <span class="n">raw</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">value</span> <span class="o">=</span> <span class="nb">bytes</span><span class="p">(</span><span class="nb">bytearray</span><span class="p">(</span><span class="nb">ord</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">value</span><span class="p">))</span>
<span class="n">buffer</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_ubyte</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">value</span><span class="p">))</span><span class="o">.</span><span class="n">from_buffer_copy</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreateMetadataRawData</span><span class="p">(</span><span class="n">buffer</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreateMetadataStringData</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">float</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreateMetadataDoubleData</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreateMetadataOfType</span><span class="p">(</span><span class="n">MetadataType</span><span class="o">.</span><span class="n">ArrayDataType</span><span class="p">)</span>
<span class="k">for</span> <span class="n">elm</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span>
<span class="n">md</span> <span class="o">=</span> <span class="n">Metadata</span><span class="p">(</span><span class="n">elm</span><span class="p">,</span> <span class="n">signed</span><span class="p">,</span> <span class="n">raw</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNMetadataArrayAppend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">md</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreateMetadataOfType</span><span class="p">(</span><span class="n">MetadataType</span><span class="o">.</span><span class="n">KeyValueDataType</span><span class="p">)</span>
<span class="k">for</span> <span class="n">elm</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span>
<span class="n">md</span> <span class="o">=</span> <span class="n">Metadata</span><span class="p">(</span><span class="n">value</span><span class="p">[</span><span class="n">elm</span><span class="p">],</span> <span class="n">signed</span><span class="p">,</span> <span class="n">raw</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNMetadataSetValueForKey</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">elm</span><span class="p">),</span> <span class="n">md</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{}</span><span class="s2"> doesn&#39;t contain type of: int, bool, str, float, list, dict&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">))</span></div>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_integer</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_raw</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">bytes</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_float</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">float</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_boolean</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_array</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_dict</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_dict</span><span class="p">()</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">()</span>
<div class="viewcode-block" id="Metadata.get_dict"><a class="viewcode-back" href="../../binaryninja.metadata-module.html#binaryninja.metadata.Metadata.get_dict">[docs]</a> <span class="k">def</span> <span class="nf">get_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_dict</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">()</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">:</span>
<span class="n">result</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
<span class="k">return</span> <span class="n">result</span></div>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">MetadataType</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNMetadataGetType</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">))</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">is_integer</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_signed_integer</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_unsigned_integer</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">is_signed_integer</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNMetadataIsSignedInteger</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">is_unsigned_integer</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNMetadataIsUnsignedInteger</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">is_float</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNMetadataIsDouble</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">is_boolean</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNMetadataIsBoolean</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">is_string</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNMetadataIsString</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">is_raw</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNMetadataIsRaw</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">is_array</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNMetadataIsArray</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">is_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNMetadataIsKeyValueStore</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<div class="viewcode-block" id="Metadata.remove"><a class="viewcode-back" href="../../binaryninja.metadata-module.html#binaryninja.metadata.Metadata.remove">[docs]</a> <span class="k">def</span> <span class="nf">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key_or_index</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">key_or_index</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_dict</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNMetadataRemoveKey</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">key_or_index</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">key_or_index</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_array</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNMetadataRemoveIndex</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">key_or_index</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;remove only valid for dict and array objects&quot;</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_array</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_dict</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_string</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_raw</span><span class="p">:</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNMetadataSize</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">&quot;Metadata object doesn&#39;t support len()&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_array</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNMetadataSize</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)):</span>
<span class="k">yield</span> <span class="n">Metadata</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">core</span><span class="o">.</span><span class="n">BNMetadataGetForIndex</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">i</span><span class="p">))</span><span class="o">.</span><span class="n">value</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_dict</span><span class="p">:</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNMetadataGetValueStore</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">contents</span><span class="o">.</span><span class="n">size</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">contents</span><span class="o">.</span><span class="n">keys</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="nb">bytes</span><span class="p">):</span>
<span class="k">yield</span> <span class="nb">str</span><span class="p">(</span><span class="n">pyNativeStr</span><span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">contents</span><span class="o">.</span><span class="n">keys</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">yield</span> <span class="n">result</span><span class="o">.</span><span class="n">contents</span><span class="o">.</span><span class="n">keys</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeMetadataValueStore</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">&quot;Metadata object doesn&#39;t support iteration&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_array</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Metadata object only supports integers for indexing&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">value</span> <span class="o">&gt;=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">IndexError</span><span class="p">(</span><span class="s2">&quot;Index value out of range&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">Metadata</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">core</span><span class="o">.</span><span class="n">BNMetadataGetForIndex</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">value</span><span class="p">))</span><span class="o">.</span><span class="n">value</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_dict</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Metadata object only supports strings for indexing&quot;</span><span class="p">)</span>
<span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNMetadataGetForKey</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="k">if</span> <span class="n">handle</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">Metadata</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">handle</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Metadata object doesn&#39;t support indexing&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNMetadataGetString</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">))</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_raw</span><span class="p">:</span>
<span class="n">length</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">length</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">native_list</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNMetadataGetRaw</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">length</span><span class="p">))</span>
<span class="n">out_list</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">length</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">out_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">native_list</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeMetadataRaw</span><span class="p">(</span><span class="n">native_list</span><span class="p">)</span>
<span class="k">return</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">out_list</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Metadata object not a string or raw type&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__bytes__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">bytes</span><span class="p">(</span><span class="nb">bytearray</span><span class="p">(</span><span class="nb">ord</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="fm">__str__</span><span class="p">()))</span>
<span class="k">def</span> <span class="nf">__int__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_signed_integer</span><span class="p">:</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNMetadataGetSignedInteger</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_unsigned_integer</span><span class="p">:</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNMetadataGetUnsignedInteger</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Metadata object not of integer type&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__float__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_float</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Metadata object is not float type&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNMetadataGetDouble</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__nonzero__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_boolean</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Metadata object is not boolean type&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNMetadataGetBoolean</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_integer</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">other</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">is_string</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_raw</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">other</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="nb">float</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_float</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">float</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">other</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="nb">bool</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_boolean</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">other</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_array</span> <span class="ow">and</span> <span class="p">((</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Metadata</span><span class="p">)</span> <span class="ow">and</span> <span class="n">other</span><span class="o">.</span><span class="n">is_array</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="nb">list</span><span class="p">)):</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">other</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">for</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="k">if</span> <span class="n">a</span> <span class="o">!=</span> <span class="n">b</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_dict</span> <span class="ow">and</span> <span class="p">((</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Metadata</span><span class="p">)</span> <span class="ow">and</span> <span class="n">other</span><span class="o">.</span><span class="n">is_dict</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="nb">dict</span><span class="p">)):</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">other</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">for</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="k">if</span> <span class="n">a</span> <span class="o">!=</span> <span class="n">b</span> <span class="ow">or</span> <span class="bp">self</span><span class="p">[</span><span class="n">a</span><span class="p">]</span> <span class="o">!=</span> <span class="n">other</span><span class="p">[</span><span class="n">b</span><span class="p">]:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Metadata</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_integer</span> <span class="ow">and</span> <span class="n">other</span><span class="o">.</span><span class="n">is_integer</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="nb">int</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Metadata</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">is_string</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_raw</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">other</span><span class="o">.</span><span class="n">is_string</span> <span class="ow">or</span> <span class="n">other</span><span class="o">.</span><span class="n">is_raw</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="nb">str</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Metadata</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_float</span> <span class="ow">and</span> <span class="n">other</span><span class="o">.</span><span class="n">is_float</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">float</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="nb">float</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Metadata</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_boolean</span> <span class="ow">and</span> <span class="n">other</span><span class="o">.</span><span class="n">is_boolean</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="nb">bool</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">__ne__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_integer</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">!=</span> <span class="n">other</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">is_string</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_raw</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">!=</span> <span class="n">other</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="nb">float</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_float</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">float</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">!=</span> <span class="n">other</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="nb">bool</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">!=</span> <span class="n">other</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_array</span> <span class="ow">and</span> <span class="p">((</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Metadata</span><span class="p">)</span> <span class="ow">and</span> <span class="n">other</span><span class="o">.</span><span class="n">is_array</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="nb">list</span><span class="p">)):</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">other</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="n">areEqual</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">for</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="k">if</span> <span class="n">a</span> <span class="o">!=</span> <span class="n">b</span><span class="p">:</span>
<span class="n">areEqual</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">return</span> <span class="ow">not</span> <span class="n">areEqual</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_dict</span> <span class="ow">and</span> <span class="p">((</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Metadata</span><span class="p">)</span> <span class="ow">and</span> <span class="n">other</span><span class="o">.</span><span class="n">is_dict</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="nb">dict</span><span class="p">)):</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">other</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">for</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="k">if</span> <span class="n">a</span> <span class="o">!=</span> <span class="n">b</span> <span class="ow">or</span> <span class="bp">self</span><span class="p">[</span><span class="n">a</span><span class="p">]</span> <span class="o">!=</span> <span class="n">other</span><span class="p">[</span><span class="n">b</span><span class="p">]:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Metadata</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_integer</span> <span class="ow">and</span> <span class="n">other</span><span class="o">.</span><span class="n">is_integer</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">int</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Metadata</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">is_string</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_raw</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">other</span><span class="o">.</span><span class="n">is_string</span> <span class="ow">or</span> <span class="n">other</span><span class="o">.</span><span class="n">is_raw</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">str</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Metadata</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_float</span> <span class="ow">and</span> <span class="n">other</span><span class="o">.</span><span class="n">is_float</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">float</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">float</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Metadata</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_boolean</span> <span class="ow">and</span> <span class="n">other</span><span class="o">.</span><span class="n">is_boolean</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">bool</span><span class="p">(</span><span class="n">other</span><span class="p">)</span></div>
</pre></div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,712 @@
<!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>binaryninja.platform &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.platform</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.platform</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="c1"># Binary Ninja components</span>
<span class="kn">import</span> <span class="nn">binaryninja</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">types</span>
<span class="c1"># 2-3 compatibility</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="nb">range</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">with_metaclass</span>
<span class="k">class</span> <span class="nc">_PlatformMetaClass</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">platforms</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformList</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Platform</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewPlatformReference</span><span class="p">(</span><span class="n">platforms</span><span class="p">[</span><span class="n">i</span><span class="p">])))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreePlatformList</span><span class="p">(</span><span class="n">platforms</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">os_list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">platforms</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformOSList</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">platforms</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreePlatformOSList</span><span class="p">(</span><span class="n">platforms</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">platforms</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformList</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="k">yield</span> <span class="n">Platform</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewPlatformReference</span><span class="p">(</span><span class="n">platforms</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreePlatformList</span><span class="p">(</span><span class="n">platforms</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="nb">type</span><span class="o">.</span><span class="fm">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="s2">&quot;attribute &#39;</span><span class="si">%s</span><span class="s2">&#39; is read only&quot;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">platform</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformByName</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
<span class="k">if</span> <span class="n">platform</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="s2">&quot;&#39;</span><span class="si">%s</span><span class="s2">&#39; is not a valid platform&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
<span class="k">return</span> <span class="n">Platform</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">platform</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">get_list</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">os</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">arch</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="k">if</span> <span class="n">os</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">platforms</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformList</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">arch</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">platforms</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformListByOS</span><span class="p">(</span><span class="n">os</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">platforms</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformListByArchitecture</span><span class="p">(</span><span class="n">os</span><span class="p">,</span> <span class="n">arch</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Platform</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewPlatformReference</span><span class="p">(</span><span class="n">platforms</span><span class="p">[</span><span class="n">i</span><span class="p">])))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreePlatformList</span><span class="p">(</span><span class="n">platforms</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<div class="viewcode-block" id="Platform"><a class="viewcode-back" href="../../binaryninja.platform.Platform.html#binaryninja.platform.Platform">[docs]</a><span class="k">class</span> <span class="nc">Platform</span><span class="p">(</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">_PlatformMetaClass</span><span class="p">,</span> <span class="nb">object</span><span class="p">)):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``class Platform`` contains all information related to the execution environment of the binary, mainly the</span>
<span class="sd"> calling conventions used.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="kc">None</span>
<div class="viewcode-block" id="Platform.__init__"><a class="viewcode-back" href="../../binaryninja.platform.Platform.html#binaryninja.platform.Platform.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arch</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">handle</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="n">arch</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;platform must have an associated architecture&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">arch</span> <span class="o">=</span> <span class="n">arch</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreatePlatform</span><span class="p">(</span><span class="n">arch</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">handle</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformName</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">arch</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">architecture</span><span class="o">.</span><span class="n">CoreArchitecture</span><span class="o">.</span><span class="n">_from_cache</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformArchitecture</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">))</span></div>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreePlatform</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">Platform</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span> <span class="o">==</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__ne__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">Platform</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span> <span class="o">!=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Allow tab completion to discover metaclass list property&quot;&quot;&quot;</span>
<span class="k">pass</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">default_calling_convention</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Default calling convention.</span>
<span class="sd"> :getter: returns a CallingConvention object for the default calling convention.</span>
<span class="sd"> :setter: sets the default calling convention</span>
<span class="sd"> :type: CallingConvention</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformDefaultCallingConvention</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">callingconvention</span><span class="o">.</span><span class="n">CallingConvention</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
<span class="nd">@default_calling_convention</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">default_calling_convention</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterPlatformDefaultCallingConvention</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">value</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">cdecl_calling_convention</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Cdecl calling convention.</span>
<span class="sd"> :getter: returns a CallingConvention object for the cdecl calling convention.</span>
<span class="sd"> :setter sets the cdecl calling convention</span>
<span class="sd"> :type: CallingConvention</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformCdeclCallingConvention</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">callingconvention</span><span class="o">.</span><span class="n">CallingConvention</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
<span class="nd">@cdecl_calling_convention</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">cdecl_calling_convention</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterPlatformCdeclCallingConvention</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">value</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">stdcall_calling_convention</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Stdcall calling convention.</span>
<span class="sd"> :getter: returns a CallingConvention object for the stdcall calling convention.</span>
<span class="sd"> :setter sets the stdcall calling convention</span>
<span class="sd"> :type: CallingConvention</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformStdcallCallingConvention</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">callingconvention</span><span class="o">.</span><span class="n">CallingConvention</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
<span class="nd">@stdcall_calling_convention</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">stdcall_calling_convention</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterPlatformStdcallCallingConvention</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">value</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">fastcall_calling_convention</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Fastcall calling convention.</span>
<span class="sd"> :getter: returns a CallingConvention object for the fastcall calling convention.</span>
<span class="sd"> :setter sets the fastcall calling convention</span>
<span class="sd"> :type: CallingConvention</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformFastcallCallingConvention</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">callingconvention</span><span class="o">.</span><span class="n">CallingConvention</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
<span class="nd">@fastcall_calling_convention</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">fastcall_calling_convention</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterPlatformFastcallCallingConvention</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">value</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">system_call_convention</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> System call convention.</span>
<span class="sd"> :getter: returns a CallingConvention object for the system call convention.</span>
<span class="sd"> :setter sets the system call convention</span>
<span class="sd"> :type: CallingConvention</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformSystemCallConvention</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">callingconvention</span><span class="o">.</span><span class="n">CallingConvention</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
<span class="nd">@system_call_convention</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">system_call_convention</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetPlatformSystemCallConvention</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">value</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">calling_conventions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> List of platform CallingConvention objects (read-only)</span>
<span class="sd"> :getter: returns the list of supported CallingConvention objects</span>
<span class="sd"> :type: list(CallingConvention)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">cc</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformCallingConventions</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">binaryninja</span><span class="o">.</span><span class="n">callingconvention</span><span class="o">.</span><span class="n">CallingConvention</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewCallingConventionReference</span><span class="p">(</span><span class="n">cc</span><span class="p">[</span><span class="n">i</span><span class="p">])))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeCallingConventionList</span><span class="p">(</span><span class="n">cc</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">types</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;List of platform-specific types (read-only)&quot;&quot;&quot;</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">type_list</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformTypes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">QualifiedName</span><span class="o">.</span><span class="n">_from_core_struct</span><span class="p">(</span><span class="n">type_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="n">result</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">Type</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewTypeReference</span><span class="p">(</span><span class="n">type_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">),</span> <span class="n">platform</span> <span class="o">=</span> <span class="bp">self</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeTypeList</span><span class="p">(</span><span class="n">type_list</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">variables</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;List of platform-specific variable definitions (read-only)&quot;&quot;&quot;</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">type_list</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformVariables</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">QualifiedName</span><span class="o">.</span><span class="n">_from_core_struct</span><span class="p">(</span><span class="n">type_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="n">result</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">Type</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewTypeReference</span><span class="p">(</span><span class="n">type_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">),</span> <span class="n">platform</span> <span class="o">=</span> <span class="bp">self</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeTypeList</span><span class="p">(</span><span class="n">type_list</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">functions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;List of platform-specific function definitions (read-only)&quot;&quot;&quot;</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">type_list</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformFunctions</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">QualifiedName</span><span class="o">.</span><span class="n">_from_core_struct</span><span class="p">(</span><span class="n">type_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="n">result</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">Type</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewTypeReference</span><span class="p">(</span><span class="n">type_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">),</span> <span class="n">platform</span> <span class="o">=</span> <span class="bp">self</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeTypeList</span><span class="p">(</span><span class="n">type_list</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">system_calls</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;List of system calls for this platform (read-only)&quot;&quot;&quot;</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">call_list</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformSystemCalls</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">QualifiedName</span><span class="o">.</span><span class="n">_from_core_struct</span><span class="p">(</span><span class="n">call_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">Type</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewTypeReference</span><span class="p">(</span><span class="n">call_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">),</span> <span class="n">platform</span> <span class="o">=</span> <span class="bp">self</span><span class="p">)</span>
<span class="n">result</span><span class="p">[</span><span class="n">call_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">number</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeSystemCallList</span><span class="p">(</span><span class="n">call_list</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">def</span> <span class="nf">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="nb">object</span><span class="o">.</span><span class="fm">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="s2">&quot;attribute &#39;</span><span class="si">%s</span><span class="s2">&#39; is read only&quot;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;platform: </span><span class="si">%s</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
<span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
<div class="viewcode-block" id="Platform.register"><a class="viewcode-back" href="../../binaryninja.platform-module.html#binaryninja.platform.Platform.register">[docs]</a> <span class="k">def</span> <span class="nf">register</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">os</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``register`` registers the platform for given OS name.</span>
<span class="sd"> :param str os: OS name to register</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterPlatform</span><span class="p">(</span><span class="n">os</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
<div class="viewcode-block" id="Platform.register_calling_convention"><a class="viewcode-back" href="../../binaryninja.platform-module.html#binaryninja.platform.Platform.register_calling_convention">[docs]</a> <span class="k">def</span> <span class="nf">register_calling_convention</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cc</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``register_calling_convention`` register a new calling convention.</span>
<span class="sd"> :param CallingConvention cc: a CallingConvention object to register</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterPlatformCallingConvention</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">cc</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
<div class="viewcode-block" id="Platform.get_related_platform"><a class="viewcode-back" href="../../binaryninja.platform-module.html#binaryninja.platform.Platform.get_related_platform">[docs]</a> <span class="k">def</span> <span class="nf">get_related_platform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arch</span><span class="p">):</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetRelatedPlatform</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">arch</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">Platform</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">result</span><span class="p">)</span></div>
<div class="viewcode-block" id="Platform.add_related_platform"><a class="viewcode-back" href="../../binaryninja.platform-module.html#binaryninja.platform.Platform.add_related_platform">[docs]</a> <span class="k">def</span> <span class="nf">add_related_platform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arch</span><span class="p">,</span> <span class="n">platform</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNAddRelatedPlatform</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">arch</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">platform</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
<div class="viewcode-block" id="Platform.get_associated_platform_by_address"><a class="viewcode-back" href="../../binaryninja.platform-module.html#binaryninja.platform.Platform.get_associated_platform_by_address">[docs]</a> <span class="k">def</span> <span class="nf">get_associated_platform_by_address</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">addr</span><span class="p">):</span>
<span class="n">new_addr</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">new_addr</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">addr</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetAssociatedPlatformByAddress</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">new_addr</span><span class="p">)</span>
<span class="k">return</span> <span class="n">Platform</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">result</span><span class="p">),</span> <span class="n">new_addr</span><span class="o">.</span><span class="n">value</span></div>
<div class="viewcode-block" id="Platform.get_type_by_name"><a class="viewcode-back" href="../../binaryninja.platform-module.html#binaryninja.platform.Platform.get_type_by_name">[docs]</a> <span class="k">def</span> <span class="nf">get_type_by_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">QualifiedName</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">_get_core_struct</span><span class="p">()</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformTypeByName</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">types</span><span class="o">.</span><span class="n">Type</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">platform</span> <span class="o">=</span> <span class="bp">self</span><span class="p">)</span></div>
<div class="viewcode-block" id="Platform.get_variable_by_name"><a class="viewcode-back" href="../../binaryninja.platform-module.html#binaryninja.platform.Platform.get_variable_by_name">[docs]</a> <span class="k">def</span> <span class="nf">get_variable_by_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">QualifiedName</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">_get_core_struct</span><span class="p">()</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformVariableByName</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">types</span><span class="o">.</span><span class="n">Type</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">platform</span> <span class="o">=</span> <span class="bp">self</span><span class="p">)</span></div>
<div class="viewcode-block" id="Platform.get_function_by_name"><a class="viewcode-back" href="../../binaryninja.platform-module.html#binaryninja.platform.Platform.get_function_by_name">[docs]</a> <span class="k">def</span> <span class="nf">get_function_by_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">QualifiedName</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">_get_core_struct</span><span class="p">()</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformFunctionByName</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">types</span><span class="o">.</span><span class="n">Type</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">platform</span> <span class="o">=</span> <span class="bp">self</span><span class="p">)</span></div>
<div class="viewcode-block" id="Platform.get_system_call_name"><a class="viewcode-back" href="../../binaryninja.platform-module.html#binaryninja.platform.Platform.get_system_call_name">[docs]</a> <span class="k">def</span> <span class="nf">get_system_call_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">number</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformSystemCallName</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">number</span><span class="p">)</span></div>
<div class="viewcode-block" id="Platform.get_system_call_type"><a class="viewcode-back" href="../../binaryninja.platform-module.html#binaryninja.platform.Platform.get_system_call_type">[docs]</a> <span class="k">def</span> <span class="nf">get_system_call_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">number</span><span class="p">):</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetPlatformSystemCallType</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">number</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">types</span><span class="o">.</span><span class="n">Type</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">platform</span> <span class="o">=</span> <span class="bp">self</span><span class="p">)</span></div>
<div class="viewcode-block" id="Platform.generate_auto_platform_type_id"><a class="viewcode-back" href="../../binaryninja.platform-module.html#binaryninja.platform.Platform.generate_auto_platform_type_id">[docs]</a> <span class="k">def</span> <span class="nf">generate_auto_platform_type_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">QualifiedName</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">_get_core_struct</span><span class="p">()</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGenerateAutoPlatformTypeId</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span></div>
<div class="viewcode-block" id="Platform.generate_auto_platform_type_ref"><a class="viewcode-back" href="../../binaryninja.platform-module.html#binaryninja.platform.Platform.generate_auto_platform_type_ref">[docs]</a> <span class="k">def</span> <span class="nf">generate_auto_platform_type_ref</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">type_class</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="n">type_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">generate_auto_platform_type_id</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="k">return</span> <span class="n">types</span><span class="o">.</span><span class="n">NamedTypeReference</span><span class="p">(</span><span class="n">type_class</span><span class="p">,</span> <span class="n">type_id</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span></div>
<div class="viewcode-block" id="Platform.get_auto_platform_type_id_source"><a class="viewcode-back" href="../../binaryninja.platform-module.html#binaryninja.platform.Platform.get_auto_platform_type_id_source">[docs]</a> <span class="k">def</span> <span class="nf">get_auto_platform_type_id_source</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetAutoPlatformTypeIdSource</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
<div class="viewcode-block" id="Platform.parse_types_from_source"><a class="viewcode-back" href="../../binaryninja.platform-module.html#binaryninja.platform.Platform.parse_types_from_source">[docs]</a> <span class="k">def</span> <span class="nf">parse_types_from_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">source</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">include_dirs</span><span class="o">=</span><span class="p">[],</span> <span class="n">auto_type_source</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``parse_types_from_source`` parses the source string and any needed headers searching for them in</span>
<span class="sd"> the optional list of directories provided in ``include_dirs``.</span>
<span class="sd"> :param str source: source string to be parsed</span>
<span class="sd"> :param str filename: optional source filename</span>
<span class="sd"> :param list(str) include_dirs: optional list of string filename include directories</span>
<span class="sd"> :param str auto_type_source: optional source of types if used for automatically generated types</span>
<span class="sd"> :return: :py:class:`TypeParserResult` (a SyntaxError is thrown on parse error)</span>
<span class="sd"> :rtype: TypeParserResult</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; platform.parse_types_from_source(&#39;int foo;\\nint bar(int x);\\nstruct bas{int x,y;};\\n&#39;)</span>
<span class="sd"> ({types: {&#39;bas&#39;: &lt;type: struct bas&gt;}, variables: {&#39;foo&#39;: &lt;type: int32_t&gt;}, functions:{&#39;bar&#39;:</span>
<span class="sd"> &lt;type: int32_t(int32_t x)&gt;}}, &#39;&#39;)</span>
<span class="sd"> &gt;&gt;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">filename</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">filename</span> <span class="o">=</span> <span class="s2">&quot;input&quot;</span>
<span class="n">dir_buf</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">include_dirs</span><span class="p">))()</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">include_dirs</span><span class="p">)):</span>
<span class="n">dir_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">include_dirs</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;charmap&#39;</span><span class="p">)</span>
<span class="n">parse</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNTypeParserResult</span><span class="p">()</span>
<span class="n">errors</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span><span class="p">()</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNParseTypesFromSource</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">source</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">parse</span><span class="p">,</span> <span class="n">errors</span><span class="p">,</span> <span class="n">dir_buf</span><span class="p">,</span>
<span class="nb">len</span><span class="p">(</span><span class="n">include_dirs</span><span class="p">),</span> <span class="n">auto_type_source</span><span class="p">)</span>
<span class="n">error_str</span> <span class="o">=</span> <span class="n">errors</span><span class="o">.</span><span class="n">value</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeString</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">errors</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_byte</span><span class="p">)))</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">SyntaxError</span><span class="p">(</span><span class="n">error_str</span><span class="p">)</span>
<span class="n">type_dict</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">variables</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">functions</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">parse</span><span class="o">.</span><span class="n">typeCount</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">QualifiedName</span><span class="o">.</span><span class="n">_from_core_struct</span><span class="p">(</span><span class="n">parse</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="n">type_dict</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">Type</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewTypeReference</span><span class="p">(</span><span class="n">parse</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">),</span> <span class="n">platform</span> <span class="o">=</span> <span class="bp">self</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">parse</span><span class="o">.</span><span class="n">variableCount</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">QualifiedName</span><span class="o">.</span><span class="n">_from_core_struct</span><span class="p">(</span><span class="n">parse</span><span class="o">.</span><span class="n">variables</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="n">variables</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">Type</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewTypeReference</span><span class="p">(</span><span class="n">parse</span><span class="o">.</span><span class="n">variables</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">),</span> <span class="n">platform</span> <span class="o">=</span> <span class="bp">self</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">parse</span><span class="o">.</span><span class="n">functionCount</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">QualifiedName</span><span class="o">.</span><span class="n">_from_core_struct</span><span class="p">(</span><span class="n">parse</span><span class="o">.</span><span class="n">functions</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="n">functions</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">Type</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewTypeReference</span><span class="p">(</span><span class="n">parse</span><span class="o">.</span><span class="n">functions</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">),</span> <span class="n">platform</span> <span class="o">=</span> <span class="bp">self</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeTypeParserResult</span><span class="p">(</span><span class="n">parse</span><span class="p">)</span>
<span class="k">return</span> <span class="n">types</span><span class="o">.</span><span class="n">TypeParserResult</span><span class="p">(</span><span class="n">type_dict</span><span class="p">,</span> <span class="n">variables</span><span class="p">,</span> <span class="n">functions</span><span class="p">)</span></div>
<div class="viewcode-block" id="Platform.parse_types_from_source_file"><a class="viewcode-back" href="../../binaryninja.platform-module.html#binaryninja.platform.Platform.parse_types_from_source_file">[docs]</a> <span class="k">def</span> <span class="nf">parse_types_from_source_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">include_dirs</span><span class="o">=</span><span class="p">[],</span> <span class="n">auto_type_source</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``parse_types_from_source_file`` parses the source file ``filename`` and any needed headers searching for them in</span>
<span class="sd"> the optional list of directories provided in ``include_dirs``.</span>
<span class="sd"> :param str filename: filename of file to be parsed</span>
<span class="sd"> :param list(str) include_dirs: optional list of string filename include directories</span>
<span class="sd"> :param str auto_type_source: optional source of types if used for automatically generated types</span>
<span class="sd"> :return: :py:class:`TypeParserResult` (a SyntaxError is thrown on parse error)</span>
<span class="sd"> :rtype: TypeParserResult</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; file = &quot;/Users/binja/tmp.c&quot;</span>
<span class="sd"> &gt;&gt;&gt; open(file).read()</span>
<span class="sd"> &#39;int foo;\\nint bar(int x);\\nstruct bas{int x,y;};\\n&#39;</span>
<span class="sd"> &gt;&gt;&gt; platform.parse_types_from_source_file(file)</span>
<span class="sd"> ({types: {&#39;bas&#39;: &lt;type: struct bas&gt;}, variables: {&#39;foo&#39;: &lt;type: int32_t&gt;}, functions:</span>
<span class="sd"> {&#39;bar&#39;: &lt;type: int32_t(int32_t x)&gt;}}, &#39;&#39;)</span>
<span class="sd"> &gt;&gt;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">dir_buf</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">include_dirs</span><span class="p">))()</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">include_dirs</span><span class="p">)):</span>
<span class="n">dir_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">include_dirs</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;charmap&#39;</span><span class="p">)</span>
<span class="n">parse</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNTypeParserResult</span><span class="p">()</span>
<span class="n">errors</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span><span class="p">()</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNParseTypesFromSourceFile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">parse</span><span class="p">,</span> <span class="n">errors</span><span class="p">,</span> <span class="n">dir_buf</span><span class="p">,</span>
<span class="nb">len</span><span class="p">(</span><span class="n">include_dirs</span><span class="p">),</span> <span class="n">auto_type_source</span><span class="p">)</span>
<span class="n">error_str</span> <span class="o">=</span> <span class="n">errors</span><span class="o">.</span><span class="n">value</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeString</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">errors</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_byte</span><span class="p">)))</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">SyntaxError</span><span class="p">(</span><span class="n">error_str</span><span class="p">)</span>
<span class="n">type_dict</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">variables</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">functions</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">parse</span><span class="o">.</span><span class="n">typeCount</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">QualifiedName</span><span class="o">.</span><span class="n">_from_core_struct</span><span class="p">(</span><span class="n">parse</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="n">type_dict</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">Type</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewTypeReference</span><span class="p">(</span><span class="n">parse</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">),</span> <span class="n">platform</span> <span class="o">=</span> <span class="bp">self</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">parse</span><span class="o">.</span><span class="n">variableCount</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">QualifiedName</span><span class="o">.</span><span class="n">_from_core_struct</span><span class="p">(</span><span class="n">parse</span><span class="o">.</span><span class="n">variables</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="n">variables</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">Type</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewTypeReference</span><span class="p">(</span><span class="n">parse</span><span class="o">.</span><span class="n">variables</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">),</span> <span class="n">platform</span> <span class="o">=</span> <span class="bp">self</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">parse</span><span class="o">.</span><span class="n">functionCount</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">QualifiedName</span><span class="o">.</span><span class="n">_from_core_struct</span><span class="p">(</span><span class="n">parse</span><span class="o">.</span><span class="n">functions</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="n">functions</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">types</span><span class="o">.</span><span class="n">Type</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewTypeReference</span><span class="p">(</span><span class="n">parse</span><span class="o">.</span><span class="n">functions</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">),</span> <span class="n">platform</span> <span class="o">=</span> <span class="bp">self</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeTypeParserResult</span><span class="p">(</span><span class="n">parse</span><span class="p">)</span>
<span class="k">return</span> <span class="n">types</span><span class="o">.</span><span class="n">TypeParserResult</span><span class="p">(</span><span class="n">type_dict</span><span class="p">,</span> <span class="n">variables</span><span class="p">,</span> <span class="n">functions</span><span class="p">)</span></div></div>
</pre></div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,907 @@
<!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>binaryninja.plugin &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.plugin</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.plugin</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="kn">import</span> <span class="nn">traceback</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">threading</span>
<span class="c1"># Binary Ninja components</span>
<span class="kn">import</span> <span class="nn">binaryninja</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<span class="kn">from</span> <span class="nn">binaryninja.enums</span> <span class="k">import</span> <span class="n">PluginCommandType</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">filemetadata</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">binaryview</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">function</span>
<span class="c1"># 2-3 compatibility</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="nb">range</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">with_metaclass</span>
<div class="viewcode-block" id="PluginCommandContext"><a class="viewcode-back" href="../../binaryninja.plugin.PluginCommandContext.html#binaryninja.plugin.PluginCommandContext">[docs]</a><span class="k">class</span> <span class="nc">PluginCommandContext</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="PluginCommandContext.__init__"><a class="viewcode-back" href="../../binaryninja.plugin.PluginCommandContext.html#binaryninja.plugin.PluginCommandContext.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">view</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">view</span> <span class="o">=</span> <span class="n">view</span>
<span class="bp">self</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">length</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">function</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">instruction</span> <span class="o">=</span> <span class="kc">None</span></div></div>
<span class="k">class</span> <span class="nc">_PluginCommandMetaClass</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">commands</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetAllPluginCommands</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">PluginCommand</span><span class="p">(</span><span class="n">commands</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreePluginCommandList</span><span class="p">(</span><span class="n">commands</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">commands</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetAllPluginCommands</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="k">yield</span> <span class="n">PluginCommand</span><span class="p">(</span><span class="n">commands</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreePluginCommandList</span><span class="p">(</span><span class="n">commands</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="nb">type</span><span class="o">.</span><span class="fm">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="s2">&quot;attribute &#39;</span><span class="si">%s</span><span class="s2">&#39; is read only&quot;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
<div class="viewcode-block" id="PluginCommand"><a class="viewcode-back" href="../../binaryninja.plugin.PluginCommand.html#binaryninja.plugin.PluginCommand">[docs]</a><span class="k">class</span> <span class="nc">PluginCommand</span><span class="p">(</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">_PluginCommandMetaClass</span><span class="p">,</span> <span class="nb">object</span><span class="p">)):</span>
<span class="n">_registered_commands</span> <span class="o">=</span> <span class="p">[]</span>
<div class="viewcode-block" id="PluginCommand.__init__"><a class="viewcode-back" href="../../binaryninja.plugin.PluginCommand.html#binaryninja.plugin.PluginCommand.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cmd</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">command</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNPluginCommand</span><span class="p">()</span>
<span class="n">ctypes</span><span class="o">.</span><span class="n">memmove</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">cmd</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">sizeof</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNPluginCommand</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">cmd</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">cmd</span><span class="o">.</span><span class="n">description</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">PluginCommandType</span><span class="p">(</span><span class="n">cmd</span><span class="o">.</span><span class="n">type</span><span class="p">)</span></div>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Allow tab completion to discover metaclass list property&quot;&quot;&quot;</span>
<span class="k">pass</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">_default_action</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">file_metadata</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">filemetadata</span><span class="o">.</span><span class="n">FileMetadata</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFileForView</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">view_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="n">file_metadata</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">action</span><span class="p">(</span><span class="n">view_obj</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">_address_action</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">file_metadata</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">filemetadata</span><span class="o">.</span><span class="n">FileMetadata</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFileForView</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">view_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="n">file_metadata</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">action</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">addr</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">_range_action</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">length</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">file_metadata</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">filemetadata</span><span class="o">.</span><span class="n">FileMetadata</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFileForView</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">view_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="n">file_metadata</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">action</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">length</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">_function_action</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">file_metadata</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">filemetadata</span><span class="o">.</span><span class="n">FileMetadata</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFileForView</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">view_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="n">file_metadata</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">func_obj</span> <span class="o">=</span> <span class="n">function</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewFunctionReference</span><span class="p">(</span><span class="n">func</span><span class="p">))</span>
<span class="n">action</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">func_obj</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">_low_level_il_function_action</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">file_metadata</span> <span class="o">=</span> <span class="n">filemetadata</span><span class="o">.</span><span class="n">FileMetadata</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFileForView</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">view_obj</span> <span class="o">=</span> <span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="n">file_metadata</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">owner</span> <span class="o">=</span> <span class="n">function</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetLowLevelILOwnerFunction</span><span class="p">(</span><span class="n">func</span><span class="p">))</span>
<span class="n">func_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">lowlevelil</span><span class="o">.</span><span class="n">LowLevelILFunction</span><span class="p">(</span><span class="n">owner</span><span class="o">.</span><span class="n">arch</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewLowLevelILFunctionReference</span><span class="p">(</span><span class="n">func</span><span class="p">),</span> <span class="n">owner</span><span class="p">)</span>
<span class="n">action</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">func_obj</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">_low_level_il_instruction_action</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">instr</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">file_metadata</span> <span class="o">=</span> <span class="n">filemetadata</span><span class="o">.</span><span class="n">FileMetadata</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFileForView</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">view_obj</span> <span class="o">=</span> <span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="n">file_metadata</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">owner</span> <span class="o">=</span> <span class="n">function</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetLowLevelILOwnerFunction</span><span class="p">(</span><span class="n">func</span><span class="p">))</span>
<span class="n">func_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">lowlevelil</span><span class="o">.</span><span class="n">LowLevelILFunction</span><span class="p">(</span><span class="n">owner</span><span class="o">.</span><span class="n">arch</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewLowLevelILFunctionReference</span><span class="p">(</span><span class="n">func</span><span class="p">),</span> <span class="n">owner</span><span class="p">)</span>
<span class="n">action</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">func_obj</span><span class="p">[</span><span class="n">instr</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">_medium_level_il_function_action</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">file_metadata</span> <span class="o">=</span> <span class="n">filemetadata</span><span class="o">.</span><span class="n">FileMetadata</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFileForView</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">view_obj</span> <span class="o">=</span> <span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="n">file_metadata</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">owner</span> <span class="o">=</span> <span class="n">function</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetMediumLevelILOwnerFunction</span><span class="p">(</span><span class="n">func</span><span class="p">))</span>
<span class="n">func_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">mediumlevelil</span><span class="o">.</span><span class="n">MediumLevelILFunction</span><span class="p">(</span><span class="n">owner</span><span class="o">.</span><span class="n">arch</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewMediumLevelILFunctionReference</span><span class="p">(</span><span class="n">func</span><span class="p">),</span> <span class="n">owner</span><span class="p">)</span>
<span class="n">action</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">func_obj</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">_medium_level_il_instruction_action</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">instr</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">file_metadata</span> <span class="o">=</span> <span class="n">filemetadata</span><span class="o">.</span><span class="n">FileMetadata</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFileForView</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">view_obj</span> <span class="o">=</span> <span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="n">file_metadata</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">owner</span> <span class="o">=</span> <span class="n">function</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetMediumLevelILOwnerFunction</span><span class="p">(</span><span class="n">func</span><span class="p">))</span>
<span class="n">func_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">mediumlevelil</span><span class="o">.</span><span class="n">MediumLevelILFunction</span><span class="p">(</span><span class="n">owner</span><span class="o">.</span><span class="n">arch</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewMediumLevelILFunctionReference</span><span class="p">(</span><span class="n">func</span><span class="p">),</span> <span class="n">owner</span><span class="p">)</span>
<span class="n">action</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">func_obj</span><span class="p">[</span><span class="n">instr</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">_default_is_valid</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">is_valid</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">is_valid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="n">file_metadata</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">filemetadata</span><span class="o">.</span><span class="n">FileMetadata</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFileForView</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">view_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="n">file_metadata</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="k">return</span> <span class="n">is_valid</span><span class="p">(</span><span class="n">view_obj</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">_address_is_valid</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">is_valid</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">is_valid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="n">file_metadata</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">filemetadata</span><span class="o">.</span><span class="n">FileMetadata</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFileForView</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">view_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="n">file_metadata</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="k">return</span> <span class="n">is_valid</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">addr</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">_range_is_valid</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">length</span><span class="p">,</span> <span class="n">is_valid</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">is_valid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="n">file_metadata</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">filemetadata</span><span class="o">.</span><span class="n">FileMetadata</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFileForView</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">view_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="n">file_metadata</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="k">return</span> <span class="n">is_valid</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">length</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">_function_is_valid</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">is_valid</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">is_valid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="n">file_metadata</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">filemetadata</span><span class="o">.</span><span class="n">FileMetadata</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFileForView</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">view_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="n">file_metadata</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">func_obj</span> <span class="o">=</span> <span class="n">function</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewFunctionReference</span><span class="p">(</span><span class="n">func</span><span class="p">))</span>
<span class="k">return</span> <span class="n">is_valid</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">func_obj</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">_low_level_il_function_is_valid</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">is_valid</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">is_valid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="n">file_metadata</span> <span class="o">=</span> <span class="n">filemetadata</span><span class="o">.</span><span class="n">FileMetadata</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFileForView</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">view_obj</span> <span class="o">=</span> <span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="n">file_metadata</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">owner</span> <span class="o">=</span> <span class="n">function</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetLowLevelILOwnerFunction</span><span class="p">(</span><span class="n">func</span><span class="p">))</span>
<span class="n">func_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">lowlevelil</span><span class="o">.</span><span class="n">LowLevelILFunction</span><span class="p">(</span><span class="n">owner</span><span class="o">.</span><span class="n">arch</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewLowLevelILFunctionReference</span><span class="p">(</span><span class="n">func</span><span class="p">),</span> <span class="n">owner</span><span class="p">)</span>
<span class="k">return</span> <span class="n">is_valid</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">func_obj</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">_low_level_il_instruction_is_valid</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">instr</span><span class="p">,</span> <span class="n">is_valid</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">is_valid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="n">file_metadata</span> <span class="o">=</span> <span class="n">filemetadata</span><span class="o">.</span><span class="n">FileMetadata</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFileForView</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">view_obj</span> <span class="o">=</span> <span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="n">file_metadata</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">owner</span> <span class="o">=</span> <span class="n">function</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetLowLevelILOwnerFunction</span><span class="p">(</span><span class="n">func</span><span class="p">))</span>
<span class="n">func_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">lowlevelil</span><span class="o">.</span><span class="n">LowLevelILFunction</span><span class="p">(</span><span class="n">owner</span><span class="o">.</span><span class="n">arch</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewLowLevelILFunctionReference</span><span class="p">(</span><span class="n">func</span><span class="p">),</span> <span class="n">owner</span><span class="p">)</span>
<span class="k">return</span> <span class="n">is_valid</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">func_obj</span><span class="p">[</span><span class="n">instr</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">_medium_level_il_function_is_valid</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">is_valid</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">is_valid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="n">file_metadata</span> <span class="o">=</span> <span class="n">filemetadata</span><span class="o">.</span><span class="n">FileMetadata</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFileForView</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">view_obj</span> <span class="o">=</span> <span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="n">file_metadata</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">owner</span> <span class="o">=</span> <span class="n">function</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetMediumLevelILOwnerFunction</span><span class="p">(</span><span class="n">func</span><span class="p">))</span>
<span class="n">func_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">mediumlevelil</span><span class="o">.</span><span class="n">MediumLevelILFunction</span><span class="p">(</span><span class="n">owner</span><span class="o">.</span><span class="n">arch</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewMediumLevelILFunctionReference</span><span class="p">(</span><span class="n">func</span><span class="p">),</span> <span class="n">owner</span><span class="p">)</span>
<span class="k">return</span> <span class="n">is_valid</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">func_obj</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">_medium_level_il_instruction_is_valid</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">instr</span><span class="p">,</span> <span class="n">is_valid</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">is_valid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="n">file_metadata</span> <span class="o">=</span> <span class="n">filemetadata</span><span class="o">.</span><span class="n">FileMetadata</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFileForView</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">view_obj</span> <span class="o">=</span> <span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">file_metadata</span> <span class="o">=</span> <span class="n">file_metadata</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="n">owner</span> <span class="o">=</span> <span class="n">function</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetMediumLevelILOwnerFunction</span><span class="p">(</span><span class="n">func</span><span class="p">))</span>
<span class="n">func_obj</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">mediumlevelil</span><span class="o">.</span><span class="n">MediumLevelILFunction</span><span class="p">(</span><span class="n">owner</span><span class="o">.</span><span class="n">arch</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewMediumLevelILFunctionReference</span><span class="p">(</span><span class="n">func</span><span class="p">),</span> <span class="n">owner</span><span class="p">)</span>
<span class="k">return</span> <span class="n">is_valid</span><span class="p">(</span><span class="n">view_obj</span><span class="p">,</span> <span class="n">func_obj</span><span class="p">[</span><span class="n">instr</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<div class="viewcode-block" id="PluginCommand.register"><a class="viewcode-back" href="../../binaryninja.plugin-module.html#binaryninja.plugin.PluginCommand.register">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">register</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">is_valid</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``register`` Register a plugin</span>
<span class="sd"> :param str name: name of the plugin</span>
<span class="sd"> :param str description: description of the plugin</span>
<span class="sd"> :param action: function to call with the ``BinaryView`` as an argument</span>
<span class="sd"> :param is_valid: optional argument of a function passed a ``BinaryView`` to determine whether the plugin should be enabled for that view</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> .. warning:: Calling ``register`` with the same function name will replace the existing function but will leak the memory of the original plugin.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">action_obj</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNBinaryView</span><span class="p">))(</span><span class="k">lambda</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_default_action</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">action</span><span class="p">))</span>
<span class="n">is_valid_obj</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_bool</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNBinaryView</span><span class="p">))(</span><span class="k">lambda</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_default_is_valid</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">is_valid</span><span class="p">))</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">_registered_commands</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">action_obj</span><span class="p">,</span> <span class="n">is_valid_obj</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterPluginCommand</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">action_obj</span><span class="p">,</span> <span class="n">is_valid_obj</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
<div class="viewcode-block" id="PluginCommand.register_for_address"><a class="viewcode-back" href="../../binaryninja.plugin-module.html#binaryninja.plugin.PluginCommand.register_for_address">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">register_for_address</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">is_valid</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``register_for_address`` Register a plugin to be called with an address argument</span>
<span class="sd"> :param str name: name of the plugin</span>
<span class="sd"> :param str description: description of the plugin</span>
<span class="sd"> :param action: function to call with the ``BinaryView`` and address as arguments</span>
<span class="sd"> :param is_valid: optional argument of a function passed a ``BinaryView`` to determine whether the plugin should be enabled for that view</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> .. warning:: Calling ``register_for_address`` with the same function name will replace the existing function but will leak the memory of the original plugin.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">action_obj</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNBinaryView</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">)(</span><span class="k">lambda</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">addr</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_address_action</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">action</span><span class="p">))</span>
<span class="n">is_valid_obj</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_bool</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNBinaryView</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">)(</span><span class="k">lambda</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">addr</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_address_is_valid</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">is_valid</span><span class="p">))</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">_registered_commands</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">action_obj</span><span class="p">,</span> <span class="n">is_valid_obj</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterPluginCommandForAddress</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">action_obj</span><span class="p">,</span> <span class="n">is_valid_obj</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
<div class="viewcode-block" id="PluginCommand.register_for_range"><a class="viewcode-back" href="../../binaryninja.plugin-module.html#binaryninja.plugin.PluginCommand.register_for_range">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">register_for_range</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">is_valid</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``register_for_range`` Register a plugin to be called with a range argument</span>
<span class="sd"> :param str name: name of the plugin</span>
<span class="sd"> :param str description: description of the plugin</span>
<span class="sd"> :param action: function to call with the ``BinaryView`` and ``AddressRange`` as arguments</span>
<span class="sd"> :param is_valid: optional argument of a function passed a ``BinaryView`` to determine whether the plugin should be enabled for that view</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> .. warning:: Calling ``register_for_range`` with the same function name will replace the existing function but will leak the memory of the original plugin.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">action_obj</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNBinaryView</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">)(</span><span class="k">lambda</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">length</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_range_action</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">length</span><span class="p">,</span> <span class="n">action</span><span class="p">))</span>
<span class="n">is_valid_obj</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_bool</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNBinaryView</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">)(</span><span class="k">lambda</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">length</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_range_is_valid</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">length</span><span class="p">,</span> <span class="n">is_valid</span><span class="p">))</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">_registered_commands</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">action_obj</span><span class="p">,</span> <span class="n">is_valid_obj</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterPluginCommandForRange</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">action_obj</span><span class="p">,</span> <span class="n">is_valid_obj</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
<div class="viewcode-block" id="PluginCommand.register_for_function"><a class="viewcode-back" href="../../binaryninja.plugin-module.html#binaryninja.plugin.PluginCommand.register_for_function">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">register_for_function</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">is_valid</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``register_for_function`` Register a plugin to be called with a function argument</span>
<span class="sd"> :param str name: name of the plugin</span>
<span class="sd"> :param str description: description of the plugin</span>
<span class="sd"> :param action: function to call with the ``BinaryView`` and a ``Function`` as arguments</span>
<span class="sd"> :param is_valid: optional argument of a function passed a ``BinaryView`` to determine whether the plugin should be enabled for that view</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> .. warning:: Calling ``register_for_function`` with the same function name will replace the existing function but will leak the memory of the original plugin.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">action_obj</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNBinaryView</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNFunction</span><span class="p">))(</span><span class="k">lambda</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_function_action</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">action</span><span class="p">))</span>
<span class="n">is_valid_obj</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_bool</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNBinaryView</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNFunction</span><span class="p">))(</span><span class="k">lambda</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_function_is_valid</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">is_valid</span><span class="p">))</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">_registered_commands</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">action_obj</span><span class="p">,</span> <span class="n">is_valid_obj</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterPluginCommandForFunction</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">action_obj</span><span class="p">,</span> <span class="n">is_valid_obj</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
<div class="viewcode-block" id="PluginCommand.register_for_low_level_il_function"><a class="viewcode-back" href="../../binaryninja.plugin-module.html#binaryninja.plugin.PluginCommand.register_for_low_level_il_function">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">register_for_low_level_il_function</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">is_valid</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``register_for_low_level_il_function`` Register a plugin to be called with a low level IL function argument</span>
<span class="sd"> :param str name: name of the plugin</span>
<span class="sd"> :param str description: description of the plugin</span>
<span class="sd"> :param action: function to call with the ``BinaryView`` and a ``LowLevelILFunction`` as arguments</span>
<span class="sd"> :param is_valid: optional argument of a function passed a ``BinaryView`` to determine whether the plugin should be enabled for that view</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> .. warning:: Calling ``register_for_low_level_il_function`` with the same function name will replace the existing function but will leak the memory of the original plugin.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">action_obj</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNBinaryView</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNLowLevelILFunction</span><span class="p">))(</span><span class="k">lambda</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_low_level_il_function_action</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">action</span><span class="p">))</span>
<span class="n">is_valid_obj</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_bool</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNBinaryView</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNLowLevelILFunction</span><span class="p">))(</span><span class="k">lambda</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_low_level_il_function_is_valid</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">is_valid</span><span class="p">))</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">_registered_commands</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">action_obj</span><span class="p">,</span> <span class="n">is_valid_obj</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterPluginCommandForLowLevelILFunction</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">action_obj</span><span class="p">,</span> <span class="n">is_valid_obj</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
<div class="viewcode-block" id="PluginCommand.register_for_low_level_il_instruction"><a class="viewcode-back" href="../../binaryninja.plugin-module.html#binaryninja.plugin.PluginCommand.register_for_low_level_il_instruction">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">register_for_low_level_il_instruction</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">is_valid</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``register_for_low_level_il_instruction`` Register a plugin to be called with a low level IL instruction argument</span>
<span class="sd"> :param str name: name of the plugin</span>
<span class="sd"> :param str description: description of the plugin</span>
<span class="sd"> :param action: function to call with the ``BinaryView`` and a ``LowLevelILInstruction`` as arguments</span>
<span class="sd"> :param is_valid: optional argument of a function passed a ``BinaryView`` to determine whether the plugin should be enabled for that view</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> .. warning:: Calling ``register_for_low_level_il_instruction`` with the same function name will replace the existing function but will leak the memory of the original plugin.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">action_obj</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNBinaryView</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNLowLevelILFunction</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">)(</span><span class="k">lambda</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">instr</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_low_level_il_instruction_action</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">instr</span><span class="p">,</span> <span class="n">action</span><span class="p">))</span>
<span class="n">is_valid_obj</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_bool</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNBinaryView</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNLowLevelILFunction</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">)(</span><span class="k">lambda</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">instr</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_low_level_il_instruction_is_valid</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">instr</span><span class="p">,</span> <span class="n">is_valid</span><span class="p">))</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">_registered_commands</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">action_obj</span><span class="p">,</span> <span class="n">is_valid_obj</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterPluginCommandForLowLevelILInstruction</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">action_obj</span><span class="p">,</span> <span class="n">is_valid_obj</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
<div class="viewcode-block" id="PluginCommand.register_for_medium_level_il_function"><a class="viewcode-back" href="../../binaryninja.plugin-module.html#binaryninja.plugin.PluginCommand.register_for_medium_level_il_function">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">register_for_medium_level_il_function</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">is_valid</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``register_for_medium_level_il_function`` Register a plugin to be called with a medium level IL function argument</span>
<span class="sd"> :param str name: name of the plugin</span>
<span class="sd"> :param str description: description of the plugin</span>
<span class="sd"> :param action: function to call with the ``BinaryView`` and a ``MediumLevelILFunction`` as arguments</span>
<span class="sd"> :param is_valid: optional argument of a function passed a ``BinaryView`` to determine whether the plugin should be enabled for that view</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> .. warning:: Calling ``register_for_medium_level_il_function`` with the same function name will replace the existing function but will leak the memory of the original plugin.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">action_obj</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNBinaryView</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNMediumLevelILFunction</span><span class="p">))(</span><span class="k">lambda</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_medium_level_il_function_action</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">action</span><span class="p">))</span>
<span class="n">is_valid_obj</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_bool</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNBinaryView</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNMediumLevelILFunction</span><span class="p">))(</span><span class="k">lambda</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_medium_level_il_function_is_valid</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">is_valid</span><span class="p">))</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">_registered_commands</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">action_obj</span><span class="p">,</span> <span class="n">is_valid_obj</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterPluginCommandForMediumLevelILFunction</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">action_obj</span><span class="p">,</span> <span class="n">is_valid_obj</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
<div class="viewcode-block" id="PluginCommand.register_for_medium_level_il_instruction"><a class="viewcode-back" href="../../binaryninja.plugin-module.html#binaryninja.plugin.PluginCommand.register_for_medium_level_il_instruction">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">register_for_medium_level_il_instruction</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">is_valid</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``register_for_medium_level_il_instruction`` Register a plugin to be called with a medium level IL instruction argument</span>
<span class="sd"> :param str name: name of the plugin</span>
<span class="sd"> :param str description: description of the plugin</span>
<span class="sd"> :param action: function to call with the ``BinaryView`` and a ``MediumLevelILInstruction`` as arguments</span>
<span class="sd"> :param is_valid: optional argument of a function passed a ``BinaryView`` to determine whether the plugin should be enabled for that view</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> .. warning:: Calling ``register_for_medium_level_il_instruction`` with the same function name will replace the existing function but will leak the memory of the original plugin.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">action_obj</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNBinaryView</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNMediumLevelILFunction</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">)(</span><span class="k">lambda</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">instr</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_medium_level_il_instruction_action</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">instr</span><span class="p">,</span> <span class="n">action</span><span class="p">))</span>
<span class="n">is_valid_obj</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_bool</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNBinaryView</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNMediumLevelILFunction</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">)(</span><span class="k">lambda</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">instr</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_medium_level_il_instruction_is_valid</span><span class="p">(</span><span class="n">view</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">instr</span><span class="p">,</span> <span class="n">is_valid</span><span class="p">))</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">_registered_commands</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">action_obj</span><span class="p">,</span> <span class="n">is_valid_obj</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterPluginCommandForMediumLevelILInstruction</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">action_obj</span><span class="p">,</span> <span class="n">is_valid_obj</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
<div class="viewcode-block" id="PluginCommand.get_valid_list"><a class="viewcode-back" href="../../binaryninja.plugin-module.html#binaryninja.plugin.PluginCommand.get_valid_list">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">get_valid_list</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Dict of registered plugins&quot;&quot;&quot;</span>
<span class="n">commands</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">list</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">commands</span><span class="p">:</span>
<span class="k">if</span> <span class="n">cmd</span><span class="o">.</span><span class="n">is_valid</span><span class="p">(</span><span class="n">context</span><span class="p">):</span>
<span class="n">result</span><span class="p">[</span><span class="n">cmd</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">cmd</span>
<span class="k">return</span> <span class="n">result</span></div>
<div class="viewcode-block" id="PluginCommand.is_valid"><a class="viewcode-back" href="../../binaryninja.plugin-module.html#binaryninja.plugin.PluginCommand.is_valid">[docs]</a> <span class="k">def</span> <span class="nf">is_valid</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
<span class="k">if</span> <span class="n">context</span><span class="o">.</span><span class="n">view</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">PluginCommandType</span><span class="o">.</span><span class="n">DefaultPluginCommand</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">defaultIsValid</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">defaultIsValid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">PluginCommandType</span><span class="o">.</span><span class="n">AddressPluginCommand</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">addressIsValid</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">addressIsValid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">address</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">PluginCommandType</span><span class="o">.</span><span class="n">RangePluginCommand</span><span class="p">:</span>
<span class="k">if</span> <span class="n">context</span><span class="o">.</span><span class="n">length</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">rangeIsValid</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">rangeIsValid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">length</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">PluginCommandType</span><span class="o">.</span><span class="n">FunctionPluginCommand</span><span class="p">:</span>
<span class="k">if</span> <span class="n">context</span><span class="o">.</span><span class="n">function</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">functionIsValid</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">functionIsValid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">PluginCommandType</span><span class="o">.</span><span class="n">LowLevelILFunctionPluginCommand</span><span class="p">:</span>
<span class="k">if</span> <span class="n">context</span><span class="o">.</span><span class="n">function</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">lowLevelILFunctionIsValid</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">lowLevelILFunctionIsValid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">PluginCommandType</span><span class="o">.</span><span class="n">LowLevelILInstructionPluginCommand</span><span class="p">:</span>
<span class="k">if</span> <span class="n">context</span><span class="o">.</span><span class="n">instruction</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">context</span><span class="o">.</span><span class="n">instruction</span><span class="p">,</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">lowlevelil</span><span class="o">.</span><span class="n">LowLevelILInstruction</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">lowLevelILInstructionIsValid</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">lowLevelILInstructionIsValid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span>
<span class="n">context</span><span class="o">.</span><span class="n">instruction</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">instruction</span><span class="o">.</span><span class="n">instr_index</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">PluginCommandType</span><span class="o">.</span><span class="n">MediumLevelILFunctionPluginCommand</span><span class="p">:</span>
<span class="k">if</span> <span class="n">context</span><span class="o">.</span><span class="n">function</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">mediumLevelILFunctionIsValid</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">mediumLevelILFunctionIsValid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">PluginCommandType</span><span class="o">.</span><span class="n">MediumLevelILInstructionPluginCommand</span><span class="p">:</span>
<span class="k">if</span> <span class="n">context</span><span class="o">.</span><span class="n">instruction</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">context</span><span class="o">.</span><span class="n">instruction</span><span class="p">,</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">mediumlevelil</span><span class="o">.</span><span class="n">MediumLevelILInstruction</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">mediumLevelILInstructionIsValid</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">mediumLevelILInstructionIsValid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span>
<span class="n">context</span><span class="o">.</span><span class="n">instruction</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">instruction</span><span class="o">.</span><span class="n">instr_index</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">False</span></div>
<div class="viewcode-block" id="PluginCommand.execute"><a class="viewcode-back" href="../../binaryninja.plugin-module.html#binaryninja.plugin.PluginCommand.execute">[docs]</a> <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_valid</span><span class="p">(</span><span class="n">context</span><span class="p">):</span>
<span class="k">return</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">PluginCommandType</span><span class="o">.</span><span class="n">DefaultPluginCommand</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">defaultCommand</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">PluginCommandType</span><span class="o">.</span><span class="n">AddressPluginCommand</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">addressCommand</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">address</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">PluginCommandType</span><span class="o">.</span><span class="n">RangePluginCommand</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">rangeCommand</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">length</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">PluginCommandType</span><span class="o">.</span><span class="n">FunctionPluginCommand</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">functionCommand</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">PluginCommandType</span><span class="o">.</span><span class="n">LowLevelILFunctionPluginCommand</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">lowLevelILFunctionCommand</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">PluginCommandType</span><span class="o">.</span><span class="n">LowLevelILInstructionPluginCommand</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">lowLevelILInstructionCommand</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span>
<span class="n">context</span><span class="o">.</span><span class="n">instruction</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">instruction</span><span class="o">.</span><span class="n">instr_index</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">PluginCommandType</span><span class="o">.</span><span class="n">MediumLevelILFunctionPluginCommand</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">mediumLevelILFunctionCommand</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">PluginCommandType</span><span class="o">.</span><span class="n">MediumLevelILInstructionPluginCommand</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">mediumLevelILInstructionCommand</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">command</span><span class="o">.</span><span class="n">context</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span>
<span class="n">context</span><span class="o">.</span><span class="n">instruction</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">context</span><span class="o">.</span><span class="n">instruction</span><span class="o">.</span><span class="n">instr_index</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;PluginCommand: </span><span class="si">%s</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span></div>
<div class="viewcode-block" id="MainThreadAction"><a class="viewcode-back" href="../../binaryninja.plugin.MainThreadAction.html#binaryninja.plugin.MainThreadAction">[docs]</a><span class="k">class</span> <span class="nc">MainThreadAction</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="MainThreadAction.__init__"><a class="viewcode-back" href="../../binaryninja.plugin.MainThreadAction.html#binaryninja.plugin.MainThreadAction.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">handle</span></div>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeMainThreadAction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<div class="viewcode-block" id="MainThreadAction.execute"><a class="viewcode-back" href="../../binaryninja.plugin-module.html#binaryninja.plugin.MainThreadAction.execute">[docs]</a> <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNExecuteMainThreadAction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">done</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsMainThreadActionDone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<div class="viewcode-block" id="MainThreadAction.wait"><a class="viewcode-back" href="../../binaryninja.plugin-module.html#binaryninja.plugin.MainThreadAction.wait">[docs]</a> <span class="k">def</span> <span class="nf">wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNWaitForMainThreadAction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="MainThreadActionHandler"><a class="viewcode-back" href="../../binaryninja.plugin.MainThreadActionHandler.html#binaryninja.plugin.MainThreadActionHandler">[docs]</a><span class="k">class</span> <span class="nc">MainThreadActionHandler</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="n">_main_thread</span> <span class="o">=</span> <span class="kc">None</span>
<div class="viewcode-block" id="MainThreadActionHandler.__init__"><a class="viewcode-back" href="../../binaryninja.plugin.MainThreadActionHandler.html#binaryninja.plugin.MainThreadActionHandler.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNMainThreadCallbacks</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">context</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">addAction</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">addAction</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_add_action</span><span class="p">)</span></div>
<div class="viewcode-block" id="MainThreadActionHandler.register"><a class="viewcode-back" href="../../binaryninja.plugin-module.html#binaryninja.plugin.MainThreadActionHandler.register">[docs]</a> <span class="k">def</span> <span class="nf">register</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_main_thread</span> <span class="o">=</span> <span class="bp">self</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterMainThread</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">_add_action</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_action</span><span class="p">(</span><span class="n">MainThreadAction</span><span class="p">(</span><span class="n">action</span><span class="p">))</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<div class="viewcode-block" id="MainThreadActionHandler.add_action"><a class="viewcode-back" href="../../binaryninja.plugin-module.html#binaryninja.plugin.MainThreadActionHandler.add_action">[docs]</a> <span class="k">def</span> <span class="nf">add_action</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
<span class="k">pass</span></div></div>
<span class="k">class</span> <span class="nc">_BackgroundTaskMetaclass</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;List all running background tasks (read-only)&quot;&quot;&quot;</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">tasks</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetRunningBackgroundTasks</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">BackgroundTask</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewBackgroundTaskReference</span><span class="p">(</span><span class="n">tasks</span><span class="p">[</span><span class="n">i</span><span class="p">])))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeBackgroundTaskList</span><span class="p">(</span><span class="n">tasks</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">tasks</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetRunningBackgroundTasks</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="k">yield</span> <span class="n">BackgroundTask</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewBackgroundTaskReference</span><span class="p">(</span><span class="n">tasks</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeBackgroundTaskList</span><span class="p">(</span><span class="n">tasks</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<div class="viewcode-block" id="BackgroundTask"><a class="viewcode-back" href="../../binaryninja.plugin.BackgroundTask.html#binaryninja.plugin.BackgroundTask">[docs]</a><span class="k">class</span> <span class="nc">BackgroundTask</span><span class="p">(</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">_BackgroundTaskMetaclass</span><span class="p">,</span> <span class="nb">object</span><span class="p">)):</span>
<div class="viewcode-block" id="BackgroundTask.__init__"><a class="viewcode-back" href="../../binaryninja.plugin.BackgroundTask.html#binaryninja.plugin.BackgroundTask.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">initial_progress_text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">can_cancel</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">handle</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNBeginBackgroundTask</span><span class="p">(</span><span class="n">initial_progress_text</span><span class="p">,</span> <span class="n">can_cancel</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">handle</span></div>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeBackgroundTask</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Allow tab completion to discover metaclass list property&quot;&quot;&quot;</span>
<span class="k">pass</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">progress</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Text description of the progress of the background task (displayed in status bar of the UI)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBackgroundTaskProgressText</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@progress</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">progress</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetBackgroundTaskProgressText</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">can_cancel</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Whether the task can be cancelled (read-only)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCanCancelBackgroundTask</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">finished</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Whether the task has finished&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsBackgroundTaskFinished</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@finished</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">finished</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="n">value</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">finish</span><span class="p">()</span>
<div class="viewcode-block" id="BackgroundTask.finish"><a class="viewcode-back" href="../../binaryninja.plugin-module.html#binaryninja.plugin.BackgroundTask.finish">[docs]</a> <span class="k">def</span> <span class="nf">finish</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFinishBackgroundTask</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">cancelled</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Whether the task has been cancelled&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsBackgroundTaskCancelled</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@cancelled</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">cancelled</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="n">value</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span>
<div class="viewcode-block" id="BackgroundTask.cancel"><a class="viewcode-back" href="../../binaryninja.plugin-module.html#binaryninja.plugin.BackgroundTask.cancel">[docs]</a> <span class="k">def</span> <span class="nf">cancel</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNCancelBackgroundTask</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="BackgroundTaskThread"><a class="viewcode-back" href="../../binaryninja.plugin.BackgroundTaskThread.html#binaryninja.plugin.BackgroundTaskThread">[docs]</a><span class="k">class</span> <span class="nc">BackgroundTaskThread</span><span class="p">(</span><span class="n">BackgroundTask</span><span class="p">):</span>
<div class="viewcode-block" id="BackgroundTaskThread.__init__"><a class="viewcode-back" href="../../binaryninja.plugin.BackgroundTaskThread.html#binaryninja.plugin.BackgroundTaskThread.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">initial_progress_text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">can_cancel</span> <span class="o">=</span> <span class="kc">False</span><span class="p">):</span>
<span class="k">class</span> <span class="nc">_Thread</span><span class="p">(</span><span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task</span><span class="p">):</span>
<span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task</span> <span class="o">=</span> <span class="n">task</span>
<span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">finish</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">BackgroundTask</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">initial_progress_text</span><span class="p">,</span> <span class="n">can_cancel</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">thread</span> <span class="o">=</span> <span class="n">_Thread</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
<div class="viewcode-block" id="BackgroundTaskThread.run"><a class="viewcode-back" href="../../binaryninja.plugin-module.html#binaryninja.plugin.BackgroundTaskThread.run">[docs]</a> <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="BackgroundTaskThread.start"><a class="viewcode-back" href="../../binaryninja.plugin-module.html#binaryninja.plugin.BackgroundTaskThread.start">[docs]</a> <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">thread</span><span class="o">.</span><span class="n">start</span><span class="p">()</span></div>
<div class="viewcode-block" id="BackgroundTaskThread.join"><a class="viewcode-back" href="../../binaryninja.plugin-module.html#binaryninja.plugin.BackgroundTaskThread.join">[docs]</a> <span class="k">def</span> <span class="nf">join</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">thread</span><span class="o">.</span><span class="n">join</span><span class="p">()</span></div></div>
</pre></div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,644 @@
<!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>binaryninja.pluginmanager &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.pluginmanager</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.pluginmanager</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="c1"># Binary Ninja components</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<span class="c1"># 2-3 compatibility</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="nb">range</span>
<div class="viewcode-block" id="RepoPlugin"><a class="viewcode-back" href="../../binaryninja.pluginmanager.RepoPlugin.html#binaryninja.pluginmanager.RepoPlugin">[docs]</a><span class="k">class</span> <span class="nc">RepoPlugin</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``RepoPlugin` is mostly read-only, however you can install/uninstall enable/disable plugins. RepoPlugins are</span>
<span class="sd"> created by parsing the plugins.json in a plugin repository.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">binaryninja.enums</span> <span class="k">import</span> <span class="n">PluginType</span><span class="p">,</span> <span class="n">PluginUpdateStatus</span>
<div class="viewcode-block" id="RepoPlugin.__init__"><a class="viewcode-back" href="../../binaryninja.pluginmanager.RepoPlugin.html#binaryninja.pluginmanager.RepoPlugin.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">&quot;RepoPlugin temporarily disabled!&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">handle_of_type</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNRepoPlugin</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreePlugin</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">{}</span><span class="s2"> </span><span class="si">{}</span><span class="s2">/</span><span class="si">{}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="s2">&quot;installed&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">installed</span> <span class="k">else</span> <span class="s2">&quot;not-installed&quot;</span><span class="p">,</span> <span class="s2">&quot;enabled&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">enabled</span> <span class="k">else</span> <span class="s2">&quot;disabled&quot;</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">path</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Relative path from the base of the repository to the actual plugin&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNPluginGetPath</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">installed</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Boolean True if the plugin is installed, False otherwise&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNPluginIsInstalled</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@installed</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">installed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">):</span>
<span class="k">if</span> <span class="n">state</span><span class="p">:</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNPluginInstall</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNPluginUninstall</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">enabled</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Boolean True if the plugin is currently enabled, False otherwise&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNPluginIsEnabled</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@enabled</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">enabled</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">):</span>
<span class="k">if</span> <span class="n">state</span><span class="p">:</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNPluginEnable</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNPluginDisable</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">api</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;string indicating the API used by the plugin&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNPluginGetApi</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">description</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;String short description of the plugin&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNPluginGetDescription</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">license</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;String short license description (ie MIT, BSD, GPLv2, etc)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNPluginGetLicense</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">license_text</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;String complete license text for the given plugin&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNPluginGetLicenseText</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">long_description</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;String long description of the plugin&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNPluginGetLongdescription</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">minimum_version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;String minimum version the plugin was tested on&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNPluginGetMinimimVersions</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;String name of the plugin&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNPluginGetName</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">plugin_types</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;List of PluginType enumeration objects indicating the plugin type(s)&quot;&quot;&quot;</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">plugintypes</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNPluginGetPluginTypes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">PluginType</span><span class="p">(</span><span class="n">plugintypes</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreePluginTypes</span><span class="p">(</span><span class="n">plugintypes</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;String URL of the plugin&#39;s git repository&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNPluginGetUrl</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;String version of the plugin&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNPluginGetVersion</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">update_status</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;PluginUpdateStatus enumeration indicating if the plugin is up to date or not&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">PluginUpdateStatus</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNPluginGetPluginUpdateStatus</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">))</span></div>
<div class="viewcode-block" id="Repository"><a class="viewcode-back" href="../../binaryninja.pluginmanager.Repository.html#binaryninja.pluginmanager.Repository">[docs]</a><span class="k">class</span> <span class="nc">Repository</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``Repository`` is a read-only class. Use RepositoryManager to Enable/Disable/Install/Uninstall plugins.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="Repository.__init__"><a class="viewcode-back" href="../../binaryninja.pluginmanager.Repository.html#binaryninja.pluginmanager.Repository.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">&quot;Repository temporarily disabled!&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">handle_of_type</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNRepository</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeRepository</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;</span><span class="si">{}</span><span class="s2"> - </span><span class="si">{}</span><span class="s2">/</span><span class="si">{}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">remote_reference</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_reference</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">plugin_path</span><span class="p">):</span>
<span class="k">for</span> <span class="n">plugin</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">plugins</span><span class="p">:</span>
<span class="k">if</span> <span class="n">plugin_path</span> <span class="o">==</span> <span class="n">plugin</span><span class="o">.</span><span class="n">path</span><span class="p">:</span>
<span class="k">return</span> <span class="n">plugin</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">()</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;String URL of the git repository where the plugin repository&#39;s are stored&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNRepositoryGetUrl</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">path</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;String local path to store the given plugin repository&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNRepositoryGetRepoPath</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">full_path</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;String full path the repository&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNRepositoryGetPluginsPath</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">local_reference</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;String for the local git reference (ie &#39;master&#39;)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNRepositoryGetLocalReference</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">remote_reference</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;String for the remote git reference (ie &#39;origin&#39;)&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNRepositoryGetRemoteReference</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">plugins</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;List of RepoPlugin objects contained within this repository&quot;&quot;&quot;</span>
<span class="n">pluginlist</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNRepositoryGetPlugins</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">pluginlist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">RepoPlugin</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">result</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeRepositoryPluginList</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">del</span> <span class="n">result</span>
<span class="k">return</span> <span class="n">pluginlist</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">initialized</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Boolean True when the repository has been initialized&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNRepositoryIsInitialized</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
<div class="viewcode-block" id="RepositoryManager"><a class="viewcode-back" href="../../binaryninja.pluginmanager.RepositoryManager.html#binaryninja.pluginmanager.RepositoryManager">[docs]</a><span class="k">class</span> <span class="nc">RepositoryManager</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``RepositoryManager`` Keeps track of all the repositories and keeps the enabled_plugins.json file coherent with</span>
<span class="sd"> the plugins that are installed/uninstalled enabled/disabled</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="RepositoryManager.__init__"><a class="viewcode-back" href="../../binaryninja.pluginmanager.RepositoryManager.html#binaryninja.pluginmanager.RepositoryManager.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">&quot;RepositoryManager temporarily disabled!&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetRepositoryManager</span><span class="p">()</span></div>
<span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">repo_path</span><span class="p">):</span>
<span class="k">for</span> <span class="n">repo</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">repositories</span><span class="p">:</span>
<span class="k">if</span> <span class="n">repo_path</span> <span class="o">==</span> <span class="n">repo</span><span class="o">.</span><span class="n">path</span><span class="p">:</span>
<span class="k">return</span> <span class="n">repo</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">()</span>
<div class="viewcode-block" id="RepositoryManager.check_for_updates"><a class="viewcode-back" href="../../binaryninja.pluginmanager-module.html#binaryninja.pluginmanager.RepositoryManager.check_for_updates">[docs]</a> <span class="k">def</span> <span class="nf">check_for_updates</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Check for updates for all managed Repository objects&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNRepositoryManagerCheckForUpdates</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">repositories</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;List of Repository objects being managed&quot;&quot;&quot;</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">repos</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNRepositoryManagerGetRepositories</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Repository</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">repos</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeRepositoryManagerRepositoriesList</span><span class="p">(</span><span class="n">repos</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">plugins</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;List of all RepoPlugins in each repository&quot;&quot;&quot;</span>
<span class="n">plgs</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">repo</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">repositories</span><span class="p">:</span>
<span class="n">plgs</span><span class="p">[</span><span class="n">repo</span><span class="o">.</span><span class="n">path</span><span class="p">]</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">plugins</span>
<span class="k">return</span> <span class="n">plgs</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">default_repository</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Gets the default Repository&quot;&quot;&quot;</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="k">return</span> <span class="n">Repository</span><span class="p">(</span><span class="n">handle</span><span class="o">=</span><span class="n">core</span><span class="o">.</span><span class="n">BNRepositoryManagerGetDefaultRepository</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">))</span>
<div class="viewcode-block" id="RepositoryManager.enable_plugin"><a class="viewcode-back" href="../../binaryninja.pluginmanager-module.html#binaryninja.pluginmanager.RepositoryManager.enable_plugin">[docs]</a> <span class="k">def</span> <span class="nf">enable_plugin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">plugin</span><span class="p">,</span> <span class="n">install</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">repo</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``enable_plugin`` Enables the installed plugin &#39;plugin&#39;, optionally installing the plugin if `install` is set to</span>
<span class="sd"> True (default), and optionally using the non-default repository.</span>
<span class="sd"> :param str name: Name of the plugin to enable</span>
<span class="sd"> :param Boolean install: Optionally install the repo, defaults to True.</span>
<span class="sd"> :param str repo: Optional, specify a repository other than the default repository.</span>
<span class="sd"> :return: Boolean value True if the plugin was successfully enabled, False otherwise</span>
<span class="sd"> :rtype: Boolean</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; mgr = RepositoryManager()</span>
<span class="sd"> &gt;&gt;&gt; mgr.enable_plugin(&#39;binaryninja-bookmarks&#39;)</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">install</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">install_plugin</span><span class="p">(</span><span class="n">plugin</span><span class="p">,</span> <span class="n">repo</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">if</span> <span class="n">repo</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">repo</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_repository</span>
<span class="n">repopath</span> <span class="o">=</span> <span class="n">repo</span>
<span class="n">pluginpath</span> <span class="o">=</span> <span class="n">plugin</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">repopath</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">path</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">plugin</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">pluginpath</span> <span class="o">=</span> <span class="n">plugin</span><span class="o">.</span><span class="n">path</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNRepositoryManagerEnablePlugin</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">repopath</span><span class="p">,</span> <span class="n">pluginpath</span><span class="p">)</span></div>
<div class="viewcode-block" id="RepositoryManager.disable_plugin"><a class="viewcode-back" href="../../binaryninja.pluginmanager-module.html#binaryninja.pluginmanager.RepositoryManager.disable_plugin">[docs]</a> <span class="k">def</span> <span class="nf">disable_plugin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">plugin</span><span class="p">,</span> <span class="n">repo</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``disable_plugin`` Disable the specified plugin, pluginpath</span>
<span class="sd"> :param Repository or str repo: Repository containing the plugin to disable</span>
<span class="sd"> :param RepoPlugin or str plugin: RepoPlugin to disable</span>
<span class="sd"> :return: Boolean value True if the plugin was successfully disabled, False otherwise</span>
<span class="sd"> :rtype: Boolean</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; mgr = RepositoryManager()</span>
<span class="sd"> &gt;&gt;&gt; mgr.disable_plugin(&#39;binaryninja-bookmarks&#39;)</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">repo</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">repo</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_repository</span>
<span class="n">repopath</span> <span class="o">=</span> <span class="n">repo</span>
<span class="n">pluginpath</span> <span class="o">=</span> <span class="n">plugin</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">repopath</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">path</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">plugin</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">pluginpath</span> <span class="o">=</span> <span class="n">plugin</span><span class="o">.</span><span class="n">path</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNRepositoryManagerDisablePlugin</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">repopath</span><span class="p">,</span> <span class="n">pluginpath</span><span class="p">)</span></div>
<div class="viewcode-block" id="RepositoryManager.install_plugin"><a class="viewcode-back" href="../../binaryninja.pluginmanager-module.html#binaryninja.pluginmanager.RepositoryManager.install_plugin">[docs]</a> <span class="k">def</span> <span class="nf">install_plugin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">plugin</span><span class="p">,</span> <span class="n">repo</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``install_plugin`` install the specified plugin, pluginpath</span>
<span class="sd"> :param Repository or str repo: Repository containing the plugin to install</span>
<span class="sd"> :param RepoPlugin or str plugin: RepoPlugin to install</span>
<span class="sd"> :return: Boolean value True if the plugin was successfully installed, False otherwise</span>
<span class="sd"> :rtype: Boolean</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; mgr = RepositoryManager()</span>
<span class="sd"> &gt;&gt;&gt; mgr.install_plugin(&#39;binaryninja-bookmarks&#39;)</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">repo</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">repo</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_repository</span>
<span class="n">repopath</span> <span class="o">=</span> <span class="n">repo</span>
<span class="n">pluginpath</span> <span class="o">=</span> <span class="n">plugin</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">repopath</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">path</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">plugin</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">pluginpath</span> <span class="o">=</span> <span class="n">plugin</span><span class="o">.</span><span class="n">path</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNRepositoryManagerInstallPlugin</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">repopath</span><span class="p">,</span> <span class="n">pluginpath</span><span class="p">)</span></div>
<div class="viewcode-block" id="RepositoryManager.uninstall_plugin"><a class="viewcode-back" href="../../binaryninja.pluginmanager-module.html#binaryninja.pluginmanager.RepositoryManager.uninstall_plugin">[docs]</a> <span class="k">def</span> <span class="nf">uninstall_plugin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">plugin</span><span class="p">,</span> <span class="n">repo</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``uninstall_plugin`` uninstall the specified plugin, pluginpath</span>
<span class="sd"> :param Repository or str repo: Repository containing the plugin to uninstall</span>
<span class="sd"> :param RepoPlugin or str plugin: RepoPlugin to uninstall</span>
<span class="sd"> :return: Boolean value True if the plugin was successfully uninstalled, False otherwise</span>
<span class="sd"> :rtype: Boolean</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; mgr = RepositoryManager()</span>
<span class="sd"> &gt;&gt;&gt; mgr.uninstall_plugin(&#39;binaryninja-bookmarks&#39;)</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">repo</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">repo</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_repository</span>
<span class="n">repopath</span> <span class="o">=</span> <span class="n">repo</span>
<span class="n">pluginpath</span> <span class="o">=</span> <span class="n">plugin</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">repopath</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">path</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">plugin</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">pluginpath</span> <span class="o">=</span> <span class="n">plugin</span><span class="o">.</span><span class="n">path</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNRepositoryManagerUninstallPlugin</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">repopath</span><span class="p">,</span> <span class="n">pluginpath</span><span class="p">)</span></div>
<div class="viewcode-block" id="RepositoryManager.update_plugin"><a class="viewcode-back" href="../../binaryninja.pluginmanager-module.html#binaryninja.pluginmanager.RepositoryManager.update_plugin">[docs]</a> <span class="k">def</span> <span class="nf">update_plugin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">plugin</span><span class="p">,</span> <span class="n">repo</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``update_plugin`` update the specified plugin, pluginpath</span>
<span class="sd"> :param Repository or str repo: Repository containing the plugin to update</span>
<span class="sd"> :param RepoPlugin or str plugin: RepoPlugin to update</span>
<span class="sd"> :return: Boolean value True if the plugin was successfully updated, False otherwise</span>
<span class="sd"> :rtype: Boolean</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; mgr = RepositoryManager()</span>
<span class="sd"> &gt;&gt;&gt; mgr.update_plugin(&#39;binaryninja-bookmarks&#39;)</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">repo</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">repo</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_repository</span>
<span class="n">repopath</span> <span class="o">=</span> <span class="n">repo</span>
<span class="n">pluginpath</span> <span class="o">=</span> <span class="n">plugin</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">repopath</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">path</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">plugin</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">pluginpath</span> <span class="o">=</span> <span class="n">plugin</span><span class="o">.</span><span class="n">path</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNRepositoryManagerUpdatePlugin</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">repopath</span><span class="p">,</span> <span class="n">pluginpath</span><span class="p">)</span></div>
<div class="viewcode-block" id="RepositoryManager.add_repository"><a class="viewcode-back" href="../../binaryninja.pluginmanager-module.html#binaryninja.pluginmanager.RepositoryManager.add_repository">[docs]</a> <span class="k">def</span> <span class="nf">add_repository</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">repopath</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">localreference</span><span class="o">=</span><span class="s2">&quot;master&quot;</span><span class="p">,</span> <span class="n">remotereference</span><span class="o">=</span><span class="s2">&quot;origin&quot;</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``add_repository`` adds a new plugin repository for the manager to track.</span>
<span class="sd"> :param str url: URL to the git repository where the plugins are stored.</span>
<span class="sd"> :param str repopath: path to where the repository will be stored on disk locally</span>
<span class="sd"> :param str localreference: Optional reference to the local tracking branch typically &quot;master&quot;</span>
<span class="sd"> :param str remotereference: Optional reference to the remote tracking branch typically &quot;origin&quot;</span>
<span class="sd"> :return: Boolean value True if the repository was successfully added, False otherwise.</span>
<span class="sd"> :rtype: Boolean</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; mgr = RepositoryManager()</span>
<span class="sd"> &gt;&gt;&gt; mgr.add_repository(url=&quot;https://github.com/vector35/community-plugins.git&quot;,</span>
<span class="sd"> repopath=&quot;myrepo&quot;,</span>
<span class="sd"> localreference=&quot;master&quot;, remotereference=&quot;origin&quot;)</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">repopath</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">and</span>
<span class="nb">isinstance</span><span class="p">(</span><span class="n">localreference</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">remotereference</span><span class="p">,</span> <span class="nb">str</span><span class="p">)):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Parameter is incorrect type&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNRepositoryManagerAddRepository</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">repopath</span><span class="p">,</span> <span class="n">localreference</span><span class="p">,</span> <span class="n">remotereference</span><span class="p">)</span></div></div>
</pre></div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,945 @@
<!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>binaryninja.scriptingprovider &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.scriptingprovider</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.scriptingprovider</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="kn">import</span> <span class="nn">code</span>
<span class="kn">import</span> <span class="nn">traceback</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">threading</span>
<span class="kn">import</span> <span class="nn">abc</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="c1"># Binary Ninja components</span>
<span class="kn">import</span> <span class="nn">binaryninja</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<span class="kn">from</span> <span class="nn">binaryninja.enums</span> <span class="k">import</span> <span class="n">ScriptingProviderExecuteResult</span><span class="p">,</span> <span class="n">ScriptingProviderInputReadyState</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">log</span>
<span class="c1"># 2-3 compatibility</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="nb">range</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">with_metaclass</span>
<span class="k">class</span> <span class="nc">_ThreadActionContext</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="n">_actions</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">func</span> <span class="o">=</span> <span class="n">func</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interpreter</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">PythonScriptingInstance</span><span class="o">.</span><span class="n">_interpreter</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interpreter</span> <span class="o">=</span> <span class="n">PythonScriptingInstance</span><span class="o">.</span><span class="n">_interpreter</span><span class="o">.</span><span class="n">value</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_actions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">callback</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)(</span><span class="k">lambda</span> <span class="n">ctxt</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">old_interpreter</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">PythonScriptingInstance</span><span class="o">.</span><span class="n">_interpreter</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">):</span>
<span class="n">old_interpreter</span> <span class="o">=</span> <span class="n">PythonScriptingInstance</span><span class="o">.</span><span class="n">_interpreter</span><span class="o">.</span><span class="n">value</span>
<span class="n">PythonScriptingInstance</span><span class="o">.</span><span class="n">_interpreter</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">interpreter</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">()</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">PythonScriptingInstance</span><span class="o">.</span><span class="n">_interpreter</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">old_interpreter</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_actions</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<div class="viewcode-block" id="ScriptingOutputListener"><a class="viewcode-back" href="../../binaryninja.scriptingprovider.ScriptingOutputListener.html#binaryninja.scriptingprovider.ScriptingOutputListener">[docs]</a><span class="k">class</span> <span class="nc">ScriptingOutputListener</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">_register</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNScriptingOutputListener</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">context</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">output</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">output</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_output</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">error</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">error</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_error</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">inputReadyStateChanged</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">inputReadyStateChanged</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_input_ready_state_changed</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterScriptingInstanceOutputListener</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_unregister</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNUnregisterScriptingInstanceOutputListener</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_output</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">notify_output</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">_error</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">notify_error</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">_input_ready_state_changed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">state</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">notify_input_ready_state_changed</span><span class="p">(</span><span class="n">state</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<div class="viewcode-block" id="ScriptingOutputListener.notify_output"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingOutputListener.notify_output">[docs]</a> <span class="k">def</span> <span class="nf">notify_output</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="ScriptingOutputListener.notify_error"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingOutputListener.notify_error">[docs]</a> <span class="k">def</span> <span class="nf">notify_error</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="ScriptingOutputListener.notify_input_ready_state_changed"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingOutputListener.notify_input_ready_state_changed">[docs]</a> <span class="k">def</span> <span class="nf">notify_input_ready_state_changed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">):</span>
<span class="k">pass</span></div></div>
<div class="viewcode-block" id="ScriptingInstance"><a class="viewcode-back" href="../../binaryninja.scriptingprovider.ScriptingInstance.html#binaryninja.scriptingprovider.ScriptingInstance">[docs]</a><span class="k">class</span> <span class="nc">ScriptingInstance</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="ScriptingInstance.__init__"><a class="viewcode-back" href="../../binaryninja.scriptingprovider.ScriptingInstance.html#binaryninja.scriptingprovider.ScriptingInstance.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">provider</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">handle</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNScriptingInstanceCallbacks</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">context</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">destroyInstance</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">destroyInstance</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_destroy_instance</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">executeScriptInput</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">executeScriptInput</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_execute_script_input</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">cancelScriptInput</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">cancelScriptInput</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_cancel_script_input</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">setCurrentBinaryView</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">setCurrentBinaryView</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_set_current_binary_view</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">setCurrentFunction</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">setCurrentFunction</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_set_current_function</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">setCurrentBasicBlock</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">setCurrentBasicBlock</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_set_current_basic_block</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">setCurrentAddress</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">setCurrentAddress</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_set_current_address</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">setCurrentSelection</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">setCurrentSelection</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_set_current_selection</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNInitScriptingInstance</span><span class="p">(</span><span class="n">provider</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">handle_of_type</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNScriptingInstance</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">listeners</span> <span class="o">=</span> <span class="p">[]</span></div>
<span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeScriptingInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_destroy_instance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">perform_destroy_instance</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">_execute_script_input</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">perform_execute_script_input</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="n">ScriptingProviderExecuteResult</span><span class="o">.</span><span class="n">InvalidScriptInput</span>
<span class="k">def</span> <span class="nf">_cancel_script_input</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">perform_cancel_script_input</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="n">ScriptingProviderExecuteResult</span><span class="o">.</span><span class="n">ScriptExecutionCancelled</span>
<span class="k">def</span> <span class="nf">_set_current_binary_view</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">view</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewViewReference</span><span class="p">(</span><span class="n">view</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">perform_set_current_binary_view</span><span class="p">(</span><span class="n">view</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">_set_current_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">func</span><span class="p">:</span>
<span class="n">func</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">function</span><span class="o">.</span><span class="n">Function</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNNewFunctionReference</span><span class="p">(</span><span class="n">func</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">func</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">perform_set_current_function</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">_set_current_basic_block</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">block</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">block</span><span class="p">:</span>
<span class="n">func</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetBasicBlockFunction</span><span class="p">(</span><span class="n">block</span><span class="p">)</span>
<span class="k">if</span> <span class="n">func</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">block</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">block</span> <span class="o">=</span> <span class="n">binaryninja</span><span class="o">.</span><span class="n">basicblock</span><span class="o">.</span><span class="n">BasicBlock</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewBasicBlockReference</span><span class="p">(</span><span class="n">block</span><span class="p">),</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">binaryview</span><span class="o">.</span><span class="n">BinaryView</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetFunctionData</span><span class="p">(</span><span class="n">func</span><span class="p">)))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeFunction</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">block</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">perform_set_current_basic_block</span><span class="p">(</span><span class="n">block</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">_set_current_address</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">addr</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">perform_set_current_address</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">_set_current_selection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">begin</span><span class="p">,</span> <span class="n">end</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">perform_set_current_selection</span><span class="p">(</span><span class="n">begin</span><span class="p">,</span> <span class="n">end</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<div class="viewcode-block" id="ScriptingInstance.perform_destroy_instance"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingInstance.perform_destroy_instance">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_destroy_instance</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span></div>
<div class="viewcode-block" id="ScriptingInstance.perform_execute_script_input"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingInstance.perform_execute_script_input">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_execute_script_input</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="k">return</span> <span class="n">ScriptingProviderExecuteResult</span><span class="o">.</span><span class="n">InvalidScriptInput</span></div>
<div class="viewcode-block" id="ScriptingInstance.perform_cancel_script_input"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingInstance.perform_cancel_script_input">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_cancel_script_input</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">ScriptingProviderExecuteResult</span><span class="o">.</span><span class="n">ScriptExecutionCancelled</span></div>
<div class="viewcode-block" id="ScriptingInstance.perform_set_current_binary_view"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingInstance.perform_set_current_binary_view">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_set_current_binary_view</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">view</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span></div>
<div class="viewcode-block" id="ScriptingInstance.perform_set_current_function"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingInstance.perform_set_current_function">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_set_current_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span></div>
<div class="viewcode-block" id="ScriptingInstance.perform_set_current_basic_block"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingInstance.perform_set_current_basic_block">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_set_current_basic_block</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">block</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span></div>
<div class="viewcode-block" id="ScriptingInstance.perform_set_current_address"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingInstance.perform_set_current_address">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_set_current_address</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">addr</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span></div>
<div class="viewcode-block" id="ScriptingInstance.perform_set_current_selection"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingInstance.perform_set_current_selection">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_set_current_selection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">begin</span><span class="p">,</span> <span class="n">end</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span></div>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">input_ready_state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetScriptingInstanceInputReadyState</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="nd">@input_ready_state</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">input_ready_state</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNNotifyInputReadyStateForScriptingInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">value</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<div class="viewcode-block" id="ScriptingInstance.output"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingInstance.output">[docs]</a> <span class="k">def</span> <span class="nf">output</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNNotifyOutputForScriptingInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
<div class="viewcode-block" id="ScriptingInstance.error"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingInstance.error">[docs]</a> <span class="k">def</span> <span class="nf">error</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNNotifyErrorForScriptingInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
<div class="viewcode-block" id="ScriptingInstance.execute_script_input"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingInstance.execute_script_input">[docs]</a> <span class="k">def</span> <span class="nf">execute_script_input</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNExecuteScriptInput</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
<div class="viewcode-block" id="ScriptingInstance.cancel_script_input"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingInstance.cancel_script_input">[docs]</a> <span class="k">def</span> <span class="nf">cancel_script_input</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCancelScriptInput</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span></div>
<div class="viewcode-block" id="ScriptingInstance.set_current_binary_view"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingInstance.set_current_binary_view">[docs]</a> <span class="k">def</span> <span class="nf">set_current_binary_view</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">view</span><span class="p">):</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">view</span><span class="o">.</span><span class="n">handle</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetScriptingInstanceCurrentBinaryView</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">view</span><span class="p">)</span></div>
<div class="viewcode-block" id="ScriptingInstance.set_current_function"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingInstance.set_current_function">[docs]</a> <span class="k">def</span> <span class="nf">set_current_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="k">if</span> <span class="n">func</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">func</span> <span class="o">=</span> <span class="n">func</span><span class="o">.</span><span class="n">handle</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetScriptingInstanceCurrentFunction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">func</span><span class="p">)</span></div>
<div class="viewcode-block" id="ScriptingInstance.set_current_basic_block"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingInstance.set_current_basic_block">[docs]</a> <span class="k">def</span> <span class="nf">set_current_basic_block</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">block</span><span class="p">):</span>
<span class="k">if</span> <span class="n">block</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">block</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">handle</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetScriptingInstanceCurrentBasicBlock</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">block</span><span class="p">)</span></div>
<div class="viewcode-block" id="ScriptingInstance.set_current_address"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingInstance.set_current_address">[docs]</a> <span class="k">def</span> <span class="nf">set_current_address</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">addr</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetScriptingInstanceCurrentAddress</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">addr</span><span class="p">)</span></div>
<div class="viewcode-block" id="ScriptingInstance.set_current_selection"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingInstance.set_current_selection">[docs]</a> <span class="k">def</span> <span class="nf">set_current_selection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">begin</span><span class="p">,</span> <span class="n">end</span><span class="p">):</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetScriptingInstanceCurrentSelection</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">begin</span><span class="p">,</span> <span class="n">end</span><span class="p">)</span></div>
<div class="viewcode-block" id="ScriptingInstance.register_output_listener"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingInstance.register_output_listener">[docs]</a> <span class="k">def</span> <span class="nf">register_output_listener</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">listener</span><span class="p">):</span>
<span class="n">listener</span><span class="o">.</span><span class="n">_register</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">listeners</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">listener</span><span class="p">)</span></div>
<div class="viewcode-block" id="ScriptingInstance.unregister_output_listener"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingInstance.unregister_output_listener">[docs]</a> <span class="k">def</span> <span class="nf">unregister_output_listener</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">listener</span><span class="p">):</span>
<span class="k">if</span> <span class="n">listener</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">listeners</span><span class="p">:</span>
<span class="n">listener</span><span class="o">.</span><span class="n">_unregister</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">listeners</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">listener</span><span class="p">)</span></div></div>
<span class="k">class</span> <span class="nc">_ScriptingProviderMetaclass</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;List all ScriptingProvider types (read-only)&quot;&quot;&quot;</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">types</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetScriptingProviderList</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ScriptingProvider</span><span class="p">(</span><span class="n">types</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeScriptingProviderList</span><span class="p">(</span><span class="n">types</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">types</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetScriptingProviderList</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="k">yield</span> <span class="n">ScriptingProvider</span><span class="p">(</span><span class="n">types</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeScriptingProviderList</span><span class="p">(</span><span class="n">types</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">provider</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetScriptingProviderByName</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
<span class="k">if</span> <span class="n">provider</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="s2">&quot;&#39;</span><span class="si">%s</span><span class="s2">&#39; is not a valid scripting provider&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
<span class="k">return</span> <span class="n">ScriptingProvider</span><span class="p">(</span><span class="n">provider</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="nb">type</span><span class="o">.</span><span class="fm">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="s2">&quot;attribute &#39;</span><span class="si">%s</span><span class="s2">&#39; is read only&quot;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
<div class="viewcode-block" id="ScriptingProvider"><a class="viewcode-back" href="../../binaryninja.scriptingprovider.ScriptingProvider.html#binaryninja.scriptingprovider.ScriptingProvider">[docs]</a><span class="k">class</span> <span class="nc">ScriptingProvider</span><span class="p">(</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">_ScriptingProviderMetaclass</span><span class="p">,</span> <span class="nb">object</span><span class="p">)):</span>
<span class="n">name</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">instance_class</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_registered_providers</span> <span class="o">=</span> <span class="p">[]</span>
<div class="viewcode-block" id="ScriptingProvider.__init__"><a class="viewcode-back" href="../../binaryninja.scriptingprovider.ScriptingProvider.html#binaryninja.scriptingprovider.ScriptingProvider.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">handle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">handle_of_type</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">core</span><span class="o">.</span><span class="n">BNScriptingProvider</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetScriptingProviderName</span><span class="p">(</span><span class="n">handle</span><span class="p">)</span></div>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Allow tab completion to discover metaclass list property&quot;&quot;&quot;</span>
<span class="k">pass</span>
<div class="viewcode-block" id="ScriptingProvider.register"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingProvider.register">[docs]</a> <span class="k">def</span> <span class="nf">register</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNScriptingProviderCallbacks</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">context</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">createInstance</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">createInstance</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_create_instance</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNRegisterScriptingProvider</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_registered_providers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">_create_instance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">instance_class</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNNewScriptingInstanceReference</span><span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">handle</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)</span><span class="o">.</span><span class="n">value</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">None</span>
<div class="viewcode-block" id="ScriptingProvider.create_instance"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.ScriptingProvider.create_instance">[docs]</a> <span class="k">def</span> <span class="nf">create_instance</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCreateScriptingProviderInstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">ScriptingInstance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">result</span><span class="p">)</span></div></div>
<span class="k">class</span> <span class="nc">_PythonScriptingInstanceOutput</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">orig</span><span class="p">,</span> <span class="n">is_error</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">orig</span> <span class="o">=</span> <span class="n">orig</span>
<span class="bp">self</span><span class="o">.</span><span class="n">is_error</span> <span class="o">=</span> <span class="n">is_error</span>
<span class="bp">self</span><span class="o">.</span><span class="n">buffer</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">encoding</span> <span class="o">=</span> <span class="s1">&#39;UTF-8&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">errors</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mode</span> <span class="o">=</span> <span class="s1">&#39;w&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s1">&#39;PythonScriptingInstanceOutput&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">newlines</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">pass</span>
<span class="k">def</span> <span class="nf">closed</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">flush</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">pass</span>
<span class="k">def</span> <span class="nf">isatty</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">next</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">IOError</span><span class="p">(</span><span class="s2">&quot;File not open for reading&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">IOError</span><span class="p">(</span><span class="s2">&quot;File not open for reading&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">readinto</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">IOError</span><span class="p">(</span><span class="s2">&quot;File not open for reading&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">readlines</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">IOError</span><span class="p">(</span><span class="s2">&quot;File not open for reading&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">seek</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">pass</span>
<span class="k">def</span> <span class="nf">sofspace</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="mi">0</span>
<span class="k">def</span> <span class="nf">truncate</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">pass</span>
<span class="k">def</span> <span class="nf">tell</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">orig</span><span class="o">.</span><span class="n">tell</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">writelines</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lines</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="n">interpreter</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">PythonScriptingInstance</span><span class="o">.</span><span class="n">_interpreter</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">):</span>
<span class="n">interpreter</span> <span class="o">=</span> <span class="n">PythonScriptingInstance</span><span class="o">.</span><span class="n">_interpreter</span><span class="o">.</span><span class="n">value</span>
<span class="k">if</span> <span class="n">interpreter</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="n">log</span><span class="o">.</span><span class="n">is_output_redirected_to_log</span><span class="p">():</span>
<span class="bp">self</span><span class="o">.</span><span class="n">buffer</span> <span class="o">+=</span> <span class="n">data</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">i</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">buffer</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">buffer</span><span class="p">[:</span><span class="n">i</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">buffer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">buffer</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:]</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_error</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_info</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">orig</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">PythonScriptingInstance</span><span class="o">.</span><span class="n">_interpreter</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_error</span><span class="p">:</span>
<span class="n">interpreter</span><span class="o">.</span><span class="n">instance</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">interpreter</span><span class="o">.</span><span class="n">instance</span><span class="o">.</span><span class="n">output</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">PythonScriptingInstance</span><span class="o">.</span><span class="n">_interpreter</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">interpreter</span>
<span class="k">class</span> <span class="nc">_PythonScriptingInstanceInput</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">orig</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">orig</span> <span class="o">=</span> <span class="n">orig</span>
<span class="k">def</span> <span class="nf">isatty</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
<span class="n">interpreter</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">PythonScriptingInstance</span><span class="o">.</span><span class="n">_interpreter</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">):</span>
<span class="n">interpreter</span> <span class="o">=</span> <span class="n">PythonScriptingInstance</span><span class="o">.</span><span class="n">_interpreter</span><span class="o">.</span><span class="n">value</span>
<span class="k">if</span> <span class="n">interpreter</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">orig</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">PythonScriptingInstance</span><span class="o">.</span><span class="n">_interpreter</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">interpreter</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">PythonScriptingInstance</span><span class="o">.</span><span class="n">_interpreter</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">interpreter</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">def</span> <span class="nf">readline</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">interpreter</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">PythonScriptingInstance</span><span class="o">.</span><span class="n">_interpreter</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">):</span>
<span class="n">interpreter</span> <span class="o">=</span> <span class="n">PythonScriptingInstance</span><span class="o">.</span><span class="n">_interpreter</span><span class="o">.</span><span class="n">value</span>
<span class="k">if</span> <span class="n">interpreter</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">orig</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">result</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">interpreter</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">result</span> <span class="o">+=</span> <span class="n">data</span>
<span class="k">if</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">data</span> <span class="o">==</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">):</span>
<span class="k">break</span>
<span class="k">return</span> <span class="n">result</span>
<div class="viewcode-block" id="PythonScriptingInstance"><a class="viewcode-back" href="../../binaryninja.scriptingprovider.PythonScriptingInstance.html#binaryninja.scriptingprovider.PythonScriptingInstance">[docs]</a><span class="k">class</span> <span class="nc">PythonScriptingInstance</span><span class="p">(</span><span class="n">ScriptingInstance</span><span class="p">):</span>
<span class="n">_interpreter</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">local</span><span class="p">()</span>
<div class="viewcode-block" id="PythonScriptingInstance.InterpreterThread"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.PythonScriptingInstance.InterpreterThread">[docs]</a> <span class="k">class</span> <span class="nc">InterpreterThread</span><span class="p">(</span><span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">PythonScriptingInstance</span><span class="o">.</span><span class="n">InterpreterThread</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">instance</span> <span class="o">=</span> <span class="n">instance</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locals</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;__name__&quot;</span><span class="p">:</span> <span class="s2">&quot;__console__&quot;</span><span class="p">,</span> <span class="s2">&quot;__doc__&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> <span class="s2">&quot;binaryninja&quot;</span><span class="p">:</span> <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">[</span><span class="vm">__name__</span><span class="p">]}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interpreter</span> <span class="o">=</span> <span class="n">code</span><span class="o">.</span><span class="n">InteractiveConsole</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">event</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Event</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">daemon</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Latest selections from UI</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current_view</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current_func</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current_block</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current_addr</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current_selection_begin</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current_selection_end</span> <span class="o">=</span> <span class="mi">0</span>
<span class="c1"># Selections that were current as of last issued command</span>
<span class="bp">self</span><span class="o">.</span><span class="n">active_view</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">active_func</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">active_block</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">active_addr</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">active_selection_begin</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">active_selection_end</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;get_selected_data&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_selected_data</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;write_at_cursor&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">write_at_cursor</span>
<span class="bp">self</span><span class="o">.</span><span class="n">exit</span> <span class="o">=</span> <span class="kc">False</span>
<span class="bp">self</span><span class="o">.</span><span class="n">code</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">input</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interpreter</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="s2">&quot;from binaryninja import *&quot;</span><span class="p">)</span>
<div class="viewcode-block" id="PythonScriptingInstance.InterpreterThread.execute"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.PythonScriptingInstance.InterpreterThread.execute">[docs]</a> <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">code</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">code</span> <span class="o">=</span> <span class="n">code</span>
<span class="bp">self</span><span class="o">.</span><span class="n">event</span><span class="o">.</span><span class="n">set</span><span class="p">()</span></div>
<div class="viewcode-block" id="PythonScriptingInstance.InterpreterThread.add_input"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.PythonScriptingInstance.InterpreterThread.add_input">[docs]</a> <span class="k">def</span> <span class="nf">add_input</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">input</span> <span class="o">+=</span> <span class="n">data</span>
<span class="bp">self</span><span class="o">.</span><span class="n">event</span><span class="o">.</span><span class="n">set</span><span class="p">()</span></div>
<div class="viewcode-block" id="PythonScriptingInstance.InterpreterThread.end"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.PythonScriptingInstance.InterpreterThread.end">[docs]</a> <span class="k">def</span> <span class="nf">end</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">exit</span> <span class="o">=</span> <span class="kc">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">event</span><span class="o">.</span><span class="n">set</span><span class="p">()</span></div>
<div class="viewcode-block" id="PythonScriptingInstance.InterpreterThread.read"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.PythonScriptingInstance.InterpreterThread.read">[docs]</a> <span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
<span class="k">while</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">exit</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">input</span><span class="p">)</span> <span class="o">&gt;</span> <span class="n">size</span><span class="p">:</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">input</span><span class="p">[:</span><span class="n">size</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">input</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">input</span><span class="p">[</span><span class="n">size</span><span class="p">:]</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">input</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">input</span>
<span class="bp">self</span><span class="o">.</span><span class="n">input</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">return</span> <span class="n">result</span>
<span class="bp">self</span><span class="o">.</span><span class="n">instance</span><span class="o">.</span><span class="n">input_ready_state</span> <span class="o">=</span> <span class="n">ScriptingProviderInputReadyState</span><span class="o">.</span><span class="n">ReadyForScriptProgramInput</span>
<span class="bp">self</span><span class="o">.</span><span class="n">event</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">event</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
<span class="k">return</span> <span class="s2">&quot;&quot;</span></div>
<div class="viewcode-block" id="PythonScriptingInstance.InterpreterThread.run"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.PythonScriptingInstance.InterpreterThread.run">[docs]</a> <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">while</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">exit</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">event</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">event</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">exit</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">code</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">instance</span><span class="o">.</span><span class="n">input_ready_state</span> <span class="o">=</span> <span class="n">ScriptingProviderInputReadyState</span><span class="o">.</span><span class="n">NotReadyForInput</span>
<span class="n">code</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">code</span>
<span class="bp">self</span><span class="o">.</span><span class="n">code</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">PythonScriptingInstance</span><span class="o">.</span><span class="n">_interpreter</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="bp">self</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">active_view</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_view</span>
<span class="bp">self</span><span class="o">.</span><span class="n">active_func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_func</span>
<span class="bp">self</span><span class="o">.</span><span class="n">active_block</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_block</span>
<span class="bp">self</span><span class="o">.</span><span class="n">active_addr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_addr</span>
<span class="bp">self</span><span class="o">.</span><span class="n">active_selection_begin</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_selection_begin</span>
<span class="bp">self</span><span class="o">.</span><span class="n">active_selection_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_selection_end</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;current_view&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_view</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;bv&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_view</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;current_function&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_func</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;current_basic_block&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_block</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;current_address&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_addr</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;here&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_addr</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;current_selection&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">active_selection_begin</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_selection_end</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_func</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;current_llil&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;current_mlil&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;current_llil&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_func</span><span class="o">.</span><span class="n">llil</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;current_mlil&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_func</span><span class="o">.</span><span class="n">mlil</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">code</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interpreter</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">&#39;charmap&#39;</span><span class="p">))</span>
<span class="n">tryNavigate</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;here&quot;</span><span class="p">],</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;current_address&quot;</span><span class="p">],</span> <span class="nb">str</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;here&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_view</span><span class="o">.</span><span class="n">parse_expression</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;here&quot;</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_addr</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
<span class="n">tryNavigate</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">if</span> <span class="n">tryNavigate</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;here&quot;</span><span class="p">]</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_addr</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_view</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">navigate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">active_view</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">view</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;here&quot;</span><span class="p">]):</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;Address 0x</span><span class="si">%x</span><span class="s2"> is not valid for the current view</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;here&quot;</span><span class="p">])</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;current_address&quot;</span><span class="p">]</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_addr</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_view</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">navigate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">active_view</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">view</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;current_address&quot;</span><span class="p">]):</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;Address 0x</span><span class="si">%x</span><span class="s2"> is not valid for the current view</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">locals</span><span class="p">[</span><span class="s2">&quot;current_address&quot;</span><span class="p">])</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">active_view</span><span class="o">.</span><span class="n">update_analysis</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">traceback</span><span class="o">.</span><span class="n">print_exc</span><span class="p">()</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">PythonScriptingInstance</span><span class="o">.</span><span class="n">_interpreter</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">instance</span><span class="o">.</span><span class="n">input_ready_state</span> <span class="o">=</span> <span class="n">ScriptingProviderInputReadyState</span><span class="o">.</span><span class="n">ReadyForScriptExecution</span></div>
<div class="viewcode-block" id="PythonScriptingInstance.InterpreterThread.get_selected_data"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.PythonScriptingInstance.InterpreterThread.get_selected_data">[docs]</a> <span class="k">def</span> <span class="nf">get_selected_data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_view</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">length</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_selection_end</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_selection_begin</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_view</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">active_selection_begin</span><span class="p">,</span> <span class="n">length</span><span class="p">)</span></div>
<div class="viewcode-block" id="PythonScriptingInstance.InterpreterThread.write_at_cursor"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.PythonScriptingInstance.InterpreterThread.write_at_cursor">[docs]</a> <span class="k">def</span> <span class="nf">write_at_cursor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_view</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="mi">0</span>
<span class="n">selected_length</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_selection_end</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_selection_begin</span>
<span class="n">data</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="k">if</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">==</span> <span class="n">selected_length</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">selected_length</span> <span class="o">==</span> <span class="mi">0</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_view</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">active_selection_begin</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">active_view</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">active_selection_begin</span><span class="p">,</span> <span class="n">selected_length</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">active_view</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">active_selection_begin</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="PythonScriptingInstance.__init__"><a class="viewcode-back" href="../../binaryninja.scriptingprovider.PythonScriptingInstance.html#binaryninja.scriptingprovider.PythonScriptingInstance.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">provider</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">PythonScriptingInstance</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">provider</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interpreter</span> <span class="o">=</span> <span class="n">PythonScriptingInstance</span><span class="o">.</span><span class="n">InterpreterThread</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interpreter</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">queued_input</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">input_ready_state</span> <span class="o">=</span> <span class="n">ScriptingProviderInputReadyState</span><span class="o">.</span><span class="n">ReadyForScriptExecution</span></div>
<div class="viewcode-block" id="PythonScriptingInstance.perform_destroy_instance"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.PythonScriptingInstance.perform_destroy_instance">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_destroy_instance</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interpreter</span><span class="o">.</span><span class="n">end</span><span class="p">()</span></div>
<div class="viewcode-block" id="PythonScriptingInstance.perform_execute_script_input"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.PythonScriptingInstance.perform_execute_script_input">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_execute_script_input</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">input_ready_state</span> <span class="o">==</span> <span class="n">ScriptingProviderInputReadyState</span><span class="o">.</span><span class="n">NotReadyForInput</span><span class="p">:</span>
<span class="k">return</span> <span class="n">ScriptingProviderExecuteResult</span><span class="o">.</span><span class="n">InvalidScriptInput</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">input_ready_state</span> <span class="o">==</span> <span class="n">ScriptingProviderInputReadyState</span><span class="o">.</span><span class="n">ReadyForScriptProgramInput</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="n">ScriptingProviderExecuteResult</span><span class="o">.</span><span class="n">SuccessfulScriptExecution</span>
<span class="bp">self</span><span class="o">.</span><span class="n">input_ready_state</span> <span class="o">=</span> <span class="n">ScriptingProviderInputReadyState</span><span class="o">.</span><span class="n">NotReadyForInput</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interpreter</span><span class="o">.</span><span class="n">add_input</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
<span class="k">return</span> <span class="n">ScriptingProviderExecuteResult</span><span class="o">.</span><span class="n">SuccessfulScriptExecution</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">code</span><span class="o">.</span><span class="n">compile_command</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">code</span><span class="o">.</span><span class="n">compile_command</span><span class="p">(</span><span class="n">text</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">&quot;charmap&quot;</span><span class="p">))</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">result</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># Command is not complete, ask for more input</span>
<span class="k">return</span> <span class="n">ScriptingProviderExecuteResult</span><span class="o">.</span><span class="n">IncompleteScriptInput</span>
<span class="bp">self</span><span class="o">.</span><span class="n">input_ready_state</span> <span class="o">=</span> <span class="n">ScriptingProviderInputReadyState</span><span class="o">.</span><span class="n">NotReadyForInput</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interpreter</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
<span class="k">return</span> <span class="n">ScriptingProviderExecuteResult</span><span class="o">.</span><span class="n">SuccessfulScriptExecution</span></div>
<div class="viewcode-block" id="PythonScriptingInstance.perform_cancel_script_input"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.PythonScriptingInstance.perform_cancel_script_input">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_cancel_script_input</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">for</span> <span class="n">tid</span><span class="p">,</span> <span class="n">tobj</span> <span class="ow">in</span> <span class="n">threading</span><span class="o">.</span><span class="n">_active</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="n">tobj</span> <span class="ow">is</span> <span class="bp">self</span><span class="o">.</span><span class="n">interpreter</span><span class="p">:</span>
<span class="k">if</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">pythonapi</span><span class="o">.</span><span class="n">PyThreadState_SetAsyncExc</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_long</span><span class="p">(</span><span class="n">tid</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">py_object</span><span class="p">(</span><span class="ne">KeyboardInterrupt</span><span class="p">))</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">ctypes</span><span class="o">.</span><span class="n">pythonapi</span><span class="o">.</span><span class="n">PyThreadState_SetAsyncExc</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_long</span><span class="p">(</span><span class="n">tid</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">break</span></div>
<div class="viewcode-block" id="PythonScriptingInstance.perform_set_current_binary_view"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.PythonScriptingInstance.perform_set_current_binary_view">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_set_current_binary_view</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">view</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interpreter</span><span class="o">.</span><span class="n">current_view</span> <span class="o">=</span> <span class="n">view</span></div>
<div class="viewcode-block" id="PythonScriptingInstance.perform_set_current_function"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.PythonScriptingInstance.perform_set_current_function">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_set_current_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interpreter</span><span class="o">.</span><span class="n">current_func</span> <span class="o">=</span> <span class="n">func</span></div>
<div class="viewcode-block" id="PythonScriptingInstance.perform_set_current_basic_block"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.PythonScriptingInstance.perform_set_current_basic_block">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_set_current_basic_block</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">block</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interpreter</span><span class="o">.</span><span class="n">current_block</span> <span class="o">=</span> <span class="n">block</span></div>
<div class="viewcode-block" id="PythonScriptingInstance.perform_set_current_address"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.PythonScriptingInstance.perform_set_current_address">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_set_current_address</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">addr</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interpreter</span><span class="o">.</span><span class="n">current_addr</span> <span class="o">=</span> <span class="n">addr</span></div>
<div class="viewcode-block" id="PythonScriptingInstance.perform_set_current_selection"><a class="viewcode-back" href="../../binaryninja.scriptingprovider-module.html#binaryninja.scriptingprovider.PythonScriptingInstance.perform_set_current_selection">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_set_current_selection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">begin</span><span class="p">,</span> <span class="n">end</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interpreter</span><span class="o">.</span><span class="n">current_selection_begin</span> <span class="o">=</span> <span class="n">begin</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interpreter</span><span class="o">.</span><span class="n">current_selection_end</span> <span class="o">=</span> <span class="n">end</span></div></div>
<div class="viewcode-block" id="PythonScriptingProvider"><a class="viewcode-back" href="../../binaryninja.scriptingprovider.PythonScriptingProvider.html#binaryninja.scriptingprovider.PythonScriptingProvider">[docs]</a><span class="k">class</span> <span class="nc">PythonScriptingProvider</span><span class="p">(</span><span class="n">ScriptingProvider</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;Python&quot;</span>
<span class="n">instance_class</span> <span class="o">=</span> <span class="n">PythonScriptingInstance</span></div>
<span class="n">PythonScriptingProvider</span><span class="p">()</span><span class="o">.</span><span class="n">register</span><span class="p">()</span>
<span class="c1"># Wrap stdin/stdout/stderr for Python scripting provider implementation</span>
<span class="n">original_stdin</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span>
<span class="n">original_stdout</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span>
<span class="n">original_stderr</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span>
<div class="viewcode-block" id="redirect_stdio"><a class="viewcode-back" href="../../binaryninja.scriptingprovider.redirect_stdio.html#binaryninja.scriptingprovider.redirect_stdio">[docs]</a><span class="k">def</span> <span class="nf">redirect_stdio</span><span class="p">():</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stdin</span> <span class="o">=</span> <span class="n">_PythonScriptingInstanceInput</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">)</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span> <span class="o">=</span> <span class="n">_PythonScriptingInstanceOutput</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span> <span class="o">=</span> <span class="n">_PythonScriptingInstanceOutput</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="n">sys</span><span class="o">.</span><span class="n">excepthook</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">__excepthook__</span></div>
</pre></div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,433 @@
<!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>binaryninja.settings &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.settings</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.settings</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="c1"># Binary Ninja components</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<span class="c1"># 2-3 compatibility</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="nb">range</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">pyNativeStr</span>
<span class="kn">from</span> <span class="nn">binaryninja.enums</span> <span class="k">import</span> <span class="n">SettingsScope</span>
<div class="viewcode-block" id="Settings"><a class="viewcode-back" href="../../binaryninja.settings.Settings.html#binaryninja.downloadprovider.Settings">[docs]</a><span class="k">class</span> <span class="nc">Settings</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="Settings.__init__"><a class="viewcode-back" href="../../binaryninja.settings.Settings.html#binaryninja.downloadprovider.Settings.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">registry_id</span> <span class="o">=</span> <span class="s2">&quot;default&quot;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span> <span class="o">=</span> <span class="n">registry_id</span></div>
<div class="viewcode-block" id="Settings.register_group"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.register_group">[docs]</a> <span class="k">def</span> <span class="nf">register_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">group</span><span class="p">,</span> <span class="n">title</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``register_group`` registers a group for use with this Settings registry. Groups provide a simple way to organize settings.</span>
<span class="sd"> :param str group: a unique identifier</span>
<span class="sd"> :param str title: a user friendly name appropriate for UI presentation</span>
<span class="sd"> :return: True on success, False on failure.</span>
<span class="sd"> :rtype: bool</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; Settings().register_group(&quot;solver&quot;, &quot;Solver&quot;)</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsRegisterGroup</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="n">group</span><span class="p">,</span> <span class="n">title</span><span class="p">)</span></div>
<div class="viewcode-block" id="Settings.register_setting"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.register_setting">[docs]</a> <span class="k">def</span> <span class="nf">register_setting</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">properties</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``register_setting`` registers a new setting with this Settings registry.</span>
<span class="sd"> :param str id: a unique setting identifier in the form &lt;group&gt;.&lt;id&gt;</span>
<span class="sd"> :param str properties: a JSON string describes the setting schema</span>
<span class="sd"> :return: True on success, False on failure.</span>
<span class="sd"> :rtype: bool</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; Settings().register_group(&quot;solver&quot;, &quot;Solver&quot;)</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt; Settings().register_setting(&quot;solver.basicBlockSlicing&quot;, &#39;{&quot;description&quot; : &quot;Enable the basic block slicing in the solver.&quot;, &quot;title&quot; : &quot;Basic Block Slicing&quot;, &quot;default&quot; : true, &quot;type&quot; : &quot;boolean&quot;, &quot;id&quot; : &quot;basicBlockSlicing&quot;}&#39;)</span>
<span class="sd"> True</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsRegisterSetting</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">properties</span><span class="p">)</span></div>
<div class="viewcode-block" id="Settings.update_property"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.update_property">[docs]</a> <span class="k">def</span> <span class="nf">update_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">setting_property</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsUpdateProperty</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="n">tr</span><span class="p">(),</span> <span class="nb">id</span><span class="p">,</span> <span class="n">setting_property</span><span class="p">)</span></div>
<div class="viewcode-block" id="Settings.get_schema"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.get_schema">[docs]</a> <span class="k">def</span> <span class="nf">get_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsGetSchema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">)</span></div>
<div class="viewcode-block" id="Settings.copy_value"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.copy_value">[docs]</a> <span class="k">def</span> <span class="nf">copy_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dest_registry_id</span><span class="p">,</span> <span class="nb">id</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsCopyValue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="n">dest_registry_id</span><span class="p">,</span> <span class="nb">id</span><span class="p">)</span></div>
<div class="viewcode-block" id="Settings.reset"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.reset">[docs]</a> <span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">scope</span> <span class="o">=</span> <span class="n">SettingsScope</span><span class="o">.</span><span class="n">SettingsAutoScope</span><span class="p">):</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">view</span><span class="o">.</span><span class="n">handle</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsReset</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">scope</span><span class="p">)</span></div>
<div class="viewcode-block" id="Settings.reset_all"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.reset_all">[docs]</a> <span class="k">def</span> <span class="nf">reset_all</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">scope</span> <span class="o">=</span> <span class="n">SettingsScope</span><span class="o">.</span><span class="n">SettingsAutoScope</span><span class="p">):</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">view</span><span class="o">.</span><span class="n">handle</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsResetAll</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">scope</span><span class="p">)</span></div>
<div class="viewcode-block" id="Settings.get_bool"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.get_bool">[docs]</a> <span class="k">def</span> <span class="nf">get_bool</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">view</span><span class="o">.</span><span class="n">handle</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsGetBool</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
<div class="viewcode-block" id="Settings.get_double"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.get_double">[docs]</a> <span class="k">def</span> <span class="nf">get_double</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">view</span><span class="o">.</span><span class="n">handle</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsGetDouble</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
<div class="viewcode-block" id="Settings.get_integer"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.get_integer">[docs]</a> <span class="k">def</span> <span class="nf">get_integer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">view</span><span class="o">.</span><span class="n">handle</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsGetUInt64</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
<div class="viewcode-block" id="Settings.get_string"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.get_string">[docs]</a> <span class="k">def</span> <span class="nf">get_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">view</span><span class="o">.</span><span class="n">handle</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsGetString</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
<div class="viewcode-block" id="Settings.get_string_list"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.get_string_list">[docs]</a> <span class="k">def</span> <span class="nf">get_string_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">view</span><span class="o">.</span><span class="n">handle</span>
<span class="n">length</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsGetStringList</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">length</span><span class="p">))</span>
<span class="n">out_list</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">length</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">out_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pyNativeStr</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeStringList</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">length</span><span class="p">)</span>
<span class="k">return</span> <span class="n">out_list</span></div>
<div class="viewcode-block" id="Settings.get_bool_with_scope"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.get_bool_with_scope">[docs]</a> <span class="k">def</span> <span class="nf">get_bool_with_scope</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">scope</span> <span class="o">=</span> <span class="n">SettingsScope</span><span class="o">.</span><span class="n">SettingsAutoScope</span><span class="p">):</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">view</span><span class="o">.</span><span class="n">handle</span>
<span class="n">c_scope</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">SettingsScopeEnum</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsGetBool</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">c_scope</span><span class="p">))</span>
<span class="k">return</span> <span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">SettingsScope</span><span class="p">(</span><span class="n">c_scope</span><span class="o">.</span><span class="n">value</span><span class="p">))</span></div>
<div class="viewcode-block" id="Settings.get_double_with_scope"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.get_double_with_scope">[docs]</a> <span class="k">def</span> <span class="nf">get_double_with_scope</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">scope</span> <span class="o">=</span> <span class="n">SettingsScope</span><span class="o">.</span><span class="n">SettingsAutoScope</span><span class="p">):</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">view</span><span class="o">.</span><span class="n">handle</span>
<span class="n">c_scope</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">SettingsScopeEnum</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsGetDouble</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">c_scope</span><span class="p">))</span>
<span class="k">return</span> <span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">SettingsScope</span><span class="p">(</span><span class="n">c_scope</span><span class="o">.</span><span class="n">value</span><span class="p">))</span></div>
<div class="viewcode-block" id="Settings.get_integer_with_scope"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.get_integer_with_scope">[docs]</a> <span class="k">def</span> <span class="nf">get_integer_with_scope</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">scope</span> <span class="o">=</span> <span class="n">SettingsScope</span><span class="o">.</span><span class="n">SettingsAutoScope</span><span class="p">):</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">view</span><span class="o">.</span><span class="n">handle</span>
<span class="n">c_scope</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">SettingsScopeEnum</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsGetUInt64</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">c_scope</span><span class="p">))</span>
<span class="k">return</span> <span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">SettingsScope</span><span class="p">(</span><span class="n">c_scope</span><span class="o">.</span><span class="n">value</span><span class="p">))</span></div>
<div class="viewcode-block" id="Settings.get_string_with_scope"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.get_string_with_scope">[docs]</a> <span class="k">def</span> <span class="nf">get_string_with_scope</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">scope</span> <span class="o">=</span> <span class="n">SettingsScope</span><span class="o">.</span><span class="n">SettingsAutoScope</span><span class="p">):</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">view</span><span class="o">.</span><span class="n">handle</span>
<span class="n">c_scope</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">SettingsScopeEnum</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsGetString</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">c_scope</span><span class="p">))</span>
<span class="k">return</span> <span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">SettingsScope</span><span class="p">(</span><span class="n">c_scope</span><span class="o">.</span><span class="n">value</span><span class="p">))</span></div>
<div class="viewcode-block" id="Settings.get_string_list_with_scope"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.get_string_list_with_scope">[docs]</a> <span class="k">def</span> <span class="nf">get_string_list_with_scope</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">scope</span> <span class="o">=</span> <span class="n">SettingsScope</span><span class="o">.</span><span class="n">SettingsAutoScope</span><span class="p">):</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">view</span><span class="o">.</span><span class="n">handle</span>
<span class="n">c_scope</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">SettingsScopeEnum</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
<span class="n">length</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsGetStringList</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">c_scope</span><span class="p">),</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">byref</span><span class="p">(</span><span class="n">length</span><span class="p">))</span>
<span class="n">out_list</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">length</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">out_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pyNativeStr</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeStringList</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">length</span><span class="p">)</span>
<span class="k">return</span> <span class="p">(</span><span class="n">out_list</span><span class="p">,</span> <span class="n">SettingsScope</span><span class="p">(</span><span class="n">c_scope</span><span class="o">.</span><span class="n">value</span><span class="p">))</span></div>
<div class="viewcode-block" id="Settings.set_bool"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.set_bool">[docs]</a> <span class="k">def</span> <span class="nf">set_bool</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">scope</span> <span class="o">=</span> <span class="n">SettingsScope</span><span class="o">.</span><span class="n">SettingsAutoScope</span><span class="p">):</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">view</span><span class="o">.</span><span class="n">handle</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsSetBool</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">scope</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="Settings.set_double"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.set_double">[docs]</a> <span class="k">def</span> <span class="nf">set_double</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">scope</span> <span class="o">=</span> <span class="n">SettingsScope</span><span class="o">.</span><span class="n">SettingsAutoScope</span><span class="p">):</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">view</span><span class="o">.</span><span class="n">handle</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsSetDouble</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">scope</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="Settings.set_integer"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.set_integer">[docs]</a> <span class="k">def</span> <span class="nf">set_integer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">scope</span> <span class="o">=</span> <span class="n">SettingsScope</span><span class="o">.</span><span class="n">SettingsAutoScope</span><span class="p">):</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">view</span><span class="o">.</span><span class="n">handle</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsSetUInt64</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">scope</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="Settings.set_string"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.set_string">[docs]</a> <span class="k">def</span> <span class="nf">set_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">scope</span> <span class="o">=</span> <span class="n">SettingsScope</span><span class="o">.</span><span class="n">SettingsAutoScope</span><span class="p">):</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">view</span><span class="o">.</span><span class="n">handle</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsSetString</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">scope</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="Settings.set_string_list"><a class="viewcode-back" href="../../binaryninja.settings-module.html#binaryninja.downloadprovider.Settings.set_string_list">[docs]</a> <span class="k">def</span> <span class="nf">set_string_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">scope</span> <span class="o">=</span> <span class="n">SettingsScope</span><span class="o">.</span><span class="n">SettingsAutoScope</span><span class="p">):</span>
<span class="k">if</span> <span class="n">view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">view</span> <span class="o">=</span> <span class="n">view</span><span class="o">.</span><span class="n">handle</span>
<span class="n">length</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">length</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="n">string_list</span> <span class="o">=</span> <span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">value</span><span class="p">))()</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">value</span><span class="p">)):</span>
<span class="n">string_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;charmap&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSettingsSetStringList</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">registry_id</span><span class="p">,</span> <span class="n">view</span><span class="p">,</span> <span class="n">scope</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">string_list</span><span class="p">,</span> <span class="n">length</span><span class="p">)</span></div></div>
</pre></div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,496 @@
<!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>binaryninja.transform &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.transform</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.transform</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="kn">import</span> <span class="nn">traceback</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="kn">import</span> <span class="nn">abc</span>
<span class="c1"># Binary Ninja components</span>
<span class="kn">import</span> <span class="nn">binaryninja</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">log</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">databuffer</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<span class="kn">from</span> <span class="nn">binaryninja.enums</span> <span class="k">import</span> <span class="n">TransformType</span>
<span class="c1"># 2-3 compatibility</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="nb">range</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">with_metaclass</span>
<span class="k">class</span> <span class="nc">_TransformMetaClass</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">xforms</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetTransformTypeList</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Transform</span><span class="p">(</span><span class="n">xforms</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeTransformTypeList</span><span class="p">(</span><span class="n">xforms</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">xforms</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetTransformTypeList</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="k">yield</span> <span class="n">Transform</span><span class="p">(</span><span class="n">xforms</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeTransformTypeList</span><span class="p">(</span><span class="n">xforms</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="nb">type</span><span class="o">.</span><span class="fm">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="s2">&quot;attribute &#39;</span><span class="si">%s</span><span class="s2">&#39; is read only&quot;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">xform</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetTransformByName</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="k">if</span> <span class="n">xform</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="s2">&quot;&#39;</span><span class="si">%s</span><span class="s2">&#39; is not a valid transform&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
<span class="k">return</span> <span class="n">Transform</span><span class="p">(</span><span class="n">xform</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">register</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">name</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;transform &#39;name&#39; is not defined&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">long_name</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">long_name</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">name</span>
<span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">transform_type</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;transform &#39;transform_type&#39; is not defined&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">group</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">group</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">xform</span> <span class="o">=</span> <span class="bp">cls</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">_registered_cb</span> <span class="o">=</span> <span class="n">xform</span><span class="o">.</span><span class="n">_cb</span>
<span class="n">xform</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNRegisterTransformType</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">transform_type</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">long_name</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">group</span><span class="p">,</span> <span class="n">xform</span><span class="o">.</span><span class="n">_cb</span><span class="p">)</span>
<div class="viewcode-block" id="TransformParameter"><a class="viewcode-back" href="../../binaryninja.transform.TransformParameter.html#binaryninja.transform.TransformParameter">[docs]</a><span class="k">class</span> <span class="nc">TransformParameter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="TransformParameter.__init__"><a class="viewcode-back" href="../../binaryninja.transform.TransformParameter.html#binaryninja.transform.TransformParameter.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">long_name</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">fixed_length</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
<span class="k">if</span> <span class="n">long_name</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">long_name</span> <span class="o">=</span> <span class="n">name</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">long_name</span> <span class="o">=</span> <span class="n">long_name</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fixed_length</span> <span class="o">=</span> <span class="n">fixed_length</span></div>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;TransformParameter: </span><span class="si">{}</span><span class="s2"> fixed length: </span><span class="si">{}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">long_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">fixed_length</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="Transform"><a class="viewcode-back" href="../../binaryninja.transform.Transform.html#binaryninja.transform.Transform">[docs]</a><span class="k">class</span> <span class="nc">Transform</span><span class="p">(</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">_TransformMetaClass</span><span class="p">,</span> <span class="nb">object</span><span class="p">)):</span>
<span class="n">transform_type</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">name</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">long_name</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">group</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">parameters</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">_registered_cb</span> <span class="o">=</span> <span class="kc">None</span>
<div class="viewcode-block" id="Transform.__init__"><a class="viewcode-back" href="../../binaryninja.transform.Transform.html#binaryninja.transform.Transform.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle</span><span class="p">):</span>
<span class="k">if</span> <span class="n">handle</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNCustomTransform</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">context</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getParameters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">getParameters</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_parameters</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">freeParameters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">freeParameters</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_free_parameters</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">decode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">decode</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_decode</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">encode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">encode</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_encode</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_pending_param_lists</span> <span class="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">transform_type</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">TransformType</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">name</span>
<span class="bp">self</span><span class="o">.</span><span class="n">long_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">long_name</span>
<span class="bp">self</span><span class="o">.</span><span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">group</span>
<span class="bp">self</span><span class="o">.</span><span class="n">parameters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">parameters</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle</span> <span class="o">=</span> <span class="n">handle</span>
<span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">TransformType</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNGetTransformType</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetTransformName</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">long_name</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetTransformLongName</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">group</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetTransformGroup</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">)</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">params</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetTransformParameterList</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">parameters</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">TransformParameter</span><span class="p">(</span><span class="n">params</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">params</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">longName</span><span class="p">,</span> <span class="n">params</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">fixedLength</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeTransformParameterList</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;transform: </span><span class="si">%s</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
<span class="k">def</span> <span class="nf">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">Transform</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span> <span class="o">==</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__ne__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">Transform</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span> <span class="o">!=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">addressof</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">handle</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_get_parameters</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">count</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">count</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">)</span>
<span class="n">param_buf</span> <span class="o">=</span> <span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNTransformParameterInfo</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">))()</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">)):</span>
<span class="n">param_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
<span class="n">param_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">longName</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">long_name</span>
<span class="n">param_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">fixedLength</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">fixed_length</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">param_buf</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_pending_param_lists</span><span class="p">[</span><span class="n">result</span><span class="o">.</span><span class="n">value</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">param_buf</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span><span class="o">.</span><span class="n">value</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="n">count</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">def</span> <span class="nf">_free_parameters</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">params</span><span class="p">,</span> <span class="n">count</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">buf</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">)</span>
<span class="k">if</span> <span class="n">buf</span><span class="o">.</span><span class="n">value</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pending_param_lists</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;freeing parameter list that wasn&#39;t allocated&quot;</span><span class="p">)</span>
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pending_param_lists</span><span class="p">[</span><span class="n">buf</span><span class="o">.</span><span class="n">value</span><span class="p">]</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">_decode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">input_buf</span><span class="p">,</span> <span class="n">output_buf</span><span class="p">,</span> <span class="n">params</span><span class="p">,</span> <span class="n">count</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">input_obj</span> <span class="o">=</span> <span class="n">databuffer</span><span class="o">.</span><span class="n">DataBuffer</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNDuplicateDataBuffer</span><span class="p">(</span><span class="n">input_buf</span><span class="p">))</span>
<span class="n">param_map</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="p">):</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">databuffer</span><span class="o">.</span><span class="n">DataBuffer</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNDuplicateDataBuffer</span><span class="p">(</span><span class="n">params</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">value</span><span class="p">))</span>
<span class="n">param_map</span><span class="p">[</span><span class="n">params</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">perform_decode</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">input_obj</span><span class="p">),</span> <span class="n">param_map</span><span class="p">)</span>
<span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">result</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetDataBufferContents</span><span class="p">(</span><span class="n">output_buf</span><span class="p">,</span> <span class="n">result</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">result</span><span class="p">))</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">_encode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">input_buf</span><span class="p">,</span> <span class="n">output_buf</span><span class="p">,</span> <span class="n">params</span><span class="p">,</span> <span class="n">count</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">input_obj</span> <span class="o">=</span> <span class="n">databuffer</span><span class="o">.</span><span class="n">DataBuffer</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNDuplicateDataBuffer</span><span class="p">(</span><span class="n">input_buf</span><span class="p">))</span>
<span class="n">param_map</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="p">):</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">databuffer</span><span class="o">.</span><span class="n">DataBuffer</span><span class="p">(</span><span class="n">handle</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNDuplicateDataBuffer</span><span class="p">(</span><span class="n">params</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">value</span><span class="p">))</span>
<span class="n">param_map</span><span class="p">[</span><span class="n">params</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">perform_encode</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">input_obj</span><span class="p">),</span> <span class="n">param_map</span><span class="p">)</span>
<span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">result</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetDataBufferContents</span><span class="p">(</span><span class="n">output_buf</span><span class="p">,</span> <span class="n">result</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">result</span><span class="p">))</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Allow tab completion to discover metaclass list property&quot;&quot;&quot;</span>
<span class="k">pass</span>
<div class="viewcode-block" id="Transform.perform_decode"><a class="viewcode-back" href="../../binaryninja.transform-module.html#binaryninja.transform.Transform.perform_decode">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_decode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">params</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">TransformType</span><span class="o">.</span><span class="n">InvertingTransform</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">perform_encode</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">params</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">None</span></div>
<div class="viewcode-block" id="Transform.perform_encode"><a class="viewcode-back" href="../../binaryninja.transform-module.html#binaryninja.transform.Transform.perform_encode">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
<span class="k">def</span> <span class="nf">perform_encode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">params</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">None</span></div>
<div class="viewcode-block" id="Transform.decode"><a class="viewcode-back" href="../../binaryninja.transform-module.html#binaryninja.transform.Transform.decode">[docs]</a> <span class="k">def</span> <span class="nf">decode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">input_buf</span><span class="p">,</span> <span class="n">params</span> <span class="o">=</span> <span class="p">{}):</span>
<span class="n">input_buf</span> <span class="o">=</span> <span class="n">databuffer</span><span class="o">.</span><span class="n">DataBuffer</span><span class="p">(</span><span class="n">input_buf</span><span class="p">)</span>
<span class="n">output_buf</span> <span class="o">=</span> <span class="n">databuffer</span><span class="o">.</span><span class="n">DataBuffer</span><span class="p">()</span>
<span class="n">keys</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">params</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
<span class="n">param_buf</span> <span class="o">=</span> <span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNTransformParameter</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">keys</span><span class="p">))()</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">keys</span><span class="p">)):</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">databuffer</span><span class="o">.</span><span class="n">DataBuffer</span><span class="p">(</span><span class="n">params</span><span class="p">[</span><span class="n">keys</span><span class="p">[</span><span class="n">i</span><span class="p">]])</span>
<span class="n">param_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">keys</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">param_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">handle</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">core</span><span class="o">.</span><span class="n">BNDecode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">input_buf</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">output_buf</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">param_buf</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">keys</span><span class="p">)):</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">output_buf</span><span class="p">)</span></div>
<div class="viewcode-block" id="Transform.encode"><a class="viewcode-back" href="../../binaryninja.transform-module.html#binaryninja.transform.Transform.encode">[docs]</a> <span class="k">def</span> <span class="nf">encode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">input_buf</span><span class="p">,</span> <span class="n">params</span> <span class="o">=</span> <span class="p">{}):</span>
<span class="n">input_buf</span> <span class="o">=</span> <span class="n">databuffer</span><span class="o">.</span><span class="n">DataBuffer</span><span class="p">(</span><span class="n">input_buf</span><span class="p">)</span>
<span class="n">output_buf</span> <span class="o">=</span> <span class="n">databuffer</span><span class="o">.</span><span class="n">DataBuffer</span><span class="p">()</span>
<span class="n">keys</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">params</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
<span class="n">param_buf</span> <span class="o">=</span> <span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNTransformParameter</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">keys</span><span class="p">))()</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">keys</span><span class="p">)):</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">databuffer</span><span class="o">.</span><span class="n">DataBuffer</span><span class="p">(</span><span class="n">params</span><span class="p">[</span><span class="n">keys</span><span class="p">[</span><span class="n">i</span><span class="p">]])</span>
<span class="n">param_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">keys</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">param_buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">handle</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">core</span><span class="o">.</span><span class="n">BNEncode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">input_buf</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">output_buf</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">param_buf</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">keys</span><span class="p">)):</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">output_buf</span><span class="p">)</span></div></div>
</pre></div>
</div>
</div>
<footer>
<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>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,344 @@
<!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>binaryninja.undoaction &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.undoaction</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.undoaction</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="kn">import</span> <span class="nn">traceback</span>
<span class="kn">import</span> <span class="nn">json</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="c1"># Binary Ninja components</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<span class="kn">from</span> <span class="nn">binaryninja.enums</span> <span class="k">import</span> <span class="n">ActionType</span>
<span class="kn">import</span> <span class="nn">binaryninja</span>
<div class="viewcode-block" id="UndoAction"><a class="viewcode-back" href="../../binaryninja.undoaction.UndoAction.html#binaryninja.undoaction.UndoAction">[docs]</a><span class="k">class</span> <span class="nc">UndoAction</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">action_type</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_registered</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">_registered_cb</span> <span class="o">=</span> <span class="kc">None</span>
<div class="viewcode-block" id="UndoAction.__init__"><a class="viewcode-back" href="../../binaryninja.undoaction.UndoAction.html#binaryninja.undoaction.UndoAction.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">view</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNUndoAction</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_registered</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;undo action type not registered&quot;</span><span class="p">)</span>
<span class="n">action_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">action_type</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">action_type</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">ActionType</span><span class="p">[</span><span class="n">action_type</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">action_type</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">context</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">undo</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">undo</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_undo</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">redo</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">redo</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_redo</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">serialize</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">serialize</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_serialize</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">view</span> <span class="o">=</span> <span class="n">view</span></div>
<div class="viewcode-block" id="UndoAction.register"><a class="viewcode-back" href="../../binaryninja.undoaction-module.html#binaryninja.undoaction.UndoAction.register">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">register</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">name</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;undo action &#39;name&#39; not defined&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">action_type</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;undo action &#39;action_type&#39; not defined&quot;</span><span class="p">)</span>
<span class="n">cb_type</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_bool</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BNUndoAction</span><span class="p">))</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">_registered_cb</span> <span class="o">=</span> <span class="n">cb_type</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">_deserialize</span><span class="p">)</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNRegisterUndoActionType</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_registered_cb</span><span class="p">)</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">_registered</span> <span class="o">=</span> <span class="kc">True</span></div>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">_deserialize</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">result</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">action</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">deserialize</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
<span class="k">if</span> <span class="n">action</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">result</span><span class="o">.</span><span class="n">context</span> <span class="o">=</span> <span class="n">action</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">context</span>
<span class="n">result</span><span class="o">.</span><span class="n">undo</span> <span class="o">=</span> <span class="n">action</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">undo</span>
<span class="n">result</span><span class="o">.</span><span class="n">redo</span> <span class="o">=</span> <span class="n">action</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">redo</span>
<span class="n">result</span><span class="o">.</span><span class="n">serialize</span> <span class="o">=</span> <span class="n">action</span><span class="o">.</span><span class="n">_cb</span><span class="o">.</span><span class="n">serialize</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">_undo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">undo</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">_redo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">view</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">redo</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">_serialize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">serialize</span><span class="p">())</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
<span class="k">return</span> <span class="s2">&quot;null&quot;</span></div>
</pre></div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,514 @@
<!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>binaryninja.update &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="up" title="binaryninja" href="../binaryninja.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>
<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"><a class="reference internal" href="../../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="../index.html">Module code</a> &raquo;</li>
<li><a href="../binaryninja.html">binaryninja</a> &raquo;</li>
<li>binaryninja.update</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for binaryninja.update</h1><div class="highlight"><pre>
<span></span><span class="c1"># Copyright (c) 2015-2019 Vector 35 Inc</span>
<span class="c1">#</span>
<span class="c1"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span class="c1"># of this software and associated documentation files (the &quot;Software&quot;), to</span>
<span class="c1"># deal in the Software without restriction, including without limitation the</span>
<span class="c1"># rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</span>
<span class="c1"># sell copies of the Software, and to permit persons to whom the Software is</span>
<span class="c1"># furnished to do so, subject to the following conditions:</span>
<span class="c1">#</span>
<span class="c1"># The above copyright notice and this permission notice shall be included in</span>
<span class="c1"># all copies or substantial portions of the Software.</span>
<span class="c1">#</span>
<span class="c1"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span class="c1"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span class="c1"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span class="c1"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span class="c1"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span>
<span class="c1"># FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</span>
<span class="c1"># IN THE SOFTWARE.</span>
<span class="kn">import</span> <span class="nn">traceback</span>
<span class="kn">import</span> <span class="nn">ctypes</span>
<span class="c1"># Binary Ninja components</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">_binaryninjacore</span> <span class="k">as</span> <span class="n">core</span>
<span class="kn">import</span> <span class="nn">binaryninja</span>
<span class="kn">from</span> <span class="nn">binaryninja.enums</span> <span class="k">import</span> <span class="n">UpdateResult</span>
<span class="c1"># 2-3 compatibility</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="nb">range</span>
<span class="kn">from</span> <span class="nn">binaryninja</span> <span class="k">import</span> <span class="n">with_metaclass</span>
<span class="k">class</span> <span class="nc">_UpdateChannelMetaClass</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">errors</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span><span class="p">()</span>
<span class="n">channels</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetUpdateChannels</span><span class="p">(</span><span class="n">count</span><span class="p">,</span> <span class="n">errors</span><span class="p">)</span>
<span class="k">if</span> <span class="n">errors</span><span class="p">:</span>
<span class="n">error_str</span> <span class="o">=</span> <span class="n">errors</span><span class="o">.</span><span class="n">value</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeString</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">errors</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_byte</span><span class="p">)))</span>
<span class="k">raise</span> <span class="ne">IOError</span><span class="p">(</span><span class="n">error_str</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">UpdateChannel</span><span class="p">(</span><span class="n">channels</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">channels</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">description</span><span class="p">,</span> <span class="n">channels</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">latestVersion</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeUpdateChannelList</span><span class="p">(</span><span class="n">channels</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">active</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetActiveUpdateChannel</span><span class="p">()</span>
<span class="nd">@active</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">active</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNSetActiveUpdateChannel</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">errors</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span><span class="p">()</span>
<span class="n">channels</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetUpdateChannels</span><span class="p">(</span><span class="n">count</span><span class="p">,</span> <span class="n">errors</span><span class="p">)</span>
<span class="k">if</span> <span class="n">errors</span><span class="p">:</span>
<span class="n">error_str</span> <span class="o">=</span> <span class="n">errors</span><span class="o">.</span><span class="n">value</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeString</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">errors</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_byte</span><span class="p">)))</span>
<span class="k">raise</span> <span class="ne">IOError</span><span class="p">(</span><span class="n">error_str</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="k">yield</span> <span class="n">UpdateChannel</span><span class="p">(</span><span class="n">channels</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">channels</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">description</span><span class="p">,</span> <span class="n">channels</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">latestVersion</span><span class="p">)</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeUpdateChannelList</span><span class="p">(</span><span class="n">channels</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="nb">type</span><span class="o">.</span><span class="fm">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="s2">&quot;attribute &#39;</span><span class="si">%s</span><span class="s2">&#39; is read only&quot;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="n">binaryninja</span><span class="o">.</span><span class="n">_init_plugins</span><span class="p">()</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">errors</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span><span class="p">()</span>
<span class="n">channels</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetUpdateChannels</span><span class="p">(</span><span class="n">count</span><span class="p">,</span> <span class="n">errors</span><span class="p">)</span>
<span class="k">if</span> <span class="n">errors</span><span class="p">:</span>
<span class="n">error_str</span> <span class="o">=</span> <span class="n">errors</span><span class="o">.</span><span class="n">value</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeString</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">errors</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_byte</span><span class="p">)))</span>
<span class="k">raise</span> <span class="ne">IOError</span><span class="p">(</span><span class="n">error_str</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="n">channels</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="nb">str</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">UpdateChannel</span><span class="p">(</span><span class="n">channels</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">channels</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">description</span><span class="p">,</span> <span class="n">channels</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">latestVersion</span><span class="p">)</span>
<span class="k">break</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeUpdateChannelList</span><span class="p">(</span><span class="n">channels</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="s2">&quot;&#39;</span><span class="si">%s</span><span class="s2">&#39; is not a valid channel&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
<span class="k">return</span> <span class="n">result</span>
<div class="viewcode-block" id="UpdateProgressCallback"><a class="viewcode-back" href="../../binaryninja.update.UpdateProgressCallback.html#binaryninja.update.UpdateProgressCallback">[docs]</a><span class="k">class</span> <span class="nc">UpdateProgressCallback</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="UpdateProgressCallback.__init__"><a class="viewcode-back" href="../../binaryninja.update.UpdateProgressCallback.html#binaryninja.update.UpdateProgressCallback.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cb</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">CFUNCTYPE</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_bool</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_void_p</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">callback</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">func</span> <span class="o">=</span> <span class="n">func</span></div>
<div class="viewcode-block" id="UpdateProgressCallback.callback"><a class="viewcode-back" href="../../binaryninja.update-module.html#binaryninja.update.UpdateProgressCallback.callback">[docs]</a> <span class="k">def</span> <span class="nf">callback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctxt</span><span class="p">,</span> <span class="n">progress</span><span class="p">,</span> <span class="n">total</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">progress</span><span class="p">,</span> <span class="n">total</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span></div></div>
<div class="viewcode-block" id="UpdateChannel"><a class="viewcode-back" href="../../binaryninja.update.UpdateChannel.html#binaryninja.update.UpdateChannel">[docs]</a><span class="k">class</span> <span class="nc">UpdateChannel</span><span class="p">(</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">_UpdateChannelMetaClass</span><span class="p">,</span> <span class="nb">object</span><span class="p">)):</span>
<div class="viewcode-block" id="UpdateChannel.__init__"><a class="viewcode-back" href="../../binaryninja.update.UpdateChannel.html#binaryninja.update.UpdateChannel.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">desc</span><span class="p">,</span> <span class="n">ver</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
<span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="n">desc</span>
<span class="bp">self</span><span class="o">.</span><span class="n">latest_version_num</span> <span class="o">=</span> <span class="n">ver</span></div>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">versions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;List of versions (read-only)&quot;&quot;&quot;</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">errors</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span><span class="p">()</span>
<span class="n">versions</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetUpdateChannelVersions</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">count</span><span class="p">,</span> <span class="n">errors</span><span class="p">)</span>
<span class="k">if</span> <span class="n">errors</span><span class="p">:</span>
<span class="n">error_str</span> <span class="o">=</span> <span class="n">errors</span><span class="o">.</span><span class="n">value</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeString</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">errors</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_byte</span><span class="p">)))</span>
<span class="k">raise</span> <span class="ne">IOError</span><span class="p">(</span><span class="n">error_str</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">UpdateVersion</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">versions</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">version</span><span class="p">,</span> <span class="n">versions</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">notes</span><span class="p">,</span> <span class="n">versions</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">time</span><span class="p">))</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeUpdateChannelVersionList</span><span class="p">(</span><span class="n">versions</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">latest_version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Latest version (read-only)&quot;&quot;&quot;</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_ulonglong</span><span class="p">()</span>
<span class="n">errors</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span><span class="p">()</span>
<span class="n">versions</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetUpdateChannelVersions</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">count</span><span class="p">,</span> <span class="n">errors</span><span class="p">)</span>
<span class="k">if</span> <span class="n">errors</span><span class="p">:</span>
<span class="n">error_str</span> <span class="o">=</span> <span class="n">errors</span><span class="o">.</span><span class="n">value</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeString</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">errors</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_byte</span><span class="p">)))</span>
<span class="k">raise</span> <span class="ne">IOError</span><span class="p">(</span><span class="n">error_str</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="n">versions</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">version</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">latest_version_num</span><span class="p">:</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">UpdateVersion</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">versions</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">version</span><span class="p">,</span> <span class="n">versions</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">notes</span><span class="p">,</span> <span class="n">versions</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">time</span><span class="p">)</span>
<span class="k">break</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeUpdateChannelVersionList</span><span class="p">(</span><span class="n">versions</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">updates_available</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Whether updates are available (read-only)&quot;&quot;&quot;</span>
<span class="n">errors</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span><span class="p">()</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNAreUpdatesAvailable</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">errors</span><span class="p">)</span>
<span class="k">if</span> <span class="n">errors</span><span class="p">:</span>
<span class="n">error_str</span> <span class="o">=</span> <span class="n">errors</span><span class="o">.</span><span class="n">value</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeString</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">errors</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_byte</span><span class="p">)))</span>
<span class="k">raise</span> <span class="ne">IOError</span><span class="p">(</span><span class="n">error_str</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">def</span> <span class="nf">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="nb">object</span><span class="o">.</span><span class="fm">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="s2">&quot;attribute &#39;</span><span class="si">%s</span><span class="s2">&#39; is read only&quot;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;channel: </span><span class="si">%s</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
<span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
<div class="viewcode-block" id="UpdateChannel.update_to_latest"><a class="viewcode-back" href="../../binaryninja.update-module.html#binaryninja.update.UpdateChannel.update_to_latest">[docs]</a> <span class="k">def</span> <span class="nf">update_to_latest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">progress</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="n">cb</span> <span class="o">=</span> <span class="n">UpdateProgressCallback</span><span class="p">(</span><span class="n">progress</span><span class="p">)</span>
<span class="n">errors</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span><span class="p">()</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNUpdateToLatestVersion</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">errors</span><span class="p">,</span> <span class="n">cb</span><span class="o">.</span><span class="n">cb</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">if</span> <span class="n">errors</span><span class="p">:</span>
<span class="n">error_str</span> <span class="o">=</span> <span class="n">errors</span><span class="o">.</span><span class="n">value</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeString</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">errors</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_byte</span><span class="p">)))</span>
<span class="k">raise</span> <span class="ne">IOError</span><span class="p">(</span><span class="n">error_str</span><span class="p">)</span>
<span class="k">return</span> <span class="n">UpdateResult</span><span class="p">(</span><span class="n">result</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="UpdateVersion"><a class="viewcode-back" href="../../binaryninja.update.UpdateVersion.html#binaryninja.update.UpdateVersion">[docs]</a><span class="k">class</span> <span class="nc">UpdateVersion</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="UpdateVersion.__init__"><a class="viewcode-back" href="../../binaryninja.update.UpdateVersion.html#binaryninja.update.UpdateVersion.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">channel</span><span class="p">,</span> <span class="n">ver</span><span class="p">,</span> <span class="n">notes</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">channel</span> <span class="o">=</span> <span class="n">channel</span>
<span class="bp">self</span><span class="o">.</span><span class="n">version</span> <span class="o">=</span> <span class="n">ver</span>
<span class="bp">self</span><span class="o">.</span><span class="n">notes</span> <span class="o">=</span> <span class="n">notes</span>
<span class="bp">self</span><span class="o">.</span><span class="n">time</span> <span class="o">=</span> <span class="n">t</span></div>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;version: </span><span class="si">%s</span><span class="s2">&gt;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">version</span>
<span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">version</span>
<div class="viewcode-block" id="UpdateVersion.update"><a class="viewcode-back" href="../../binaryninja.update-module.html#binaryninja.update.UpdateVersion.update">[docs]</a> <span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">progress</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="n">cb</span> <span class="o">=</span> <span class="n">UpdateProgressCallback</span><span class="p">(</span><span class="n">progress</span><span class="p">)</span>
<span class="n">errors</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span><span class="p">()</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">core</span><span class="o">.</span><span class="n">BNUpdateToVersion</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">version</span><span class="p">,</span> <span class="n">errors</span><span class="p">,</span> <span class="n">cb</span><span class="o">.</span><span class="n">cb</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">if</span> <span class="n">errors</span><span class="p">:</span>
<span class="n">error_str</span> <span class="o">=</span> <span class="n">errors</span><span class="o">.</span><span class="n">value</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeString</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">errors</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_byte</span><span class="p">)))</span>
<span class="k">raise</span> <span class="ne">IOError</span><span class="p">(</span><span class="n">error_str</span><span class="p">)</span>
<span class="k">return</span> <span class="n">UpdateResult</span><span class="p">(</span><span class="n">result</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="are_auto_updates_enabled"><a class="viewcode-back" href="../../binaryninja.update.are_auto_updates_enabled.html#binaryninja.update.are_auto_updates_enabled">[docs]</a><span class="k">def</span> <span class="nf">are_auto_updates_enabled</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``are_auto_updates_enabled`` queries if auto updates are enabled.</span>
<span class="sd"> :return: boolean True if auto updates are enabled. False if they are disabled.</span>
<span class="sd"> :rtype: bool</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNAreAutoUpdatesEnabled</span><span class="p">()</span></div>
<div class="viewcode-block" id="set_auto_updates_enabled"><a class="viewcode-back" href="../../binaryninja.update.set_auto_updates_enabled.html#binaryninja.update.set_auto_updates_enabled">[docs]</a><span class="k">def</span> <span class="nf">set_auto_updates_enabled</span><span class="p">(</span><span class="n">enabled</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``set_auto_updates_enabled`` sets auto update enabled status.</span>
<span class="sd"> :param bool enabled: True to enable update, False to disable updates.</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNSetAutoUpdatesEnabled</span><span class="p">(</span><span class="n">enabled</span><span class="p">)</span></div>
<div class="viewcode-block" id="get_time_since_last_update_check"><a class="viewcode-back" href="../../binaryninja.update.get_time_since_last_update_check.html#binaryninja.update.get_time_since_last_update_check">[docs]</a><span class="k">def</span> <span class="nf">get_time_since_last_update_check</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``get_time_since_last_update_check`` returns the time stamp for the last time updates were checked.</span>
<span class="sd"> :return: time stacmp for last update check</span>
<span class="sd"> :rtype: int</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNGetTimeSinceLastUpdateCheck</span><span class="p">()</span></div>
<div class="viewcode-block" id="is_update_installation_pending"><a class="viewcode-back" href="../../binaryninja.update.is_update_installation_pending.html#binaryninja.update.is_update_installation_pending">[docs]</a><span class="k">def</span> <span class="nf">is_update_installation_pending</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``is_update_installation_pending`` whether an update has been downloaded and is waiting installation</span>
<span class="sd"> :return: boolean True if an update is pending, false if no update is pending</span>
<span class="sd"> :rtype: bool</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BNIsUpdateInstallationPending</span><span class="p">()</span></div>
<div class="viewcode-block" id="install_pending_update"><a class="viewcode-back" href="../../binaryninja.update.install_pending_update.html#binaryninja.update.install_pending_update">[docs]</a><span class="k">def</span> <span class="nf">install_pending_update</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ``install_pending_update`` installs any pending updates</span>
<span class="sd"> :rtype: None</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">errors</span> <span class="o">=</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">c_char_p</span><span class="p">()</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNInstallPendingUpdate</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span>
<span class="k">if</span> <span class="n">errors</span><span class="p">:</span>
<span class="n">error_str</span> <span class="o">=</span> <span class="n">errors</span><span class="o">.</span><span class="n">value</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNFreeString</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">errors</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">POINTER</span><span class="p">(</span><span class="n">ctypes</span><span class="o">.</span><span class="n">c_byte</span><span class="p">)))</span>
<span class="k">raise</span> <span class="ne">IOError</span><span class="p">(</span><span class="n">error_str</span><span class="p">)</span></div>
<div class="viewcode-block" id="updates_checked"><a class="viewcode-back" href="../../binaryninja.update.updates_checked.html#binaryninja.update.updates_checked">[docs]</a><span class="k">def</span> <span class="nf">updates_checked</span><span class="p">():</span>
<span class="n">core</span><span class="o">.</span><span class="n">BNUpdatesChecked</span><span class="p">()</span></div>
</pre></div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,986 @@
<!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>collections &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="up" title="Module code" href="index.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>
<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"><a class="reference internal" href="../binaryninja.flowgraph-module.html">flowgraph</a></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><a href="index.html">Module code</a> &raquo;</li>
<li>collections</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for collections</h1><div class="highlight"><pre>
<span></span><span class="sd">&#39;&#39;&#39;This module implements specialized container datatypes providing</span>
<span class="sd">alternatives to Python&#39;s general purpose built-in containers, dict,</span>
<span class="sd">list, set, and tuple.</span>
<span class="sd">* namedtuple factory function for creating tuple subclasses with named fields</span>
<span class="sd">* deque list-like container with fast appends and pops on either end</span>
<span class="sd">* Counter dict subclass for counting hashable objects</span>
<span class="sd">* OrderedDict dict subclass that remembers the order entries were added</span>
<span class="sd">* defaultdict dict subclass that calls a factory function to supply missing values</span>
<span class="sd">&#39;&#39;&#39;</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;Counter&#39;</span><span class="p">,</span> <span class="s1">&#39;deque&#39;</span><span class="p">,</span> <span class="s1">&#39;defaultdict&#39;</span><span class="p">,</span> <span class="s1">&#39;namedtuple&#39;</span><span class="p">,</span> <span class="s1">&#39;OrderedDict&#39;</span><span class="p">]</span>
<span class="c1"># For bootstrapping reasons, the collection ABCs are defined in _abcoll.py.</span>
<span class="c1"># They should however be considered an integral part of collections.py.</span>
<span class="kn">from</span> <span class="nn">_abcoll</span> <span class="k">import</span> <span class="o">*</span>
<span class="kn">import</span> <span class="nn">_abcoll</span>
<span class="n">__all__</span> <span class="o">+=</span> <span class="n">_abcoll</span><span class="o">.</span><span class="n">__all__</span>
<span class="kn">from</span> <span class="nn">_collections</span> <span class="k">import</span> <span class="n">deque</span><span class="p">,</span> <span class="n">defaultdict</span>
<span class="kn">from</span> <span class="nn">operator</span> <span class="k">import</span> <span class="n">itemgetter</span> <span class="k">as</span> <span class="n">_itemgetter</span><span class="p">,</span> <span class="n">eq</span> <span class="k">as</span> <span class="n">_eq</span>
<span class="kn">from</span> <span class="nn">keyword</span> <span class="k">import</span> <span class="n">iskeyword</span> <span class="k">as</span> <span class="n">_iskeyword</span>
<span class="kn">import</span> <span class="nn">sys</span> <span class="k">as</span> <span class="nn">_sys</span>
<span class="kn">import</span> <span class="nn">heapq</span> <span class="k">as</span> <span class="nn">_heapq</span>
<span class="kn">from</span> <span class="nn">itertools</span> <span class="k">import</span> <span class="n">repeat</span> <span class="k">as</span> <span class="n">_repeat</span><span class="p">,</span> <span class="n">chain</span> <span class="k">as</span> <span class="n">_chain</span><span class="p">,</span> <span class="n">starmap</span> <span class="k">as</span> <span class="n">_starmap</span>
<span class="kn">from</span> <span class="nn">itertools</span> <span class="k">import</span> <span class="n">imap</span> <span class="k">as</span> <span class="n">_imap</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">thread</span> <span class="k">import</span> <span class="n">get_ident</span> <span class="k">as</span> <span class="n">_get_ident</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">dummy_thread</span> <span class="k">import</span> <span class="n">get_ident</span> <span class="k">as</span> <span class="n">_get_ident</span>
<span class="c1">################################################################################</span>
<span class="c1">### OrderedDict</span>
<span class="c1">################################################################################</span>
<div class="viewcode-block" id="OrderedDict"><a class="viewcode-back" href="../binaryninja.binaryview.OrderedDict.html#binaryninja.binaryview.OrderedDict">[docs]</a><span class="k">class</span> <span class="nc">OrderedDict</span><span class="p">(</span><span class="nb">dict</span><span class="p">):</span>
<span class="s1">&#39;Dictionary that remembers insertion order&#39;</span>
<span class="c1"># An inherited dict maps keys to values.</span>
<span class="c1"># The inherited dict provides __getitem__, __len__, __contains__, and get.</span>
<span class="c1"># The remaining methods are order-aware.</span>
<span class="c1"># Big-O running times for all methods are the same as regular dictionaries.</span>
<span class="c1"># The internal self.__map dict maps keys to links in a doubly linked list.</span>
<span class="c1"># The circular doubly linked list starts and ends with a sentinel element.</span>
<span class="c1"># The sentinel element never gets deleted (this simplifies the algorithm).</span>
<span class="c1"># Each link is stored as a list of length three: [PREV, NEXT, KEY].</span>
<div class="viewcode-block" id="OrderedDict.__init__"><a class="viewcode-back" href="../binaryninja.binaryview.OrderedDict.html#binaryninja.binaryview.OrderedDict.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Initialize an ordered dictionary. The signature is the same as</span>
<span class="sd"> regular dictionaries, but keyword arguments are not recommended because</span>
<span class="sd"> their insertion order is arbitrary.</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">args</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;descriptor &#39;__init__&#39; of &#39;OrderedDict&#39; object &quot;</span>
<span class="s2">&quot;needs an argument&quot;</span><span class="p">)</span>
<span class="bp">self</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">args</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;expected at most 1 arguments, got </span><span class="si">%d</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">))</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__root</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__root</span> <span class="o">=</span> <span class="n">root</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1"># sentinel node</span>
<span class="n">root</span><span class="p">[:]</span> <span class="o">=</span> <span class="p">[</span><span class="n">root</span><span class="p">,</span> <span class="n">root</span><span class="p">,</span> <span class="kc">None</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__map</span> <span class="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__update</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">__setitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">dict_setitem</span><span class="o">=</span><span class="nb">dict</span><span class="o">.</span><span class="fm">__setitem__</span><span class="p">):</span>
<span class="s1">&#39;od.__setitem__(i, y) &lt;==&gt; od[i]=y&#39;</span>
<span class="c1"># Setting a new item creates a new link at the end of the linked list,</span>
<span class="c1"># and the inherited dictionary is updated with the new key/value pair.</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">:</span>
<span class="n">root</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__root</span>
<span class="n">last</span> <span class="o">=</span> <span class="n">root</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">last</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">root</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__map</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">last</span><span class="p">,</span> <span class="n">root</span><span class="p">,</span> <span class="n">key</span><span class="p">]</span>
<span class="k">return</span> <span class="n">dict_setitem</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__delitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">dict_delitem</span><span class="o">=</span><span class="nb">dict</span><span class="o">.</span><span class="fm">__delitem__</span><span class="p">):</span>
<span class="s1">&#39;od.__delitem__(y) &lt;==&gt; del od[y]&#39;</span>
<span class="c1"># Deleting an existing item uses self.__map to find the link which gets</span>
<span class="c1"># removed by updating the links in the predecessor and successor nodes.</span>
<span class="n">dict_delitem</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
<span class="n">link_prev</span><span class="p">,</span> <span class="n">link_next</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__map</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<span class="n">link_prev</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">link_next</span> <span class="c1"># update link_prev[NEXT]</span>
<span class="n">link_next</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">link_prev</span> <span class="c1"># update link_next[PREV]</span>
<span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="s1">&#39;od.__iter__() &lt;==&gt; iter(od)&#39;</span>
<span class="c1"># Traverse the linked list in order.</span>
<span class="n">root</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__root</span>
<span class="n">curr</span> <span class="o">=</span> <span class="n">root</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="c1"># start at the first node</span>
<span class="k">while</span> <span class="n">curr</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">root</span><span class="p">:</span>
<span class="k">yield</span> <span class="n">curr</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="c1"># yield the curr[KEY]</span>
<span class="n">curr</span> <span class="o">=</span> <span class="n">curr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="c1"># move to next node</span>
<span class="k">def</span> <span class="nf">__reversed__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="s1">&#39;od.__reversed__() &lt;==&gt; reversed(od)&#39;</span>
<span class="c1"># Traverse the linked list in reverse order.</span>
<span class="n">root</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__root</span>
<span class="n">curr</span> <span class="o">=</span> <span class="n">root</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># start at the last node</span>
<span class="k">while</span> <span class="n">curr</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">root</span><span class="p">:</span>
<span class="k">yield</span> <span class="n">curr</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="c1"># yield the curr[KEY]</span>
<span class="n">curr</span> <span class="o">=</span> <span class="n">curr</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># move to previous node</span>
<span class="k">def</span> <span class="nf">clear</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="s1">&#39;od.clear() -&gt; None. Remove all items from od.&#39;</span>
<span class="n">root</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__root</span>
<span class="n">root</span><span class="p">[:]</span> <span class="o">=</span> <span class="p">[</span><span class="n">root</span><span class="p">,</span> <span class="n">root</span><span class="p">,</span> <span class="kc">None</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__map</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
<span class="nb">dict</span><span class="o">.</span><span class="n">clear</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="c1"># -- the following methods do not depend on the internal structure --</span>
<span class="k">def</span> <span class="nf">keys</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="s1">&#39;od.keys() -&gt; list of keys in od&#39;</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">values</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="s1">&#39;od.values() -&gt; list of values in od&#39;</span>
<span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">items</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="s1">&#39;od.items() -&gt; list of (key, value) pairs in od&#39;</span>
<span class="k">return</span> <span class="p">[(</span><span class="n">key</span><span class="p">,</span> <span class="bp">self</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">iterkeys</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="s1">&#39;od.iterkeys() -&gt; an iterator over the keys in od&#39;</span>
<span class="k">return</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">itervalues</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="s1">&#39;od.itervalues -&gt; an iterator over the values in od&#39;</span>
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">:</span>
<span class="k">yield</span> <span class="bp">self</span><span class="p">[</span><span class="n">k</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">iteritems</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="s1">&#39;od.iteritems -&gt; an iterator over the (key, value) pairs in od&#39;</span>
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">:</span>
<span class="k">yield</span> <span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="bp">self</span><span class="p">[</span><span class="n">k</span><span class="p">])</span>
<span class="n">update</span> <span class="o">=</span> <span class="n">MutableMapping</span><span class="o">.</span><span class="n">update</span>
<span class="n">__update</span> <span class="o">=</span> <span class="n">update</span> <span class="c1"># let subclasses override update without breaking __init__</span>
<span class="n">__marker</span> <span class="o">=</span> <span class="nb">object</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">pop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">__marker</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;od.pop(k[,d]) -&gt; v, remove specified key and return the corresponding</span>
<span class="sd"> value. If key is not found, d is returned if given, otherwise KeyError</span>
<span class="sd"> is raised.</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">:</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
<span class="k">del</span> <span class="bp">self</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">if</span> <span class="n">default</span> <span class="ow">is</span> <span class="bp">self</span><span class="o">.</span><span class="n">__marker</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<span class="k">return</span> <span class="n">default</span>
<span class="k">def</span> <span class="nf">setdefault</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="s1">&#39;od.setdefault(k[,d]) -&gt; od.get(k,d), also set od[k]=d if k not in od&#39;</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
<span class="bp">self</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">default</span>
<span class="k">return</span> <span class="n">default</span>
<span class="k">def</span> <span class="nf">popitem</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">last</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;od.popitem() -&gt; (k, v), return and remove a (key, value) pair.</span>
<span class="sd"> Pairs are returned in LIFO order if last is true or FIFO order if false.</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="s1">&#39;dictionary is empty&#39;</span><span class="p">)</span>
<span class="n">key</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="k">if</span> <span class="n">last</span> <span class="k">else</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
<span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<span class="k">return</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_repr_running</span><span class="o">=</span><span class="p">{}):</span>
<span class="s1">&#39;od.__repr__() &lt;==&gt; repr(od)&#39;</span>
<span class="n">call_key</span> <span class="o">=</span> <span class="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">),</span> <span class="n">_get_ident</span><span class="p">()</span>
<span class="k">if</span> <span class="n">call_key</span> <span class="ow">in</span> <span class="n">_repr_running</span><span class="p">:</span>
<span class="k">return</span> <span class="s1">&#39;...&#39;</span>
<span class="n">_repr_running</span><span class="p">[</span><span class="n">call_key</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="p">:</span>
<span class="k">return</span> <span class="s1">&#39;</span><span class="si">%s</span><span class="s1">()&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,)</span>
<span class="k">return</span> <span class="s1">&#39;</span><span class="si">%s</span><span class="s1">(</span><span class="si">%r</span><span class="s1">)&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">items</span><span class="p">())</span>
<span class="k">finally</span><span class="p">:</span>
<span class="k">del</span> <span class="n">_repr_running</span><span class="p">[</span><span class="n">call_key</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">__reduce__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="s1">&#39;Return state information for pickling&#39;</span>
<span class="n">items</span> <span class="o">=</span> <span class="p">[[</span><span class="n">k</span><span class="p">,</span> <span class="bp">self</span><span class="p">[</span><span class="n">k</span><span class="p">]]</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">]</span>
<span class="n">inst_dict</span> <span class="o">=</span> <span class="nb">vars</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">vars</span><span class="p">(</span><span class="n">OrderedDict</span><span class="p">()):</span>
<span class="n">inst_dict</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">if</span> <span class="n">inst_dict</span><span class="p">:</span>
<span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="p">(</span><span class="n">items</span><span class="p">,),</span> <span class="n">inst_dict</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="p">(</span><span class="n">items</span><span class="p">,)</span>
<span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="s1">&#39;od.copy() -&gt; a shallow copy of od&#39;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">fromkeys</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">iterable</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;OD.fromkeys(S[, v]) -&gt; New ordered dictionary with keys from S.</span>
<span class="sd"> If not specified, the value defaults to None.</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="bp">self</span> <span class="o">=</span> <span class="bp">cls</span><span class="p">()</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">iterable</span><span class="p">:</span>
<span class="bp">self</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
<span class="k">return</span> <span class="bp">self</span>
<span class="k">def</span> <span class="nf">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;od.__eq__(y) &lt;==&gt; od==y. Comparison to another OD is order-sensitive</span>
<span class="sd"> while comparison to a regular mapping is order-insensitive.</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">OrderedDict</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">dict</span><span class="o">.</span><span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">all</span><span class="p">(</span><span class="n">_imap</span><span class="p">(</span><span class="n">_eq</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">))</span>
<span class="k">return</span> <span class="nb">dict</span><span class="o">.</span><span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__ne__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="s1">&#39;od.__ne__(y) &lt;==&gt; od!=y&#39;</span>
<span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span> <span class="o">==</span> <span class="n">other</span>
<span class="c1"># -- the following methods support python 3.x style dictionary views --</span>
<span class="k">def</span> <span class="nf">viewkeys</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="s2">&quot;od.viewkeys() -&gt; a set-like object providing a view on od&#39;s keys&quot;</span>
<span class="k">return</span> <span class="n">KeysView</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">viewvalues</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="s2">&quot;od.viewvalues() -&gt; an object providing a view on od&#39;s values&quot;</span>
<span class="k">return</span> <span class="n">ValuesView</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">viewitems</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="s2">&quot;od.viewitems() -&gt; a set-like object providing a view on od&#39;s items&quot;</span>
<span class="k">return</span> <span class="n">ItemsView</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
<span class="c1">################################################################################</span>
<span class="c1">### namedtuple</span>
<span class="c1">################################################################################</span>
<span class="n">_class_template</span> <span class="o">=</span> <span class="s1">&#39;&#39;&#39;</span><span class="se">\</span>
<span class="s1">class </span><span class="si">{typename}</span><span class="s1">(tuple):</span>
<span class="s1"> &#39;</span><span class="si">{typename}</span><span class="s1">(</span><span class="si">{arg_list}</span><span class="s1">)&#39;</span>
<span class="s1"> __slots__ = ()</span>
<span class="s1"> _fields = </span><span class="si">{field_names!r}</span><span class="s1"></span>
<span class="s1"> def __new__(_cls, </span><span class="si">{arg_list}</span><span class="s1">):</span>
<span class="s1"> &#39;Create new instance of </span><span class="si">{typename}</span><span class="s1">(</span><span class="si">{arg_list}</span><span class="s1">)&#39;</span>
<span class="s1"> return _tuple.__new__(_cls, (</span><span class="si">{arg_list}</span><span class="s1">))</span>
<span class="s1"> @classmethod</span>
<span class="s1"> def _make(cls, iterable, new=tuple.__new__, len=len):</span>
<span class="s1"> &#39;Make a new </span><span class="si">{typename}</span><span class="s1"> object from a sequence or iterable&#39;</span>
<span class="s1"> result = new(cls, iterable)</span>
<span class="s1"> if len(result) != </span><span class="si">{num_fields:d}</span><span class="s1">:</span>
<span class="s1"> raise TypeError(&#39;Expected </span><span class="si">{num_fields:d}</span><span class="s1"> arguments, got </span><span class="si">%d</span><span class="s1">&#39; </span><span class="si">% le</span><span class="s1">n(result))</span>
<span class="s1"> return result</span>
<span class="s1"> def __repr__(self):</span>
<span class="s1"> &#39;Return a nicely formatted representation string&#39;</span>
<span class="s1"> return &#39;</span><span class="si">{typename}</span><span class="s1">(</span><span class="si">{repr_fmt}</span><span class="s1">)&#39; </span><span class="si">% s</span><span class="s1">elf</span>
<span class="s1"> def _asdict(self):</span>
<span class="s1"> &#39;Return a new OrderedDict which maps field names to their values&#39;</span>
<span class="s1"> return OrderedDict(zip(self._fields, self))</span>
<span class="s1"> def _replace(_self, **kwds):</span>
<span class="s1"> &#39;Return a new </span><span class="si">{typename}</span><span class="s1"> object replacing specified fields with new values&#39;</span>
<span class="s1"> result = _self._make(map(kwds.pop, </span><span class="si">{field_names!r}</span><span class="s1">, _self))</span>
<span class="s1"> if kwds:</span>
<span class="s1"> raise ValueError(&#39;Got unexpected field names: </span><span class="si">%r</span><span class="s1">&#39; % kwds.keys())</span>
<span class="s1"> return result</span>
<span class="s1"> def __getnewargs__(self):</span>
<span class="s1"> &#39;Return self as a plain tuple. Used by copy and pickle.&#39;</span>
<span class="s1"> return tuple(self)</span>
<span class="s1"> __dict__ = _property(_asdict)</span>
<span class="s1"> def __getstate__(self):</span>
<span class="s1"> &#39;Exclude the OrderedDict from pickling&#39;</span>
<span class="s1"> pass</span>
<span class="si">{field_defs}</span><span class="s1"></span>
<span class="s1">&#39;&#39;&#39;</span>
<span class="n">_repr_template</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="si">{name}</span><span class="s1">=</span><span class="si">%r</span><span class="s1">&#39;</span>
<span class="n">_field_template</span> <span class="o">=</span> <span class="s1">&#39;&#39;&#39;</span><span class="se">\</span>
<span class="s1"> </span><span class="si">{name}</span><span class="s1"> = _property(_itemgetter(</span><span class="si">{index:d}</span><span class="s1">), doc=&#39;Alias for field number </span><span class="si">{index:d}</span><span class="s1">&#39;)</span>
<span class="s1">&#39;&#39;&#39;</span>
<span class="k">def</span> <span class="nf">namedtuple</span><span class="p">(</span><span class="n">typename</span><span class="p">,</span> <span class="n">field_names</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">rename</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Returns a new subclass of tuple with named fields.</span>
<span class="sd"> &gt;&gt;&gt; Point = namedtuple(&#39;Point&#39;, [&#39;x&#39;, &#39;y&#39;])</span>
<span class="sd"> &gt;&gt;&gt; Point.__doc__ # docstring for the new class</span>
<span class="sd"> &#39;Point(x, y)&#39;</span>
<span class="sd"> &gt;&gt;&gt; p = Point(11, y=22) # instantiate with positional args or keywords</span>
<span class="sd"> &gt;&gt;&gt; p[0] + p[1] # indexable like a plain tuple</span>
<span class="sd"> 33</span>
<span class="sd"> &gt;&gt;&gt; x, y = p # unpack like a regular tuple</span>
<span class="sd"> &gt;&gt;&gt; x, y</span>
<span class="sd"> (11, 22)</span>
<span class="sd"> &gt;&gt;&gt; p.x + p.y # fields also accessible by name</span>
<span class="sd"> 33</span>
<span class="sd"> &gt;&gt;&gt; d = p._asdict() # convert to a dictionary</span>
<span class="sd"> &gt;&gt;&gt; d[&#39;x&#39;]</span>
<span class="sd"> 11</span>
<span class="sd"> &gt;&gt;&gt; Point(**d) # convert from a dictionary</span>
<span class="sd"> Point(x=11, y=22)</span>
<span class="sd"> &gt;&gt;&gt; p._replace(x=100) # _replace() is like str.replace() but targets named fields</span>
<span class="sd"> Point(x=100, y=22)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Validate the field names. At the user&#39;s option, either generate an error</span>
<span class="c1"># message or automatically replace the field name with a valid name.</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">field_names</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
<span class="n">field_names</span> <span class="o">=</span> <span class="n">field_names</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">,</span> <span class="s1">&#39; &#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">field_names</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">field_names</span><span class="p">)</span>
<span class="n">typename</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">typename</span><span class="p">)</span>
<span class="k">if</span> <span class="n">rename</span><span class="p">:</span>
<span class="n">seen</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">name</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">field_names</span><span class="p">):</span>
<span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="nb">all</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">isalnum</span><span class="p">()</span> <span class="ow">or</span> <span class="n">c</span><span class="o">==</span><span class="s1">&#39;_&#39;</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">name</span><span class="p">)</span>
<span class="ow">or</span> <span class="n">_iskeyword</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="ow">or</span> <span class="ow">not</span> <span class="n">name</span>
<span class="ow">or</span> <span class="n">name</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span>
<span class="ow">or</span> <span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;_&#39;</span><span class="p">)</span>
<span class="ow">or</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">seen</span><span class="p">):</span>
<span class="n">field_names</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;_</span><span class="si">%d</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="n">index</span>
<span class="n">seen</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="p">[</span><span class="n">typename</span><span class="p">]</span> <span class="o">+</span> <span class="n">field_names</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">str</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;Type names and field names must be strings&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">all</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">isalnum</span><span class="p">()</span> <span class="ow">or</span> <span class="n">c</span><span class="o">==</span><span class="s1">&#39;_&#39;</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">name</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;Type names and field names can only contain &#39;</span>
<span class="s1">&#39;alphanumeric characters and underscores: </span><span class="si">%r</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
<span class="k">if</span> <span class="n">_iskeyword</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;Type names and field names cannot be a &#39;</span>
<span class="s1">&#39;keyword: </span><span class="si">%r</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
<span class="k">if</span> <span class="n">name</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;Type names and field names cannot start with &#39;</span>
<span class="s1">&#39;a number: </span><span class="si">%r</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
<span class="n">seen</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">field_names</span><span class="p">:</span>
<span class="k">if</span> <span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;_&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">rename</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;Field names cannot start with an underscore: &#39;</span>
<span class="s1">&#39;</span><span class="si">%r</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
<span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">seen</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;Encountered duplicate field name: </span><span class="si">%r</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
<span class="n">seen</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="c1"># Fill-in the class template</span>
<span class="n">class_definition</span> <span class="o">=</span> <span class="n">_class_template</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">typename</span> <span class="o">=</span> <span class="n">typename</span><span class="p">,</span>
<span class="n">field_names</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">field_names</span><span class="p">),</span>
<span class="n">num_fields</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">field_names</span><span class="p">),</span>
<span class="n">arg_list</span> <span class="o">=</span> <span class="nb">repr</span><span class="p">(</span><span class="nb">tuple</span><span class="p">(</span><span class="n">field_names</span><span class="p">))</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span>
<span class="n">repr_fmt</span> <span class="o">=</span> <span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_repr_template</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">)</span>
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">field_names</span><span class="p">),</span>
<span class="n">field_defs</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_field_template</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">index</span><span class="o">=</span><span class="n">index</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">)</span>
<span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">name</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">field_names</span><span class="p">))</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span> <span class="n">class_definition</span>
<span class="c1"># Execute the template string in a temporary namespace and support</span>
<span class="c1"># tracing utilities by setting a value for frame.f_globals[&#39;__name__&#39;]</span>
<span class="n">namespace</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">_itemgetter</span><span class="o">=</span><span class="n">_itemgetter</span><span class="p">,</span> <span class="vm">__name__</span><span class="o">=</span><span class="s1">&#39;namedtuple_</span><span class="si">%s</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="n">typename</span><span class="p">,</span>
<span class="n">OrderedDict</span><span class="o">=</span><span class="n">OrderedDict</span><span class="p">,</span> <span class="n">_property</span><span class="o">=</span><span class="nb">property</span><span class="p">,</span> <span class="n">_tuple</span><span class="o">=</span><span class="nb">tuple</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">exec</span> <span class="n">class_definition</span> <span class="ow">in</span> <span class="n">namespace</span>
<span class="k">except</span> <span class="ne">SyntaxError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">SyntaxError</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">message</span> <span class="o">+</span> <span class="s1">&#39;:</span><span class="se">\n</span><span class="s1">&#39;</span> <span class="o">+</span> <span class="n">class_definition</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">namespace</span><span class="p">[</span><span class="n">typename</span><span class="p">]</span>
<span class="c1"># For pickling to work, the __module__ variable needs to be set to the frame</span>
<span class="c1"># where the named tuple is created. Bypass this step in environments where</span>
<span class="c1"># sys._getframe is not defined (Jython for example) or sys._getframe is not</span>
<span class="c1"># defined for arguments greater than 0 (IronPython).</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">result</span><span class="o">.</span><span class="vm">__module__</span> <span class="o">=</span> <span class="n">_sys</span><span class="o">.</span><span class="n">_getframe</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">f_globals</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;__name__&#39;</span><span class="p">,</span> <span class="s1">&#39;__main__&#39;</span><span class="p">)</span>
<span class="k">except</span> <span class="p">(</span><span class="ne">AttributeError</span><span class="p">,</span> <span class="ne">ValueError</span><span class="p">):</span>
<span class="k">pass</span>
<span class="k">return</span> <span class="n">result</span>
<span class="c1">########################################################################</span>
<span class="c1">### Counter</span>
<span class="c1">########################################################################</span>
<span class="k">class</span> <span class="nc">Counter</span><span class="p">(</span><span class="nb">dict</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Dict subclass for counting hashable items. Sometimes called a bag</span>
<span class="sd"> or multiset. Elements are stored as dictionary keys and their counts</span>
<span class="sd"> are stored as dictionary values.</span>
<span class="sd"> &gt;&gt;&gt; c = Counter(&#39;abcdeabcdabcaba&#39;) # count elements from a string</span>
<span class="sd"> &gt;&gt;&gt; c.most_common(3) # three most common elements</span>
<span class="sd"> [(&#39;a&#39;, 5), (&#39;b&#39;, 4), (&#39;c&#39;, 3)]</span>
<span class="sd"> &gt;&gt;&gt; sorted(c) # list all unique elements</span>
<span class="sd"> [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;]</span>
<span class="sd"> &gt;&gt;&gt; &#39;&#39;.join(sorted(c.elements())) # list elements with repetitions</span>
<span class="sd"> &#39;aaaaabbbbcccdde&#39;</span>
<span class="sd"> &gt;&gt;&gt; sum(c.values()) # total of all counts</span>
<span class="sd"> 15</span>
<span class="sd"> &gt;&gt;&gt; c[&#39;a&#39;] # count of letter &#39;a&#39;</span>
<span class="sd"> 5</span>
<span class="sd"> &gt;&gt;&gt; for elem in &#39;shazam&#39;: # update counts from an iterable</span>
<span class="sd"> ... c[elem] += 1 # by adding 1 to each element&#39;s count</span>
<span class="sd"> &gt;&gt;&gt; c[&#39;a&#39;] # now there are seven &#39;a&#39;</span>
<span class="sd"> 7</span>
<span class="sd"> &gt;&gt;&gt; del c[&#39;b&#39;] # remove all &#39;b&#39;</span>
<span class="sd"> &gt;&gt;&gt; c[&#39;b&#39;] # now there are zero &#39;b&#39;</span>
<span class="sd"> 0</span>
<span class="sd"> &gt;&gt;&gt; d = Counter(&#39;simsalabim&#39;) # make another counter</span>
<span class="sd"> &gt;&gt;&gt; c.update(d) # add in the second counter</span>
<span class="sd"> &gt;&gt;&gt; c[&#39;a&#39;] # now there are nine &#39;a&#39;</span>
<span class="sd"> 9</span>
<span class="sd"> &gt;&gt;&gt; c.clear() # empty the counter</span>
<span class="sd"> &gt;&gt;&gt; c</span>
<span class="sd"> Counter()</span>
<span class="sd"> Note: If a count is set to zero or reduced to zero, it will remain</span>
<span class="sd"> in the counter until the entry is deleted or the counter is cleared:</span>
<span class="sd"> &gt;&gt;&gt; c = Counter(&#39;aaabbc&#39;)</span>
<span class="sd"> &gt;&gt;&gt; c[&#39;b&#39;] -= 2 # reduce the count of &#39;b&#39; by two</span>
<span class="sd"> &gt;&gt;&gt; c.most_common() # &#39;b&#39; is still in, but its count is zero</span>
<span class="sd"> [(&#39;a&#39;, 3), (&#39;c&#39;, 1), (&#39;b&#39;, 0)]</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="c1"># References:</span>
<span class="c1"># http://en.wikipedia.org/wiki/Multiset</span>
<span class="c1"># http://www.gnu.org/software/smalltalk/manual-base/html_node/Bag.html</span>
<span class="c1"># http://www.demo2s.com/Tutorial/Cpp/0380__set-multiset/Catalog0380__set-multiset.htm</span>
<span class="c1"># http://code.activestate.com/recipes/259174/</span>
<span class="c1"># Knuth, TAOCP Vol. II section 4.6.3</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Create a new, empty Counter object. And if given, count elements</span>
<span class="sd"> from an input iterable. Or, initialize the count from another mapping</span>
<span class="sd"> of elements to their counts.</span>
<span class="sd"> &gt;&gt;&gt; c = Counter() # a new, empty counter</span>
<span class="sd"> &gt;&gt;&gt; c = Counter(&#39;gallahad&#39;) # a new counter from an iterable</span>
<span class="sd"> &gt;&gt;&gt; c = Counter({&#39;a&#39;: 4, &#39;b&#39;: 2}) # a new counter from a mapping</span>
<span class="sd"> &gt;&gt;&gt; c = Counter(a=4, b=2) # a new counter from keyword args</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">args</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;descriptor &#39;__init__&#39; of &#39;Counter&#39; object &quot;</span>
<span class="s2">&quot;needs an argument&quot;</span><span class="p">)</span>
<span class="bp">self</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">args</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;expected at most 1 arguments, got </span><span class="si">%d</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">))</span>
<span class="nb">super</span><span class="p">(</span><span class="n">Counter</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__missing__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
<span class="s1">&#39;The count of elements not in the Counter is zero.&#39;</span>
<span class="c1"># Needed so that self[missing_item] does not raise KeyError</span>
<span class="k">return</span> <span class="mi">0</span>
<span class="k">def</span> <span class="nf">most_common</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;List the n most common elements and their counts from the most</span>
<span class="sd"> common to the least. If n is None, then list all element counts.</span>
<span class="sd"> &gt;&gt;&gt; Counter(&#39;abcdeabcdabcaba&#39;).most_common(3)</span>
<span class="sd"> [(&#39;a&#39;, 5), (&#39;b&#39;, 4), (&#39;c&#39;, 3)]</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="c1"># Emulate Bag.sortedByCount from Smalltalk</span>
<span class="k">if</span> <span class="n">n</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">iteritems</span><span class="p">(),</span> <span class="n">key</span><span class="o">=</span><span class="n">_itemgetter</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">return</span> <span class="n">_heapq</span><span class="o">.</span><span class="n">nlargest</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">iteritems</span><span class="p">(),</span> <span class="n">key</span><span class="o">=</span><span class="n">_itemgetter</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">elements</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Iterator over elements repeating each as many times as its count.</span>
<span class="sd"> &gt;&gt;&gt; c = Counter(&#39;ABCABC&#39;)</span>
<span class="sd"> &gt;&gt;&gt; sorted(c.elements())</span>
<span class="sd"> [&#39;A&#39;, &#39;A&#39;, &#39;B&#39;, &#39;B&#39;, &#39;C&#39;, &#39;C&#39;]</span>
<span class="sd"> # Knuth&#39;s example for prime factors of 1836: 2**2 * 3**3 * 17**1</span>
<span class="sd"> &gt;&gt;&gt; prime_factors = Counter({2: 2, 3: 3, 17: 1})</span>
<span class="sd"> &gt;&gt;&gt; product = 1</span>
<span class="sd"> &gt;&gt;&gt; for factor in prime_factors.elements(): # loop over factors</span>
<span class="sd"> ... product *= factor # and multiply them</span>
<span class="sd"> &gt;&gt;&gt; product</span>
<span class="sd"> 1836</span>
<span class="sd"> Note, if an element&#39;s count has been set to zero or is a negative</span>
<span class="sd"> number, elements() will ignore it.</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="c1"># Emulate Bag.do from Smalltalk and Multiset.begin from C++.</span>
<span class="k">return</span> <span class="n">_chain</span><span class="o">.</span><span class="n">from_iterable</span><span class="p">(</span><span class="n">_starmap</span><span class="p">(</span><span class="n">_repeat</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">iteritems</span><span class="p">()))</span>
<span class="c1"># Override dict methods where necessary</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">fromkeys</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">iterable</span><span class="p">,</span> <span class="n">v</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="c1"># There is no equivalent method for counters because setting v=1</span>
<span class="c1"># means that no element can have a count greater than one.</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span>
<span class="s1">&#39;Counter.fromkeys() is undefined. Use Counter(iterable) instead.&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Like dict.update() but add counts instead of replacing them.</span>
<span class="sd"> Source can be an iterable, a dictionary, or another Counter instance.</span>
<span class="sd"> &gt;&gt;&gt; c = Counter(&#39;which&#39;)</span>
<span class="sd"> &gt;&gt;&gt; c.update(&#39;witch&#39;) # add elements from another iterable</span>
<span class="sd"> &gt;&gt;&gt; d = Counter(&#39;watch&#39;)</span>
<span class="sd"> &gt;&gt;&gt; c.update(d) # add elements from another counter</span>
<span class="sd"> &gt;&gt;&gt; c[&#39;h&#39;] # four &#39;h&#39; in which, witch, and watch</span>
<span class="sd"> 4</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="c1"># The regular dict.update() operation makes no sense here because the</span>
<span class="c1"># replace behavior results in the some of original untouched counts</span>
<span class="c1"># being mixed-in with all of the other counts for a mismash that</span>
<span class="c1"># doesn&#39;t have a straight-forward interpretation in most counting</span>
<span class="c1"># contexts. Instead, we implement straight-addition. Both the inputs</span>
<span class="c1"># and outputs are allowed to contain zero and negative counts.</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">args</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;descriptor &#39;update&#39; of &#39;Counter&#39; object &quot;</span>
<span class="s2">&quot;needs an argument&quot;</span><span class="p">)</span>
<span class="bp">self</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">args</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;expected at most 1 arguments, got </span><span class="si">%d</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">))</span>
<span class="n">iterable</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">args</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">iterable</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">iterable</span><span class="p">,</span> <span class="n">Mapping</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="p">:</span>
<span class="n">self_get</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span>
<span class="k">for</span> <span class="n">elem</span><span class="p">,</span> <span class="n">count</span> <span class="ow">in</span> <span class="n">iterable</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
<span class="bp">self</span><span class="p">[</span><span class="n">elem</span><span class="p">]</span> <span class="o">=</span> <span class="n">self_get</span><span class="p">(</span><span class="n">elem</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="n">count</span>
<span class="k">else</span><span class="p">:</span>
<span class="nb">super</span><span class="p">(</span><span class="n">Counter</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">iterable</span><span class="p">)</span> <span class="c1"># fast path when counter is empty</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">self_get</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span>
<span class="k">for</span> <span class="n">elem</span> <span class="ow">in</span> <span class="n">iterable</span><span class="p">:</span>
<span class="bp">self</span><span class="p">[</span><span class="n">elem</span><span class="p">]</span> <span class="o">=</span> <span class="n">self_get</span><span class="p">(</span><span class="n">elem</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">kwds</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kwds</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">subtract</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Like dict.update() but subtracts counts instead of replacing them.</span>
<span class="sd"> Counts can be reduced below zero. Both the inputs and outputs are</span>
<span class="sd"> allowed to contain zero and negative counts.</span>
<span class="sd"> Source can be an iterable, a dictionary, or another Counter instance.</span>
<span class="sd"> &gt;&gt;&gt; c = Counter(&#39;which&#39;)</span>
<span class="sd"> &gt;&gt;&gt; c.subtract(&#39;witch&#39;) # subtract elements from another iterable</span>
<span class="sd"> &gt;&gt;&gt; c.subtract(Counter(&#39;watch&#39;)) # subtract elements from another counter</span>
<span class="sd"> &gt;&gt;&gt; c[&#39;h&#39;] # 2 in which, minus 1 in witch, minus 1 in watch</span>
<span class="sd"> 0</span>
<span class="sd"> &gt;&gt;&gt; c[&#39;w&#39;] # 1 in which, minus 1 in witch, minus 1 in watch</span>
<span class="sd"> -1</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">args</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;descriptor &#39;subtract&#39; of &#39;Counter&#39; object &quot;</span>
<span class="s2">&quot;needs an argument&quot;</span><span class="p">)</span>
<span class="bp">self</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">args</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;expected at most 1 arguments, got </span><span class="si">%d</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">))</span>
<span class="n">iterable</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">args</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">iterable</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">self_get</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">iterable</span><span class="p">,</span> <span class="n">Mapping</span><span class="p">):</span>
<span class="k">for</span> <span class="n">elem</span><span class="p">,</span> <span class="n">count</span> <span class="ow">in</span> <span class="n">iterable</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="bp">self</span><span class="p">[</span><span class="n">elem</span><span class="p">]</span> <span class="o">=</span> <span class="n">self_get</span><span class="p">(</span><span class="n">elem</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-</span> <span class="n">count</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">for</span> <span class="n">elem</span> <span class="ow">in</span> <span class="n">iterable</span><span class="p">:</span>
<span class="bp">self</span><span class="p">[</span><span class="n">elem</span><span class="p">]</span> <span class="o">=</span> <span class="n">self_get</span><span class="p">(</span><span class="n">elem</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">kwds</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">subtract</span><span class="p">(</span><span class="n">kwds</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="s1">&#39;Return a shallow copy.&#39;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__reduce__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="p">(</span><span class="nb">dict</span><span class="p">(</span><span class="bp">self</span><span class="p">),)</span>
<span class="k">def</span> <span class="nf">__delitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">elem</span><span class="p">):</span>
<span class="s1">&#39;Like dict.__delitem__() but does not raise KeyError for missing values.&#39;</span>
<span class="k">if</span> <span class="n">elem</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">:</span>
<span class="nb">super</span><span class="p">(</span><span class="n">Counter</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__delitem__</span><span class="p">(</span><span class="n">elem</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="p">:</span>
<span class="k">return</span> <span class="s1">&#39;</span><span class="si">%s</span><span class="s1">()&#39;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span>
<span class="n">items</span> <span class="o">=</span> <span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%r</span><span class="s1">: </span><span class="si">%r</span><span class="s1">&#39;</span><span class="o">.</span><span class="fm">__mod__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">most_common</span><span class="p">()))</span>
<span class="k">return</span> <span class="s1">&#39;</span><span class="si">%s</span><span class="s1">({</span><span class="si">%s</span><span class="s1">})&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">items</span><span class="p">)</span>
<span class="c1"># Multiset-style mathematical operations discussed in:</span>
<span class="c1"># Knuth TAOCP Volume II section 4.6.3 exercise 19</span>
<span class="c1"># and at http://en.wikipedia.org/wiki/Multiset</span>
<span class="c1">#</span>
<span class="c1"># Outputs guaranteed to only include positive counts.</span>
<span class="c1">#</span>
<span class="c1"># To strip negative and zero counts, add-in an empty counter:</span>
<span class="c1"># c += Counter()</span>
<span class="k">def</span> <span class="nf">__add__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Add counts from two counters.</span>
<span class="sd"> &gt;&gt;&gt; Counter(&#39;abbb&#39;) + Counter(&#39;bcc&#39;)</span>
<span class="sd"> Counter({&#39;b&#39;: 4, &#39;c&#39;: 2, &#39;a&#39;: 1})</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Counter</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">NotImplemented</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">Counter</span><span class="p">()</span>
<span class="k">for</span> <span class="n">elem</span><span class="p">,</span> <span class="n">count</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">newcount</span> <span class="o">=</span> <span class="n">count</span> <span class="o">+</span> <span class="n">other</span><span class="p">[</span><span class="n">elem</span><span class="p">]</span>
<span class="k">if</span> <span class="n">newcount</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">result</span><span class="p">[</span><span class="n">elem</span><span class="p">]</span> <span class="o">=</span> <span class="n">newcount</span>
<span class="k">for</span> <span class="n">elem</span><span class="p">,</span> <span class="n">count</span> <span class="ow">in</span> <span class="n">other</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="n">elem</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span> <span class="ow">and</span> <span class="n">count</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">result</span><span class="p">[</span><span class="n">elem</span><span class="p">]</span> <span class="o">=</span> <span class="n">count</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">def</span> <span class="nf">__sub__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39; Subtract count, but keep only results with positive counts.</span>
<span class="sd"> &gt;&gt;&gt; Counter(&#39;abbbc&#39;) - Counter(&#39;bccd&#39;)</span>
<span class="sd"> Counter({&#39;b&#39;: 2, &#39;a&#39;: 1})</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Counter</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">NotImplemented</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">Counter</span><span class="p">()</span>
<span class="k">for</span> <span class="n">elem</span><span class="p">,</span> <span class="n">count</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">newcount</span> <span class="o">=</span> <span class="n">count</span> <span class="o">-</span> <span class="n">other</span><span class="p">[</span><span class="n">elem</span><span class="p">]</span>
<span class="k">if</span> <span class="n">newcount</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">result</span><span class="p">[</span><span class="n">elem</span><span class="p">]</span> <span class="o">=</span> <span class="n">newcount</span>
<span class="k">for</span> <span class="n">elem</span><span class="p">,</span> <span class="n">count</span> <span class="ow">in</span> <span class="n">other</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="n">elem</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span> <span class="ow">and</span> <span class="n">count</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">result</span><span class="p">[</span><span class="n">elem</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span> <span class="o">-</span> <span class="n">count</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">def</span> <span class="nf">__or__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Union is the maximum of value in either of the input counters.</span>
<span class="sd"> &gt;&gt;&gt; Counter(&#39;abbb&#39;) | Counter(&#39;bcc&#39;)</span>
<span class="sd"> Counter({&#39;b&#39;: 3, &#39;c&#39;: 2, &#39;a&#39;: 1})</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Counter</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">NotImplemented</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">Counter</span><span class="p">()</span>
<span class="k">for</span> <span class="n">elem</span><span class="p">,</span> <span class="n">count</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">other_count</span> <span class="o">=</span> <span class="n">other</span><span class="p">[</span><span class="n">elem</span><span class="p">]</span>
<span class="n">newcount</span> <span class="o">=</span> <span class="n">other_count</span> <span class="k">if</span> <span class="n">count</span> <span class="o">&lt;</span> <span class="n">other_count</span> <span class="k">else</span> <span class="n">count</span>
<span class="k">if</span> <span class="n">newcount</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">result</span><span class="p">[</span><span class="n">elem</span><span class="p">]</span> <span class="o">=</span> <span class="n">newcount</span>
<span class="k">for</span> <span class="n">elem</span><span class="p">,</span> <span class="n">count</span> <span class="ow">in</span> <span class="n">other</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="n">elem</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span> <span class="ow">and</span> <span class="n">count</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">result</span><span class="p">[</span><span class="n">elem</span><span class="p">]</span> <span class="o">=</span> <span class="n">count</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">def</span> <span class="nf">__and__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39; Intersection is the minimum of corresponding counts.</span>
<span class="sd"> &gt;&gt;&gt; Counter(&#39;abbb&#39;) &amp; Counter(&#39;bcc&#39;)</span>
<span class="sd"> Counter({&#39;b&#39;: 1})</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Counter</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">NotImplemented</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">Counter</span><span class="p">()</span>
<span class="k">for</span> <span class="n">elem</span><span class="p">,</span> <span class="n">count</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">other_count</span> <span class="o">=</span> <span class="n">other</span><span class="p">[</span><span class="n">elem</span><span class="p">]</span>
<span class="n">newcount</span> <span class="o">=</span> <span class="n">count</span> <span class="k">if</span> <span class="n">count</span> <span class="o">&lt;</span> <span class="n">other_count</span> <span class="k">else</span> <span class="n">other_count</span>
<span class="k">if</span> <span class="n">newcount</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">result</span><span class="p">[</span><span class="n">elem</span><span class="p">]</span> <span class="o">=</span> <span class="n">newcount</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
<span class="c1"># verify that instances can be pickled</span>
<span class="kn">from</span> <span class="nn">cPickle</span> <span class="k">import</span> <span class="n">loads</span><span class="p">,</span> <span class="n">dumps</span>
<span class="n">Point</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s1">&#39;Point&#39;</span><span class="p">,</span> <span class="s1">&#39;x, y&#39;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">Point</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mi">20</span><span class="p">)</span>
<span class="k">assert</span> <span class="n">p</span> <span class="o">==</span> <span class="n">loads</span><span class="p">(</span><span class="n">dumps</span><span class="p">(</span><span class="n">p</span><span class="p">))</span>
<span class="c1"># test and demonstrate ability to override methods</span>
<span class="k">class</span> <span class="nc">Point</span><span class="p">(</span><span class="n">namedtuple</span><span class="p">(</span><span class="s1">&#39;Point&#39;</span><span class="p">,</span> <span class="s1">&#39;x y&#39;</span><span class="p">)):</span>
<span class="vm">__slots__</span> <span class="o">=</span> <span class="p">()</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">hypot</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">**</span> <span class="mi">2</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">y</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span> <span class="o">**</span> <span class="mf">0.5</span>
<span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s1">&#39;Point: x=</span><span class="si">%6.3f</span><span class="s1"> y=</span><span class="si">%6.3f</span><span class="s1"> hypot=</span><span class="si">%6.3f</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">y</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">hypot</span><span class="p">)</span>
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">Point</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">),</span> <span class="n">Point</span><span class="p">(</span><span class="mi">14</span><span class="p">,</span> <span class="mi">5</span><span class="o">/</span><span class="mf">7.</span><span class="p">):</span>
<span class="nb">print</span> <span class="n">p</span>
<span class="k">class</span> <span class="nc">Point</span><span class="p">(</span><span class="n">namedtuple</span><span class="p">(</span><span class="s1">&#39;Point&#39;</span><span class="p">,</span> <span class="s1">&#39;x y&#39;</span><span class="p">)):</span>
<span class="s1">&#39;Point class with optimized _make() and _replace() without error-checking&#39;</span>
<span class="vm">__slots__</span> <span class="o">=</span> <span class="p">()</span>
<span class="n">_make</span> <span class="o">=</span> <span class="nb">classmethod</span><span class="p">(</span><span class="nb">tuple</span><span class="o">.</span><span class="fm">__new__</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_replace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_map</span><span class="o">=</span><span class="nb">map</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_make</span><span class="p">(</span><span class="n">_map</span><span class="p">(</span><span class="n">kwds</span><span class="o">.</span><span class="n">get</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;x&#39;</span><span class="p">,</span> <span class="s1">&#39;y&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="p">))</span>
<span class="nb">print</span> <span class="n">Point</span><span class="p">(</span><span class="mi">11</span><span class="p">,</span> <span class="mi">22</span><span class="p">)</span><span class="o">.</span><span class="n">_replace</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="mi">100</span><span class="p">)</span>
<span class="n">Point3D</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s1">&#39;Point3D&#39;</span><span class="p">,</span> <span class="n">Point</span><span class="o">.</span><span class="n">_fields</span> <span class="o">+</span> <span class="p">(</span><span class="s1">&#39;z&#39;</span><span class="p">,))</span>
<span class="nb">print</span> <span class="n">Point3D</span><span class="o">.</span><span class="vm">__doc__</span>
<span class="kn">import</span> <span class="nn">doctest</span>
<span class="n">TestResults</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s1">&#39;TestResults&#39;</span><span class="p">,</span> <span class="s1">&#39;failed attempted&#39;</span><span class="p">)</span>
<span class="nb">print</span> <span class="n">TestResults</span><span class="p">(</span><span class="o">*</span><span class="n">doctest</span><span class="o">.</span><span class="n">testmod</span><span class="p">())</span>
</pre></div>
</div>
</div>
<footer>
<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>

View File

@ -0,0 +1,276 @@
<!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>Overview: module code &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"/>
<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>
<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"><a class="reference internal" href="../binaryninja.flowgraph-module.html">flowgraph</a></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>Overview: module code</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>All modules for which code is available</h1>
<ul><li><a href="__builtin__.html">__builtin__</a></li>
<li><a href="binaryninja.html">binaryninja</a></li>
<ul><li><a href="binaryninja/architecture.html">binaryninja.architecture</a></li>
<li><a href="binaryninja/basicblock.html">binaryninja.basicblock</a></li>
<li><a href="binaryninja/binaryview.html">binaryninja.binaryview</a></li>
<li><a href="binaryninja/callingconvention.html">binaryninja.callingconvention</a></li>
<li><a href="binaryninja/databuffer.html">binaryninja.databuffer</a></li>
<li><a href="binaryninja/datarender.html">binaryninja.datarender</a></li>
<li><a href="binaryninja/demangle.html">binaryninja.demangle</a></li>
<li><a href="binaryninja/downloadprovider.html">binaryninja.downloadprovider</a></li>
<li><a href="binaryninja/enums.html">binaryninja.enums</a></li>
<li><a href="binaryninja/fileaccessor.html">binaryninja.fileaccessor</a></li>
<li><a href="binaryninja/filemetadata.html">binaryninja.filemetadata</a></li>
<li><a href="binaryninja/flowgraph.html">binaryninja.flowgraph</a></li>
<li><a href="binaryninja/function.html">binaryninja.function</a></li>
<li><a href="binaryninja/functionrecognizer.html">binaryninja.functionrecognizer</a></li>
<li><a href="binaryninja/highlight.html">binaryninja.highlight</a></li>
<li><a href="binaryninja/interaction.html">binaryninja.interaction</a></li>
<li><a href="binaryninja/lineardisassembly.html">binaryninja.lineardisassembly</a></li>
<li><a href="binaryninja/log.html">binaryninja.log</a></li>
<li><a href="binaryninja/lowlevelil.html">binaryninja.lowlevelil</a></li>
<li><a href="binaryninja/mainthread.html">binaryninja.mainthread</a></li>
<li><a href="binaryninja/mediumlevelil.html">binaryninja.mediumlevelil</a></li>
<li><a href="binaryninja/metadata.html">binaryninja.metadata</a></li>
<li><a href="binaryninja/platform.html">binaryninja.platform</a></li>
<li><a href="binaryninja/plugin.html">binaryninja.plugin</a></li>
<li><a href="binaryninja/pluginmanager.html">binaryninja.pluginmanager</a></li>
<li><a href="binaryninja/scriptingprovider.html">binaryninja.scriptingprovider</a></li>
<li><a href="binaryninja/settings.html">binaryninja.settings</a></li>
<li><a href="binaryninja/transform.html">binaryninja.transform</a></li>
<li><a href="binaryninja/types.html">binaryninja.types</a></li>
<li><a href="binaryninja/undoaction.html">binaryninja.undoaction</a></li>
<li><a href="binaryninja/update.html">binaryninja.update</a></li>
</ul><li><a href="collections.html">collections</a></li>
<li><a href="urllib2.html">urllib2</a></li>
</ul>
</div>
</div>
<footer>
<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>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,5 @@
Architecture
============
.. doxygenclass:: BinaryNinja::Architecture
:members:
:protected-members:

View File

@ -0,0 +1,4 @@
BinaryView
===========
.. doxygenclass:: BinaryNinja::BinaryView
:members:

View File

@ -0,0 +1,29 @@
Console Logging
===============
BNLogLevel
----------
.. doxygenenum:: BNLogLevel
Log
---
.. doxygenfunction:: Log
LogDebug
--------
.. doxygenfunction:: LogDebug
LogInfo
--------
.. doxygenfunction:: LogInfo
LogWarn
--------
.. doxygenfunction:: LogWarn
LogError
--------
.. doxygenfunction:: LogError
LogAlert
--------
.. doxygenfunction:: LogAlert

View File

@ -0,0 +1,3 @@
Platform
=========
.. doxygenclass:: BinaryNinja::Platform

View File

@ -0,0 +1,22 @@
architecture module
=====================
.. autosummary::
:toctree:
binaryninja.architecture.Architecture
binaryninja.architecture.ArchitectureHook
binaryninja.architecture.CoreArchitecture
binaryninja.architecture.ReferenceSource
binaryninja.architecture.long
binaryninja.architecture.range
binaryninja.architecture.with_metaclass
.. toctree::
:maxdepth: 2
.. automodule:: binaryninja.architecture
:members:
:undoc-members:
:show-inheritance:

View File

@ -0,0 +1,120 @@
binaryninja.architecture.Architecture
=====================================
.. currentmodule:: binaryninja.architecture
.. autoclass:: Architecture
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~Architecture.__init__
~Architecture.always_branch
~Architecture.assemble
~Architecture.convert_to_nop
~Architecture.get_associated_arch_by_address
~Architecture.get_default_flag_condition_low_level_il
~Architecture.get_default_flag_write_low_level_il
~Architecture.get_flag_by_name
~Architecture.get_flag_condition_low_level_il
~Architecture.get_flag_index
~Architecture.get_flag_name
~Architecture.get_flag_role
~Architecture.get_flag_write_low_level_il
~Architecture.get_flag_write_type_by_name
~Architecture.get_flag_write_type_name
~Architecture.get_flags_required_for_flag_condition
~Architecture.get_instruction_info
~Architecture.get_instruction_low_level_il
~Architecture.get_instruction_low_level_il_instruction
~Architecture.get_instruction_text
~Architecture.get_intrinsic_index
~Architecture.get_intrinsic_name
~Architecture.get_low_level_il_from_bytes
~Architecture.get_modified_regs_on_write
~Architecture.get_reg_index
~Architecture.get_reg_name
~Architecture.get_reg_stack_for_reg
~Architecture.get_reg_stack_index
~Architecture.get_reg_stack_name
~Architecture.get_semantic_flag_class_by_name
~Architecture.get_semantic_flag_class_index
~Architecture.get_semantic_flag_class_name
~Architecture.get_semantic_flag_group_by_name
~Architecture.get_semantic_flag_group_index
~Architecture.get_semantic_flag_group_low_level_il
~Architecture.get_semantic_flag_group_name
~Architecture.get_view_type_constant
~Architecture.invert_branch
~Architecture.is_always_branch_patch_available
~Architecture.is_invert_branch_patch_available
~Architecture.is_never_branch_patch_available
~Architecture.is_skip_and_return_value_patch_available
~Architecture.is_skip_and_return_zero_patch_available
~Architecture.is_view_type_constant_defined
~Architecture.perform_always_branch
~Architecture.perform_assemble
~Architecture.perform_convert_to_nop
~Architecture.perform_get_associated_arch_by_address
~Architecture.perform_get_flag_condition_low_level_il
~Architecture.perform_get_flag_role
~Architecture.perform_get_flag_write_low_level_il
~Architecture.perform_get_flags_required_for_flag_condition
~Architecture.perform_get_instruction_info
~Architecture.perform_get_instruction_low_level_il
~Architecture.perform_get_instruction_text
~Architecture.perform_get_semantic_flag_group_low_level_il
~Architecture.perform_invert_branch
~Architecture.perform_is_always_branch_patch_available
~Architecture.perform_is_invert_branch_patch_available
~Architecture.perform_is_never_branch_patch_available
~Architecture.perform_is_skip_and_return_value_patch_available
~Architecture.perform_is_skip_and_return_zero_patch_available
~Architecture.perform_skip_and_return_value
~Architecture.register_calling_convention
~Architecture.set_view_type_constant
~Architecture.skip_and_return_value
.. rubric:: Attributes
.. autosummary::
~Architecture.address_size
~Architecture.calling_conventions
~Architecture.default_int_size
~Architecture.endianness
~Architecture.flag_conditions_for_semantic_flag_group
~Architecture.flag_roles
~Architecture.flag_write_types
~Architecture.flags
~Architecture.flags_required_for_flag_condition
~Architecture.flags_required_for_semantic_flag_group
~Architecture.flags_written_by_flag_write_type
~Architecture.full_width_regs
~Architecture.global_regs
~Architecture.instr_alignment
~Architecture.intrinsics
~Architecture.link_reg
~Architecture.list
~Architecture.max_instr_length
~Architecture.name
~Architecture.next_address
~Architecture.opcode_display_length
~Architecture.reg_stacks
~Architecture.regs
~Architecture.semantic_class_for_flag_write_type
~Architecture.semantic_flag_classes
~Architecture.semantic_flag_groups
~Architecture.stack_pointer
~Architecture.standalone_platform

View File

@ -0,0 +1,121 @@
binaryninja.architecture.ArchitectureHook
=========================================
.. currentmodule:: binaryninja.architecture
.. autoclass:: ArchitectureHook
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~ArchitectureHook.__init__
~ArchitectureHook.always_branch
~ArchitectureHook.assemble
~ArchitectureHook.convert_to_nop
~ArchitectureHook.get_associated_arch_by_address
~ArchitectureHook.get_default_flag_condition_low_level_il
~ArchitectureHook.get_default_flag_write_low_level_il
~ArchitectureHook.get_flag_by_name
~ArchitectureHook.get_flag_condition_low_level_il
~ArchitectureHook.get_flag_index
~ArchitectureHook.get_flag_name
~ArchitectureHook.get_flag_role
~ArchitectureHook.get_flag_write_low_level_il
~ArchitectureHook.get_flag_write_type_by_name
~ArchitectureHook.get_flag_write_type_name
~ArchitectureHook.get_flags_required_for_flag_condition
~ArchitectureHook.get_instruction_info
~ArchitectureHook.get_instruction_low_level_il
~ArchitectureHook.get_instruction_low_level_il_instruction
~ArchitectureHook.get_instruction_text
~ArchitectureHook.get_intrinsic_index
~ArchitectureHook.get_intrinsic_name
~ArchitectureHook.get_low_level_il_from_bytes
~ArchitectureHook.get_modified_regs_on_write
~ArchitectureHook.get_reg_index
~ArchitectureHook.get_reg_name
~ArchitectureHook.get_reg_stack_for_reg
~ArchitectureHook.get_reg_stack_index
~ArchitectureHook.get_reg_stack_name
~ArchitectureHook.get_semantic_flag_class_by_name
~ArchitectureHook.get_semantic_flag_class_index
~ArchitectureHook.get_semantic_flag_class_name
~ArchitectureHook.get_semantic_flag_group_by_name
~ArchitectureHook.get_semantic_flag_group_index
~ArchitectureHook.get_semantic_flag_group_low_level_il
~ArchitectureHook.get_semantic_flag_group_name
~ArchitectureHook.get_view_type_constant
~ArchitectureHook.invert_branch
~ArchitectureHook.is_always_branch_patch_available
~ArchitectureHook.is_invert_branch_patch_available
~ArchitectureHook.is_never_branch_patch_available
~ArchitectureHook.is_skip_and_return_value_patch_available
~ArchitectureHook.is_skip_and_return_zero_patch_available
~ArchitectureHook.is_view_type_constant_defined
~ArchitectureHook.perform_always_branch
~ArchitectureHook.perform_assemble
~ArchitectureHook.perform_convert_to_nop
~ArchitectureHook.perform_get_associated_arch_by_address
~ArchitectureHook.perform_get_flag_condition_low_level_il
~ArchitectureHook.perform_get_flag_role
~ArchitectureHook.perform_get_flag_write_low_level_il
~ArchitectureHook.perform_get_flags_required_for_flag_condition
~ArchitectureHook.perform_get_instruction_info
~ArchitectureHook.perform_get_instruction_low_level_il
~ArchitectureHook.perform_get_instruction_text
~ArchitectureHook.perform_get_semantic_flag_group_low_level_il
~ArchitectureHook.perform_invert_branch
~ArchitectureHook.perform_is_always_branch_patch_available
~ArchitectureHook.perform_is_invert_branch_patch_available
~ArchitectureHook.perform_is_never_branch_patch_available
~ArchitectureHook.perform_is_skip_and_return_value_patch_available
~ArchitectureHook.perform_is_skip_and_return_zero_patch_available
~ArchitectureHook.perform_skip_and_return_value
~ArchitectureHook.register
~ArchitectureHook.register_calling_convention
~ArchitectureHook.set_view_type_constant
~ArchitectureHook.skip_and_return_value
.. rubric:: Attributes
.. autosummary::
~ArchitectureHook.address_size
~ArchitectureHook.calling_conventions
~ArchitectureHook.default_int_size
~ArchitectureHook.endianness
~ArchitectureHook.flag_conditions_for_semantic_flag_group
~ArchitectureHook.flag_roles
~ArchitectureHook.flag_write_types
~ArchitectureHook.flags
~ArchitectureHook.flags_required_for_flag_condition
~ArchitectureHook.flags_required_for_semantic_flag_group
~ArchitectureHook.flags_written_by_flag_write_type
~ArchitectureHook.full_width_regs
~ArchitectureHook.global_regs
~ArchitectureHook.instr_alignment
~ArchitectureHook.intrinsics
~ArchitectureHook.link_reg
~ArchitectureHook.list
~ArchitectureHook.max_instr_length
~ArchitectureHook.name
~ArchitectureHook.next_address
~ArchitectureHook.opcode_display_length
~ArchitectureHook.reg_stacks
~ArchitectureHook.regs
~ArchitectureHook.semantic_class_for_flag_write_type
~ArchitectureHook.semantic_flag_classes
~ArchitectureHook.semantic_flag_groups
~ArchitectureHook.stack_pointer
~ArchitectureHook.standalone_platform

View File

@ -0,0 +1,120 @@
binaryninja.architecture.CoreArchitecture
=========================================
.. currentmodule:: binaryninja.architecture
.. autoclass:: CoreArchitecture
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~CoreArchitecture.__init__
~CoreArchitecture.always_branch
~CoreArchitecture.assemble
~CoreArchitecture.convert_to_nop
~CoreArchitecture.get_associated_arch_by_address
~CoreArchitecture.get_default_flag_condition_low_level_il
~CoreArchitecture.get_default_flag_write_low_level_il
~CoreArchitecture.get_flag_by_name
~CoreArchitecture.get_flag_condition_low_level_il
~CoreArchitecture.get_flag_index
~CoreArchitecture.get_flag_name
~CoreArchitecture.get_flag_role
~CoreArchitecture.get_flag_write_low_level_il
~CoreArchitecture.get_flag_write_type_by_name
~CoreArchitecture.get_flag_write_type_name
~CoreArchitecture.get_flags_required_for_flag_condition
~CoreArchitecture.get_instruction_info
~CoreArchitecture.get_instruction_low_level_il
~CoreArchitecture.get_instruction_low_level_il_instruction
~CoreArchitecture.get_instruction_text
~CoreArchitecture.get_intrinsic_index
~CoreArchitecture.get_intrinsic_name
~CoreArchitecture.get_low_level_il_from_bytes
~CoreArchitecture.get_modified_regs_on_write
~CoreArchitecture.get_reg_index
~CoreArchitecture.get_reg_name
~CoreArchitecture.get_reg_stack_for_reg
~CoreArchitecture.get_reg_stack_index
~CoreArchitecture.get_reg_stack_name
~CoreArchitecture.get_semantic_flag_class_by_name
~CoreArchitecture.get_semantic_flag_class_index
~CoreArchitecture.get_semantic_flag_class_name
~CoreArchitecture.get_semantic_flag_group_by_name
~CoreArchitecture.get_semantic_flag_group_index
~CoreArchitecture.get_semantic_flag_group_low_level_il
~CoreArchitecture.get_semantic_flag_group_name
~CoreArchitecture.get_view_type_constant
~CoreArchitecture.invert_branch
~CoreArchitecture.is_always_branch_patch_available
~CoreArchitecture.is_invert_branch_patch_available
~CoreArchitecture.is_never_branch_patch_available
~CoreArchitecture.is_skip_and_return_value_patch_available
~CoreArchitecture.is_skip_and_return_zero_patch_available
~CoreArchitecture.is_view_type_constant_defined
~CoreArchitecture.perform_always_branch
~CoreArchitecture.perform_assemble
~CoreArchitecture.perform_convert_to_nop
~CoreArchitecture.perform_get_associated_arch_by_address
~CoreArchitecture.perform_get_flag_condition_low_level_il
~CoreArchitecture.perform_get_flag_role
~CoreArchitecture.perform_get_flag_write_low_level_il
~CoreArchitecture.perform_get_flags_required_for_flag_condition
~CoreArchitecture.perform_get_instruction_info
~CoreArchitecture.perform_get_instruction_low_level_il
~CoreArchitecture.perform_get_instruction_text
~CoreArchitecture.perform_get_semantic_flag_group_low_level_il
~CoreArchitecture.perform_invert_branch
~CoreArchitecture.perform_is_always_branch_patch_available
~CoreArchitecture.perform_is_invert_branch_patch_available
~CoreArchitecture.perform_is_never_branch_patch_available
~CoreArchitecture.perform_is_skip_and_return_value_patch_available
~CoreArchitecture.perform_is_skip_and_return_zero_patch_available
~CoreArchitecture.perform_skip_and_return_value
~CoreArchitecture.register_calling_convention
~CoreArchitecture.set_view_type_constant
~CoreArchitecture.skip_and_return_value
.. rubric:: Attributes
.. autosummary::
~CoreArchitecture.address_size
~CoreArchitecture.calling_conventions
~CoreArchitecture.default_int_size
~CoreArchitecture.endianness
~CoreArchitecture.flag_conditions_for_semantic_flag_group
~CoreArchitecture.flag_roles
~CoreArchitecture.flag_write_types
~CoreArchitecture.flags
~CoreArchitecture.flags_required_for_flag_condition
~CoreArchitecture.flags_required_for_semantic_flag_group
~CoreArchitecture.flags_written_by_flag_write_type
~CoreArchitecture.full_width_regs
~CoreArchitecture.global_regs
~CoreArchitecture.instr_alignment
~CoreArchitecture.intrinsics
~CoreArchitecture.link_reg
~CoreArchitecture.list
~CoreArchitecture.max_instr_length
~CoreArchitecture.name
~CoreArchitecture.next_address
~CoreArchitecture.opcode_display_length
~CoreArchitecture.reg_stacks
~CoreArchitecture.regs
~CoreArchitecture.semantic_class_for_flag_write_type
~CoreArchitecture.semantic_flag_classes
~CoreArchitecture.semantic_flag_groups
~CoreArchitecture.stack_pointer
~CoreArchitecture.standalone_platform

View File

@ -0,0 +1,22 @@
binaryninja.architecture.ReferenceSource
========================================
.. currentmodule:: binaryninja.architecture
.. autoclass:: ReferenceSource
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~ReferenceSource.__init__

View File

@ -0,0 +1,32 @@
binaryninja.architecture.long
=============================
.. currentmodule:: binaryninja.architecture
.. autoclass:: long
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~long.bit_length
~long.conjugate
.. rubric:: Attributes
.. autosummary::
~long.denominator
~long.imag
~long.numerator
~long.real

View File

@ -0,0 +1,6 @@
binaryninja.architecture.range
==============================
.. currentmodule:: binaryninja.architecture
.. autofunction:: range

View File

@ -0,0 +1,6 @@
binaryninja.architecture.with\_metaclass
========================================
.. currentmodule:: binaryninja.architecture
.. autofunction:: with_metaclass

View File

@ -0,0 +1,16 @@
atexit module
=====================
.. autosummary::
:toctree:
binaryninja.atexit.register
.. toctree::
:maxdepth: 2
.. automodule:: binaryninja.atexit
:members:
:undoc-members:
:show-inheritance:

View File

@ -0,0 +1,6 @@
binaryninja.atexit.register
===========================
.. currentmodule:: binaryninja.atexit
.. autofunction:: register

View File

@ -0,0 +1,18 @@
basicblock module
=====================
.. autosummary::
:toctree:
binaryninja.basicblock.BasicBlock
binaryninja.basicblock.BasicBlockEdge
binaryninja.basicblock.range
.. toctree::
:maxdepth: 2
.. automodule:: binaryninja.basicblock
:members:
:undoc-members:
:show-inheritance:

View File

@ -0,0 +1,53 @@
binaryninja.basicblock.BasicBlock
=================================
.. currentmodule:: binaryninja.basicblock
.. autoclass:: BasicBlock
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~BasicBlock.__init__
~BasicBlock.get_disassembly_text
~BasicBlock.get_iterated_dominance_frontier
~BasicBlock.mark_recent_use
~BasicBlock.set_auto_highlight
~BasicBlock.set_user_highlight
.. rubric:: Attributes
.. autosummary::
~BasicBlock.annotations
~BasicBlock.arch
~BasicBlock.can_exit
~BasicBlock.disassembly_text
~BasicBlock.dominance_frontier
~BasicBlock.dominator_tree_children
~BasicBlock.dominators
~BasicBlock.end
~BasicBlock.function
~BasicBlock.has_undetermined_outgoing_edges
~BasicBlock.highlight
~BasicBlock.immediate_dominator
~BasicBlock.incoming_edges
~BasicBlock.index
~BasicBlock.is_il
~BasicBlock.is_low_level_il
~BasicBlock.is_medium_level_il
~BasicBlock.length
~BasicBlock.outgoing_edges
~BasicBlock.start
~BasicBlock.strict_dominators

View File

@ -0,0 +1,22 @@
binaryninja.basicblock.BasicBlockEdge
=====================================
.. currentmodule:: binaryninja.basicblock
.. autoclass:: BasicBlockEdge
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~BasicBlockEdge.__init__

View File

@ -0,0 +1,6 @@
binaryninja.basicblock.range
============================
.. currentmodule:: binaryninja.basicblock
.. autofunction:: range

View File

@ -0,0 +1,35 @@
binaryview module
=====================
.. autosummary::
:toctree:
binaryninja.binaryview.ActiveAnalysisInfo
binaryninja.binaryview.AddressRange
binaryninja.binaryview.AnalysisCompletionEvent
binaryninja.binaryview.AnalysisInfo
binaryninja.binaryview.AnalysisProgress
binaryninja.binaryview.BinaryDataNotification
binaryninja.binaryview.BinaryDataNotificationCallbacks
binaryninja.binaryview.BinaryReader
binaryninja.binaryview.BinaryView
binaryninja.binaryview.BinaryViewType
binaryninja.binaryview.BinaryWriter
binaryninja.binaryview.DataVariable
binaryninja.binaryview.OrderedDict
binaryninja.binaryview.Section
binaryninja.binaryview.Segment
binaryninja.binaryview.StringReference
binaryninja.binaryview.StructuredDataValue
binaryninja.binaryview.StructuredDataView
binaryninja.binaryview.range
binaryninja.binaryview.with_metaclass
.. toctree::
:maxdepth: 2
.. automodule:: binaryninja.binaryview
:members:
:undoc-members:
:show-inheritance:

View File

@ -0,0 +1,22 @@
binaryninja.binaryview.ActiveAnalysisInfo
=========================================
.. currentmodule:: binaryninja.binaryview
.. autoclass:: ActiveAnalysisInfo
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~ActiveAnalysisInfo.__init__

View File

@ -0,0 +1,28 @@
binaryninja.binaryview.AddressRange
===================================
.. currentmodule:: binaryninja.binaryview
.. autoclass:: AddressRange
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~AddressRange.__init__
.. rubric:: Attributes
.. autosummary::
~AddressRange.length

View File

@ -0,0 +1,23 @@
binaryninja.binaryview.AnalysisCompletionEvent
==============================================
.. currentmodule:: binaryninja.binaryview
.. autoclass:: AnalysisCompletionEvent
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~AnalysisCompletionEvent.__init__
~AnalysisCompletionEvent.cancel

View File

@ -0,0 +1,22 @@
binaryninja.binaryview.AnalysisInfo
===================================
.. currentmodule:: binaryninja.binaryview
.. autoclass:: AnalysisInfo
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~AnalysisInfo.__init__

View File

@ -0,0 +1,22 @@
binaryninja.binaryview.AnalysisProgress
=======================================
.. currentmodule:: binaryninja.binaryview
.. autoclass:: AnalysisProgress
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~AnalysisProgress.__init__

View File

@ -0,0 +1,36 @@
binaryninja.binaryview.BinaryDataNotification
=============================================
.. currentmodule:: binaryninja.binaryview
.. autoclass:: BinaryDataNotification
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~BinaryDataNotification.__init__
~BinaryDataNotification.data_inserted
~BinaryDataNotification.data_removed
~BinaryDataNotification.data_var_added
~BinaryDataNotification.data_var_removed
~BinaryDataNotification.data_var_updated
~BinaryDataNotification.data_written
~BinaryDataNotification.function_added
~BinaryDataNotification.function_removed
~BinaryDataNotification.function_update_requested
~BinaryDataNotification.function_updated
~BinaryDataNotification.string_found
~BinaryDataNotification.string_removed
~BinaryDataNotification.type_defined
~BinaryDataNotification.type_undefined

View File

@ -0,0 +1,22 @@
binaryninja.binaryview.BinaryDataNotificationCallbacks
======================================================
.. currentmodule:: binaryninja.binaryview
.. autoclass:: BinaryDataNotificationCallbacks
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~BinaryDataNotificationCallbacks.__init__

View File

@ -0,0 +1,43 @@
binaryninja.binaryview.BinaryReader
===================================
.. currentmodule:: binaryninja.binaryview
.. autoclass:: BinaryReader
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~BinaryReader.__init__
~BinaryReader.read
~BinaryReader.read16
~BinaryReader.read16be
~BinaryReader.read16le
~BinaryReader.read32
~BinaryReader.read32be
~BinaryReader.read32le
~BinaryReader.read64
~BinaryReader.read64be
~BinaryReader.read64le
~BinaryReader.read8
~BinaryReader.seek
~BinaryReader.seek_relative
.. rubric:: Attributes
.. autosummary::
~BinaryReader.endianness
~BinaryReader.eof
~BinaryReader.offset

View File

@ -0,0 +1,229 @@
binaryninja.binaryview.BinaryView
=================================
.. currentmodule:: binaryninja.binaryview
.. autoclass:: BinaryView
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~BinaryView.__init__
~BinaryView.abort_analysis
~BinaryView.add_analysis_completion_event
~BinaryView.add_analysis_option
~BinaryView.add_auto_section
~BinaryView.add_auto_segment
~BinaryView.add_entry_point
~BinaryView.add_function
~BinaryView.add_undo_action
~BinaryView.add_user_section
~BinaryView.add_user_segment
~BinaryView.always_branch
~BinaryView.begin_undo_actions
~BinaryView.commit_undo_actions
~BinaryView.convert_to_nop
~BinaryView.create_database
~BinaryView.create_user_function
~BinaryView.define_auto_symbol
~BinaryView.define_auto_symbol_and_var_or_function
~BinaryView.define_data_var
~BinaryView.define_imported_function
~BinaryView.define_type
~BinaryView.define_user_data_var
~BinaryView.define_user_symbol
~BinaryView.define_user_type
~BinaryView.eval
~BinaryView.external_namespace
~BinaryView.find_next_constant
~BinaryView.find_next_data
~BinaryView.find_next_text
~BinaryView.get_address_for_data_offset
~BinaryView.get_address_input
~BinaryView.get_basic_blocks_at
~BinaryView.get_basic_blocks_starting_at
~BinaryView.get_code_refs
~BinaryView.get_data_refs
~BinaryView.get_data_var_at
~BinaryView.get_disassembly
~BinaryView.get_function_at
~BinaryView.get_functions_at
~BinaryView.get_functions_containing
~BinaryView.get_instruction_length
~BinaryView.get_linear_disassembly
~BinaryView.get_linear_disassembly_position_at
~BinaryView.get_modification
~BinaryView.get_next_basic_block_start_after
~BinaryView.get_next_data_after
~BinaryView.get_next_data_var_after
~BinaryView.get_next_disassembly
~BinaryView.get_next_function_start_after
~BinaryView.get_next_linear_disassembly_lines
~BinaryView.get_previous_basic_block_end_before
~BinaryView.get_previous_basic_block_start_before
~BinaryView.get_previous_data_before
~BinaryView.get_previous_data_var_before
~BinaryView.get_previous_function_start_before
~BinaryView.get_previous_linear_disassembly_lines
~BinaryView.get_recent_basic_block_at
~BinaryView.get_recent_function_at
~BinaryView.get_section_by_name
~BinaryView.get_sections_at
~BinaryView.get_segment_at
~BinaryView.get_strings
~BinaryView.get_symbol_at
~BinaryView.get_symbol_by_raw_name
~BinaryView.get_symbols
~BinaryView.get_symbols_by_name
~BinaryView.get_symbols_of_type
~BinaryView.get_type_by_id
~BinaryView.get_type_by_name
~BinaryView.get_type_id
~BinaryView.get_type_name_by_id
~BinaryView.get_unique_section_names
~BinaryView.get_view_of_type
~BinaryView.init
~BinaryView.insert
~BinaryView.internal_namespace
~BinaryView.invert_branch
~BinaryView.is_always_branch_patch_available
~BinaryView.is_invert_branch_patch_available
~BinaryView.is_never_branch_patch_available
~BinaryView.is_offset_code_semantics
~BinaryView.is_offset_executable
~BinaryView.is_offset_extern_semantics
~BinaryView.is_offset_readable
~BinaryView.is_offset_writable
~BinaryView.is_offset_writable_semantics
~BinaryView.is_skip_and_return_value_patch_available
~BinaryView.is_skip_and_return_zero_patch_available
~BinaryView.is_type_auto_defined
~BinaryView.is_valid_offset
~BinaryView.navigate
~BinaryView.never_branch
~BinaryView.new
~BinaryView.notify_data_inserted
~BinaryView.notify_data_removed
~BinaryView.notify_data_written
~BinaryView.open
~BinaryView.parse_expression
~BinaryView.parse_type_string
~BinaryView.perform_get_address_size
~BinaryView.perform_get_default_endianness
~BinaryView.perform_get_entry_point
~BinaryView.perform_get_length
~BinaryView.perform_get_modification
~BinaryView.perform_get_next_valid_offset
~BinaryView.perform_get_start
~BinaryView.perform_insert
~BinaryView.perform_is_executable
~BinaryView.perform_is_offset_executable
~BinaryView.perform_is_offset_readable
~BinaryView.perform_is_offset_writable
~BinaryView.perform_is_relocatable
~BinaryView.perform_is_valid_offset
~BinaryView.perform_read
~BinaryView.perform_remove
~BinaryView.perform_save
~BinaryView.perform_write
~BinaryView.query_metadata
~BinaryView.read
~BinaryView.reanalyze
~BinaryView.redo
~BinaryView.register
~BinaryView.register_notification
~BinaryView.register_platform_types
~BinaryView.relocation_ranges_at
~BinaryView.remove
~BinaryView.remove_auto_section
~BinaryView.remove_auto_segment
~BinaryView.remove_function
~BinaryView.remove_metadata
~BinaryView.remove_user_function
~BinaryView.remove_user_section
~BinaryView.remove_user_segment
~BinaryView.rename_type
~BinaryView.save
~BinaryView.save_auto_snapshot
~BinaryView.set_default_session_data
~BinaryView.show_graph_report
~BinaryView.show_html_report
~BinaryView.show_markdown_report
~BinaryView.show_plain_text_report
~BinaryView.skip_and_return_value
~BinaryView.store_metadata
~BinaryView.undefine_auto_symbol
~BinaryView.undefine_data_var
~BinaryView.undefine_type
~BinaryView.undefine_user_data_var
~BinaryView.undefine_user_symbol
~BinaryView.undefine_user_type
~BinaryView.undo
~BinaryView.unregister_notification
~BinaryView.update_analysis
~BinaryView.update_analysis_and_wait
~BinaryView.write
.. rubric:: Attributes
.. autosummary::
~BinaryView.address_size
~BinaryView.allocated_ranges
~BinaryView.analysis_changed
~BinaryView.analysis_info
~BinaryView.analysis_progress
~BinaryView.arch
~BinaryView.available_view_types
~BinaryView.basic_blocks
~BinaryView.data_vars
~BinaryView.end
~BinaryView.endianness
~BinaryView.entry_function
~BinaryView.entry_point
~BinaryView.executable
~BinaryView.functions
~BinaryView.global_pointer_value
~BinaryView.has_database
~BinaryView.has_functions
~BinaryView.instructions
~BinaryView.linear_disassembly
~BinaryView.llil_basic_blocks
~BinaryView.llil_instructions
~BinaryView.long_name
~BinaryView.max_function_size_for_analysis
~BinaryView.mlil_basic_blocks
~BinaryView.mlil_instructions
~BinaryView.modified
~BinaryView.name
~BinaryView.namespaces
~BinaryView.new_auto_function_analysis_suppressed
~BinaryView.next_address
~BinaryView.offset
~BinaryView.parameters_for_analysis
~BinaryView.parent_view
~BinaryView.platform
~BinaryView.registered_view_type
~BinaryView.relocatable
~BinaryView.relocation_ranges
~BinaryView.saved
~BinaryView.sections
~BinaryView.segments
~BinaryView.session_data
~BinaryView.start
~BinaryView.strings
~BinaryView.symbols
~BinaryView.types
~BinaryView.view
~BinaryView.view_type

View File

@ -0,0 +1,39 @@
binaryninja.binaryview.BinaryViewType
=====================================
.. currentmodule:: binaryninja.binaryview
.. autoclass:: BinaryViewType
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~BinaryViewType.__init__
~BinaryViewType.create
~BinaryViewType.get_arch
~BinaryViewType.get_platform
~BinaryViewType.get_view_of_file
~BinaryViewType.is_valid_for_data
~BinaryViewType.open
~BinaryViewType.register_arch
~BinaryViewType.register_default_platform
~BinaryViewType.register_platform
.. rubric:: Attributes
.. autosummary::
~BinaryViewType.list
~BinaryViewType.long_name
~BinaryViewType.name

View File

@ -0,0 +1,42 @@
binaryninja.binaryview.BinaryWriter
===================================
.. currentmodule:: binaryninja.binaryview
.. autoclass:: BinaryWriter
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~BinaryWriter.__init__
~BinaryWriter.seek
~BinaryWriter.seek_relative
~BinaryWriter.write
~BinaryWriter.write16
~BinaryWriter.write16be
~BinaryWriter.write16le
~BinaryWriter.write32
~BinaryWriter.write32be
~BinaryWriter.write32le
~BinaryWriter.write64
~BinaryWriter.write64be
~BinaryWriter.write64le
~BinaryWriter.write8
.. rubric:: Attributes
.. autosummary::
~BinaryWriter.endianness
~BinaryWriter.offset

View File

@ -0,0 +1,22 @@
binaryninja.binaryview.DataVariable
===================================
.. currentmodule:: binaryninja.binaryview
.. autoclass:: DataVariable
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~DataVariable.__init__

View File

@ -0,0 +1,40 @@
binaryninja.binaryview.OrderedDict
==================================
.. currentmodule:: binaryninja.binaryview
.. autoclass:: OrderedDict
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~OrderedDict.__init__
~OrderedDict.clear
~OrderedDict.copy
~OrderedDict.fromkeys
~OrderedDict.get
~OrderedDict.has_key
~OrderedDict.items
~OrderedDict.iteritems
~OrderedDict.iterkeys
~OrderedDict.itervalues
~OrderedDict.keys
~OrderedDict.pop
~OrderedDict.popitem
~OrderedDict.setdefault
~OrderedDict.update
~OrderedDict.values
~OrderedDict.viewitems
~OrderedDict.viewkeys
~OrderedDict.viewvalues

View File

@ -0,0 +1,38 @@
binaryninja.binaryview.Section
==============================
.. currentmodule:: binaryninja.binaryview
.. autoclass:: Section
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~Section.__init__
.. rubric:: Attributes
.. autosummary::
~Section.align
~Section.auto_defined
~Section.end
~Section.entry_size
~Section.info_data
~Section.info_section
~Section.linked_section
~Section.name
~Section.semantics
~Section.start
~Section.type

View File

@ -0,0 +1,38 @@
binaryninja.binaryview.Segment
==============================
.. currentmodule:: binaryninja.binaryview
.. autoclass:: Segment
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~Segment.__init__
~Segment.relocation_ranges_at
.. rubric:: Attributes
.. autosummary::
~Segment.data_end
~Segment.data_length
~Segment.data_offset
~Segment.end
~Segment.executable
~Segment.readable
~Segment.relocation_count
~Segment.relocation_ranges
~Segment.start
~Segment.writable

View File

@ -0,0 +1,28 @@
binaryninja.binaryview.StringReference
======================================
.. currentmodule:: binaryninja.binaryview
.. autoclass:: StringReference
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~StringReference.__init__
.. rubric:: Attributes
.. autosummary::
~StringReference.value

View File

@ -0,0 +1,33 @@
binaryninja.binaryview.StructuredDataValue
==========================================
.. currentmodule:: binaryninja.binaryview
.. autoclass:: StructuredDataValue
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~StructuredDataValue.__init__
.. rubric:: Attributes
.. autosummary::
~StructuredDataValue.address
~StructuredDataValue.int
~StructuredDataValue.str
~StructuredDataValue.type
~StructuredDataValue.value
~StructuredDataValue.width

View File

@ -0,0 +1,22 @@
binaryninja.binaryview.StructuredDataView
=========================================
.. currentmodule:: binaryninja.binaryview
.. autoclass:: StructuredDataView
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~StructuredDataView.__init__

View File

@ -0,0 +1,6 @@
binaryninja.binaryview.range
============================
.. currentmodule:: binaryninja.binaryview
.. autofunction:: range

View File

@ -0,0 +1,6 @@
binaryninja.binaryview.with\_metaclass
======================================
.. currentmodule:: binaryninja.binaryview
.. autofunction:: with_metaclass

View File

@ -0,0 +1,17 @@
callingconvention module
=====================
.. autosummary::
:toctree:
binaryninja.callingconvention.CallingConvention
binaryninja.callingconvention.range
.. toctree::
:maxdepth: 2
.. automodule:: binaryninja.callingconvention
:members:
:undoc-members:
:show-inheritance:

View File

@ -0,0 +1,49 @@
binaryninja.callingconvention.CallingConvention
===============================================
.. currentmodule:: binaryninja.callingconvention
.. autoclass:: CallingConvention
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~CallingConvention.__init__
~CallingConvention.get_incoming_flag_value
~CallingConvention.get_incoming_reg_value
~CallingConvention.get_incoming_var_for_parameter_var
~CallingConvention.get_parameter_var_for_incoming_var
~CallingConvention.perform_get_incoming_flag_value
~CallingConvention.perform_get_incoming_reg_value
~CallingConvention.perform_get_incoming_var_for_parameter_var
~CallingConvention.perform_get_parameter_var_for_incoming_var
~CallingConvention.with_confidence
.. rubric:: Attributes
.. autosummary::
~CallingConvention.arg_regs_share_index
~CallingConvention.callee_saved_regs
~CallingConvention.caller_saved_regs
~CallingConvention.float_arg_regs
~CallingConvention.float_return_reg
~CallingConvention.global_pointer_reg
~CallingConvention.high_int_return_reg
~CallingConvention.implicitly_defined_regs
~CallingConvention.int_arg_regs
~CallingConvention.int_return_reg
~CallingConvention.name
~CallingConvention.stack_adjusted_on_return
~CallingConvention.stack_reserved_for_arg_regs

View File

@ -0,0 +1,6 @@
binaryninja.callingconvention.range
===================================
.. currentmodule:: binaryninja.callingconvention
.. autofunction:: range

View File

@ -0,0 +1,20 @@
databuffer module
=====================
.. autosummary::
:toctree:
binaryninja.databuffer.DataBuffer
binaryninja.databuffer.long
binaryninja.databuffer.escape_string
binaryninja.databuffer.pyNativeStr
binaryninja.databuffer.unescape_string
.. toctree::
:maxdepth: 2
.. automodule:: binaryninja.databuffer
:members:
:undoc-members:
:show-inheritance:

View File

@ -0,0 +1,28 @@
binaryninja.databuffer.DataBuffer
=================================
.. currentmodule:: binaryninja.databuffer
.. autoclass:: DataBuffer
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~DataBuffer.__init__
~DataBuffer.base64_decode
~DataBuffer.base64_encode
~DataBuffer.escape
~DataBuffer.unescape
~DataBuffer.zlib_compress
~DataBuffer.zlib_decompress

View File

@ -0,0 +1,6 @@
binaryninja.databuffer.escape\_string
=====================================
.. currentmodule:: binaryninja.databuffer
.. autofunction:: escape_string

View File

@ -0,0 +1,32 @@
binaryninja.databuffer.long
===========================
.. currentmodule:: binaryninja.databuffer
.. autoclass:: long
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~long.bit_length
~long.conjugate
.. rubric:: Attributes
.. autosummary::
~long.denominator
~long.imag
~long.numerator
~long.real

View File

@ -0,0 +1,6 @@
binaryninja.databuffer.pyNativeStr
==================================
.. currentmodule:: binaryninja.databuffer
.. autofunction:: pyNativeStr

View File

@ -0,0 +1,6 @@
binaryninja.databuffer.unescape\_string
=======================================
.. currentmodule:: binaryninja.databuffer
.. autofunction:: unescape_string

View File

@ -0,0 +1,22 @@
datarender module
=====================
.. autosummary::
:toctree:
binaryninja.datarender.BinaryView
binaryninja.datarender.DataRenderer
binaryninja.datarender.DisassemblyTextLine
binaryninja.datarender.FileMetadata
binaryninja.datarender.InstructionTextToken
binaryninja.datarender.Type
binaryninja.datarender.log_error
.. toctree::
:maxdepth: 2
.. automodule:: binaryninja.datarender
:members:
:undoc-members:
:show-inheritance:

View File

@ -0,0 +1,229 @@
binaryninja.datarender.BinaryView
=================================
.. currentmodule:: binaryninja.datarender
.. autoclass:: BinaryView
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~BinaryView.__init__
~BinaryView.abort_analysis
~BinaryView.add_analysis_completion_event
~BinaryView.add_analysis_option
~BinaryView.add_auto_section
~BinaryView.add_auto_segment
~BinaryView.add_entry_point
~BinaryView.add_function
~BinaryView.add_undo_action
~BinaryView.add_user_section
~BinaryView.add_user_segment
~BinaryView.always_branch
~BinaryView.begin_undo_actions
~BinaryView.commit_undo_actions
~BinaryView.convert_to_nop
~BinaryView.create_database
~BinaryView.create_user_function
~BinaryView.define_auto_symbol
~BinaryView.define_auto_symbol_and_var_or_function
~BinaryView.define_data_var
~BinaryView.define_imported_function
~BinaryView.define_type
~BinaryView.define_user_data_var
~BinaryView.define_user_symbol
~BinaryView.define_user_type
~BinaryView.eval
~BinaryView.external_namespace
~BinaryView.find_next_constant
~BinaryView.find_next_data
~BinaryView.find_next_text
~BinaryView.get_address_for_data_offset
~BinaryView.get_address_input
~BinaryView.get_basic_blocks_at
~BinaryView.get_basic_blocks_starting_at
~BinaryView.get_code_refs
~BinaryView.get_data_refs
~BinaryView.get_data_var_at
~BinaryView.get_disassembly
~BinaryView.get_function_at
~BinaryView.get_functions_at
~BinaryView.get_functions_containing
~BinaryView.get_instruction_length
~BinaryView.get_linear_disassembly
~BinaryView.get_linear_disassembly_position_at
~BinaryView.get_modification
~BinaryView.get_next_basic_block_start_after
~BinaryView.get_next_data_after
~BinaryView.get_next_data_var_after
~BinaryView.get_next_disassembly
~BinaryView.get_next_function_start_after
~BinaryView.get_next_linear_disassembly_lines
~BinaryView.get_previous_basic_block_end_before
~BinaryView.get_previous_basic_block_start_before
~BinaryView.get_previous_data_before
~BinaryView.get_previous_data_var_before
~BinaryView.get_previous_function_start_before
~BinaryView.get_previous_linear_disassembly_lines
~BinaryView.get_recent_basic_block_at
~BinaryView.get_recent_function_at
~BinaryView.get_section_by_name
~BinaryView.get_sections_at
~BinaryView.get_segment_at
~BinaryView.get_strings
~BinaryView.get_symbol_at
~BinaryView.get_symbol_by_raw_name
~BinaryView.get_symbols
~BinaryView.get_symbols_by_name
~BinaryView.get_symbols_of_type
~BinaryView.get_type_by_id
~BinaryView.get_type_by_name
~BinaryView.get_type_id
~BinaryView.get_type_name_by_id
~BinaryView.get_unique_section_names
~BinaryView.get_view_of_type
~BinaryView.init
~BinaryView.insert
~BinaryView.internal_namespace
~BinaryView.invert_branch
~BinaryView.is_always_branch_patch_available
~BinaryView.is_invert_branch_patch_available
~BinaryView.is_never_branch_patch_available
~BinaryView.is_offset_code_semantics
~BinaryView.is_offset_executable
~BinaryView.is_offset_extern_semantics
~BinaryView.is_offset_readable
~BinaryView.is_offset_writable
~BinaryView.is_offset_writable_semantics
~BinaryView.is_skip_and_return_value_patch_available
~BinaryView.is_skip_and_return_zero_patch_available
~BinaryView.is_type_auto_defined
~BinaryView.is_valid_offset
~BinaryView.navigate
~BinaryView.never_branch
~BinaryView.new
~BinaryView.notify_data_inserted
~BinaryView.notify_data_removed
~BinaryView.notify_data_written
~BinaryView.open
~BinaryView.parse_expression
~BinaryView.parse_type_string
~BinaryView.perform_get_address_size
~BinaryView.perform_get_default_endianness
~BinaryView.perform_get_entry_point
~BinaryView.perform_get_length
~BinaryView.perform_get_modification
~BinaryView.perform_get_next_valid_offset
~BinaryView.perform_get_start
~BinaryView.perform_insert
~BinaryView.perform_is_executable
~BinaryView.perform_is_offset_executable
~BinaryView.perform_is_offset_readable
~BinaryView.perform_is_offset_writable
~BinaryView.perform_is_relocatable
~BinaryView.perform_is_valid_offset
~BinaryView.perform_read
~BinaryView.perform_remove
~BinaryView.perform_save
~BinaryView.perform_write
~BinaryView.query_metadata
~BinaryView.read
~BinaryView.reanalyze
~BinaryView.redo
~BinaryView.register
~BinaryView.register_notification
~BinaryView.register_platform_types
~BinaryView.relocation_ranges_at
~BinaryView.remove
~BinaryView.remove_auto_section
~BinaryView.remove_auto_segment
~BinaryView.remove_function
~BinaryView.remove_metadata
~BinaryView.remove_user_function
~BinaryView.remove_user_section
~BinaryView.remove_user_segment
~BinaryView.rename_type
~BinaryView.save
~BinaryView.save_auto_snapshot
~BinaryView.set_default_session_data
~BinaryView.show_graph_report
~BinaryView.show_html_report
~BinaryView.show_markdown_report
~BinaryView.show_plain_text_report
~BinaryView.skip_and_return_value
~BinaryView.store_metadata
~BinaryView.undefine_auto_symbol
~BinaryView.undefine_data_var
~BinaryView.undefine_type
~BinaryView.undefine_user_data_var
~BinaryView.undefine_user_symbol
~BinaryView.undefine_user_type
~BinaryView.undo
~BinaryView.unregister_notification
~BinaryView.update_analysis
~BinaryView.update_analysis_and_wait
~BinaryView.write
.. rubric:: Attributes
.. autosummary::
~BinaryView.address_size
~BinaryView.allocated_ranges
~BinaryView.analysis_changed
~BinaryView.analysis_info
~BinaryView.analysis_progress
~BinaryView.arch
~BinaryView.available_view_types
~BinaryView.basic_blocks
~BinaryView.data_vars
~BinaryView.end
~BinaryView.endianness
~BinaryView.entry_function
~BinaryView.entry_point
~BinaryView.executable
~BinaryView.functions
~BinaryView.global_pointer_value
~BinaryView.has_database
~BinaryView.has_functions
~BinaryView.instructions
~BinaryView.linear_disassembly
~BinaryView.llil_basic_blocks
~BinaryView.llil_instructions
~BinaryView.long_name
~BinaryView.max_function_size_for_analysis
~BinaryView.mlil_basic_blocks
~BinaryView.mlil_instructions
~BinaryView.modified
~BinaryView.name
~BinaryView.namespaces
~BinaryView.new_auto_function_analysis_suppressed
~BinaryView.next_address
~BinaryView.offset
~BinaryView.parameters_for_analysis
~BinaryView.parent_view
~BinaryView.platform
~BinaryView.registered_view_type
~BinaryView.relocatable
~BinaryView.relocation_ranges
~BinaryView.saved
~BinaryView.sections
~BinaryView.segments
~BinaryView.session_data
~BinaryView.start
~BinaryView.strings
~BinaryView.symbols
~BinaryView.types
~BinaryView.view
~BinaryView.view_type

View File

@ -0,0 +1,28 @@
binaryninja.datarender.DataRenderer
===================================
.. currentmodule:: binaryninja.datarender
.. autoclass:: DataRenderer
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~DataRenderer.__init__
~DataRenderer.is_type_of_struct_name
~DataRenderer.perform_free_object
~DataRenderer.perform_get_lines_for_data
~DataRenderer.perform_is_valid_for_data
~DataRenderer.register_generic
~DataRenderer.register_type_specific

View File

@ -0,0 +1,22 @@
binaryninja.datarender.DisassemblyTextLine
==========================================
.. currentmodule:: binaryninja.datarender
.. autoclass:: DisassemblyTextLine
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~DisassemblyTextLine.__init__

View File

@ -0,0 +1,49 @@
binaryninja.datarender.FileMetadata
===================================
.. currentmodule:: binaryninja.datarender
.. autoclass:: FileMetadata
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~FileMetadata.__init__
~FileMetadata.begin_undo_actions
~FileMetadata.close
~FileMetadata.commit_undo_actions
~FileMetadata.create_database
~FileMetadata.get_view_of_type
~FileMetadata.navigate
~FileMetadata.open_existing_database
~FileMetadata.redo
~FileMetadata.save_auto_snapshot
~FileMetadata.set_default_session_data
~FileMetadata.undo
.. rubric:: Attributes
.. autosummary::
~FileMetadata.analysis_changed
~FileMetadata.filename
~FileMetadata.has_database
~FileMetadata.modified
~FileMetadata.navigation
~FileMetadata.offset
~FileMetadata.original_filename
~FileMetadata.raw
~FileMetadata.saved
~FileMetadata.session_data
~FileMetadata.view

View File

@ -0,0 +1,23 @@
binaryninja.datarender.InstructionTextToken
===========================================
.. currentmodule:: binaryninja.datarender
.. autoclass:: InstructionTextToken
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~InstructionTextToken.__init__
~InstructionTextToken.get_instruction_lines

View File

@ -0,0 +1,70 @@
binaryninja.datarender.Type
===========================
.. currentmodule:: binaryninja.datarender
.. autoclass:: Type
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~Type.__init__
~Type.array
~Type.bool
~Type.char
~Type.enumeration_type
~Type.float
~Type.function
~Type.generate_auto_demangled_type_id
~Type.generate_auto_type_id
~Type.get_auto_demangled_type_id_source
~Type.get_string_after_name
~Type.get_string_before_name
~Type.get_tokens
~Type.get_tokens_after_name
~Type.get_tokens_before_name
~Type.int
~Type.named_type
~Type.named_type_from_registered_type
~Type.named_type_from_type
~Type.named_type_from_type_and_id
~Type.pointer
~Type.structure_type
~Type.void
~Type.with_confidence
.. rubric:: Attributes
.. autosummary::
~Type.alignment
~Type.calling_convention
~Type.can_return
~Type.const
~Type.count
~Type.element_type
~Type.enumeration
~Type.has_variable_arguments
~Type.modified
~Type.named_type_reference
~Type.offset
~Type.parameters
~Type.return_value
~Type.signed
~Type.stack_adjustment
~Type.structure
~Type.target
~Type.tokens
~Type.type_class
~Type.width

View File

@ -0,0 +1,6 @@
binaryninja.datarender.log\_error
=================================
.. currentmodule:: binaryninja.datarender
.. autofunction:: log_error

View File

@ -0,0 +1,20 @@
demangle module
=====================
.. autosummary::
:toctree:
binaryninja.demangle.demangle_gnu3
binaryninja.demangle.demangle_ms
binaryninja.demangle.get_qualified_name
binaryninja.demangle.pyNativeStr
binaryninja.demangle.range
.. toctree::
:maxdepth: 2
.. automodule:: binaryninja.demangle
:members:
:undoc-members:
:show-inheritance:

View File

@ -0,0 +1,6 @@
binaryninja.demangle.demangle\_gnu3
===================================
.. currentmodule:: binaryninja.demangle
.. autofunction:: demangle_gnu3

View File

@ -0,0 +1,6 @@
binaryninja.demangle.demangle\_ms
=================================
.. currentmodule:: binaryninja.demangle
.. autofunction:: demangle_ms

View File

@ -0,0 +1,6 @@
binaryninja.demangle.get\_qualified\_name
=========================================
.. currentmodule:: binaryninja.demangle
.. autofunction:: get_qualified_name

View File

@ -0,0 +1,6 @@
binaryninja.demangle.pyNativeStr
================================
.. currentmodule:: binaryninja.demangle
.. autofunction:: pyNativeStr

Some files were not shown because too many files have changed in this diff Show More