diff --git a/personal/api-docs/Architecture_c++.html b/personal/api-docs/Architecture_c++.html new file mode 100644 index 0000000..e7926b9 --- /dev/null +++ b/personal/api-docs/Architecture_c++.html @@ -0,0 +1,249 @@ + + + + + + + + + + + Architecture — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

Architecture

+
+

Warning

+

doxygenclass: Cannot find file: /var/lib/jenkins/jobs/binaryninja-personal/workspace/os/linux/api/xml/index.xml

+
+
+ + +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/BinaryView_c++.html b/personal/api-docs/BinaryView_c++.html new file mode 100644 index 0000000..a3e1227 --- /dev/null +++ b/personal/api-docs/BinaryView_c++.html @@ -0,0 +1,249 @@ + + + + + + + + + + + BinaryView — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

BinaryView

+
+

Warning

+

doxygenclass: Cannot find file: /var/lib/jenkins/jobs/binaryninja-personal/workspace/os/linux/api/xml/index.xml

+
+
+ + +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/ConsoleLogging_c++.html b/personal/api-docs/ConsoleLogging_c++.html new file mode 100644 index 0000000..ca81f2b --- /dev/null +++ b/personal/api-docs/ConsoleLogging_c++.html @@ -0,0 +1,294 @@ + + + + + + + + + + + Console Logging — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

Console Logging

+
+

BNLogLevel

+
+

Warning

+

doxygenenum: Cannot find file: /var/lib/jenkins/jobs/binaryninja-personal/workspace/os/linux/api/xml/index.xml

+
+
+
+

Log

+
+

Warning

+

doxygenfunction: Cannot find file: /var/lib/jenkins/jobs/binaryninja-personal/workspace/os/linux/api/xml/index.xml

+
+
+
+

LogDebug

+
+

Warning

+

doxygenfunction: Cannot find file: /var/lib/jenkins/jobs/binaryninja-personal/workspace/os/linux/api/xml/index.xml

+
+
+
+

LogInfo

+
+

Warning

+

doxygenfunction: Cannot find file: /var/lib/jenkins/jobs/binaryninja-personal/workspace/os/linux/api/xml/index.xml

+
+
+
+

LogWarn

+
+

Warning

+

doxygenfunction: Cannot find file: /var/lib/jenkins/jobs/binaryninja-personal/workspace/os/linux/api/xml/index.xml

+
+
+
+

LogError

+
+

Warning

+

doxygenfunction: Cannot find file: /var/lib/jenkins/jobs/binaryninja-personal/workspace/os/linux/api/xml/index.xml

+
+
+
+

LogAlert

+
+

Warning

+

doxygenfunction: Cannot find file: /var/lib/jenkins/jobs/binaryninja-personal/workspace/os/linux/api/xml/index.xml

+
+
+
+ + +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/Platform_c++.html b/personal/api-docs/Platform_c++.html new file mode 100644 index 0000000..4b9480f --- /dev/null +++ b/personal/api-docs/Platform_c++.html @@ -0,0 +1,249 @@ + + + + + + + + + + + Platform — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

Platform

+
+

Warning

+

doxygenclass: Cannot find file: /var/lib/jenkins/jobs/binaryninja-personal/workspace/os/linux/api/xml/index.xml

+
+
+ + +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja.html b/personal/api-docs/_modules/binaryninja.html new file mode 100644 index 0000000..db55aa2 --- /dev/null +++ b/personal/api-docs/_modules/binaryninja.html @@ -0,0 +1,545 @@ + + + + + + + + + + + binaryninja — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja

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

Source code for binaryninja.architecture

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+from __future__ import absolute_import
+import traceback
+import ctypes
+import abc
+
+# Binary Ninja components
+from binaryninja import _binaryninjacore as core
+from binaryninja.enums import (Endianness, ImplicitRegisterExtend, BranchType,
+	InstructionTextTokenType, LowLevelILFlagCondition, FlagRole)
+import binaryninja
+from binaryninja import log
+from binaryninja import lowlevelil
+from binaryninja import types
+from binaryninja import databuffer
+from binaryninja import platform
+from binaryninja import callingconvention
+
+# 2-3 compatibility
+from binaryninja import range
+from binaryninja import with_metaclass
+from binaryninja import long
+
+class _ArchitectureMetaClass(type):
+
+	@property
+	def list(self):
+		binaryninja._init_plugins()
+		count = ctypes.c_ulonglong()
+		archs = core.BNGetArchitectureList(count)
+		result = []
+		for i in range(0, count.value):
+			result.append(CoreArchitecture._from_cache(archs[i]))
+		core.BNFreeArchitectureList(archs)
+		return result
+
+	def __iter__(self):
+		binaryninja._init_plugins()
+		count = ctypes.c_ulonglong()
+		archs = core.BNGetArchitectureList(count)
+		try:
+			for i in range(0, count.value):
+				yield CoreArchitecture._from_cache(archs[i])
+		finally:
+			core.BNFreeArchitectureList(archs)
+
+	def __getitem__(cls, name):
+		binaryninja._init_plugins()
+		arch = core.BNGetArchitectureByName(name)
+		if arch is None:
+			raise KeyError("'%s' is not a valid architecture" % str(name))
+		return CoreArchitecture._from_cache(arch)
+
+	def register(cls):
+		binaryninja._init_plugins()
+		if cls.name is None:
+			raise ValueError("architecture 'name' is not defined")
+		arch = cls()
+		cls._registered_cb = arch._cb
+		arch.handle = core.BNRegisterArchitecture(cls.name, arch._cb)
+
+	def __setattr__(self, name, value):
+		try:
+			type.__setattr__(self, name, value)
+		except AttributeError:
+			raise AttributeError("attribute '%s' is read only" % name)
+
+
+
[docs]class Architecture(with_metaclass(_ArchitectureMetaClass, object)): + """ + ``class Architecture`` is the parent class for all CPU architectures. Subclasses of Architecture implement assembly, + disassembly, IL lifting, and patching. + + ``class Architecture`` has a metaclass with the additional methods ``register``, and supports + iteration:: + + >>> #List the architectures + >>> list(Architecture) + [<arch: aarch64>, <arch: armv7>, <arch: armv7eb>, <arch: mipsel32>, <arch: mips32>, <arch: powerpc>, + <arch: x86>, <arch: x86_64>] + >>> #Register a new Architecture + >>> class MyArch(Architecture): + ... name = "MyArch" + ... + >>> MyArch.register() + >>> list(Architecture) + [<arch: aarch64>, <arch: armv7>, <arch: armv7eb>, <arch: mipsel32>, <arch: mips32>, <arch: powerpc>, + <arch: x86>, <arch: x86_64>, <arch: MyArch>] + >>> + + For the purposes of this documentation the variable ``arch`` will be used in the following context :: + + >>> from binaryninja import * + >>> arch = Architecture['x86'] + """ + name = None + endianness = Endianness.LittleEndian + address_size = 8 + default_int_size = 4 + instr_alignment = 1 + max_instr_length = 16 + opcode_display_length = 8 + regs = {} + stack_pointer = None + link_reg = None + global_regs = [] + flags = [] + flag_write_types = [] + semantic_flag_classes = [] + semantic_flag_groups = [] + flag_roles = {} + flags_required_for_flag_condition = {} + flags_required_for_semantic_flag_group = {} + flag_conditions_for_semantic_flag_group = {} + flags_written_by_flag_write_type = {} + semantic_class_for_flag_write_type = {} + reg_stacks = {} + intrinsics = {} + next_address = 0 + +
[docs] def __init__(self): + binaryninja._init_plugins() + + if self.__class__.opcode_display_length > self.__class__.max_instr_length: + self.__class__.opcode_display_length = self.__class__.max_instr_length + + self._cb = core.BNCustomArchitecture() + self._cb.context = 0 + self._cb.init = self._cb.init.__class__(self._init) + self._cb.getEndianness = self._cb.getEndianness.__class__(self._get_endianness) + self._cb.getAddressSize = self._cb.getAddressSize.__class__(self._get_address_size) + self._cb.getDefaultIntegerSize = self._cb.getDefaultIntegerSize.__class__(self._get_default_integer_size) + self._cb.getInstructionAlignment = self._cb.getInstructionAlignment.__class__(self._get_instruction_alignment) + self._cb.getMaxInstructionLength = self._cb.getMaxInstructionLength.__class__(self._get_max_instruction_length) + self._cb.getOpcodeDisplayLength = self._cb.getOpcodeDisplayLength.__class__(self._get_opcode_display_length) + self._cb.getAssociatedArchitectureByAddress = \ + self._cb.getAssociatedArchitectureByAddress.__class__(self._get_associated_arch_by_address) + self._cb.getInstructionInfo = self._cb.getInstructionInfo.__class__(self._get_instruction_info) + self._cb.getInstructionText = self._cb.getInstructionText.__class__(self._get_instruction_text) + self._cb.freeInstructionText = self._cb.freeInstructionText.__class__(self._free_instruction_text) + self._cb.getInstructionLowLevelIL = self._cb.getInstructionLowLevelIL.__class__( + self._get_instruction_low_level_il) + self._cb.getRegisterName = self._cb.getRegisterName.__class__(self._get_register_name) + self._cb.getFlagName = self._cb.getFlagName.__class__(self._get_flag_name) + self._cb.getFlagWriteTypeName = self._cb.getFlagWriteTypeName.__class__(self._get_flag_write_type_name) + self._cb.getSemanticFlagClassName = self._cb.getSemanticFlagClassName.__class__(self._get_semantic_flag_class_name) + self._cb.getSemanticFlagGroupName = self._cb.getSemanticFlagGroupName.__class__(self._get_semantic_flag_group_name) + self._cb.getFullWidthRegisters = self._cb.getFullWidthRegisters.__class__(self._get_full_width_registers) + self._cb.getAllRegisters = self._cb.getAllRegisters.__class__(self._get_all_registers) + self._cb.getAllFlags = self._cb.getAllRegisters.__class__(self._get_all_flags) + self._cb.getAllFlagWriteTypes = self._cb.getAllRegisters.__class__(self._get_all_flag_write_types) + self._cb.getAllSemanticFlagClasses = self._cb.getAllSemanticFlagClasses.__class__(self._get_all_semantic_flag_classes) + self._cb.getAllSemanticFlagGroups = self._cb.getAllSemanticFlagGroups.__class__(self._get_all_semantic_flag_groups) + self._cb.getFlagRole = self._cb.getFlagRole.__class__(self._get_flag_role) + self._cb.getFlagsRequiredForFlagCondition = self._cb.getFlagsRequiredForFlagCondition.__class__( + self._get_flags_required_for_flag_condition) + self._cb.getFlagsRequiredForSemanticFlagGroup = self._cb.getFlagsRequiredForSemanticFlagGroup.__class__( + self._get_flags_required_for_semantic_flag_group) + self._cb.getFlagConditionsForSemanticFlagGroup = self._cb.getFlagConditionsForSemanticFlagGroup.__class__( + self._get_flag_conditions_for_semantic_flag_group) + self._cb.freeFlagConditionsForSemanticFlagGroup = self._cb.freeFlagConditionsForSemanticFlagGroup.__class__( + self._free_flag_conditions_for_semantic_flag_group) + self._cb.getFlagsWrittenByFlagWriteType = self._cb.getFlagsWrittenByFlagWriteType.__class__( + self._get_flags_written_by_flag_write_type) + self._cb.getSemanticClassForFlagWriteType = self._cb.getSemanticClassForFlagWriteType.__class__( + self._get_semantic_class_for_flag_write_type) + self._cb.getFlagWriteLowLevelIL = self._cb.getFlagWriteLowLevelIL.__class__( + self._get_flag_write_low_level_il) + self._cb.getFlagConditionLowLevelIL = self._cb.getFlagConditionLowLevelIL.__class__( + self._get_flag_condition_low_level_il) + self._cb.getSemanticFlagGroupLowLevelIL = self._cb.getSemanticFlagGroupLowLevelIL.__class__( + self._get_semantic_flag_group_low_level_il) + self._cb.freeRegisterList = self._cb.freeRegisterList.__class__(self._free_register_list) + self._cb.getRegisterInfo = self._cb.getRegisterInfo.__class__(self._get_register_info) + self._cb.getStackPointerRegister = self._cb.getStackPointerRegister.__class__( + self._get_stack_pointer_register) + self._cb.getLinkRegister = self._cb.getLinkRegister.__class__(self._get_link_register) + self._cb.getGlobalRegisters = self._cb.getGlobalRegisters.__class__(self._get_global_registers) + self._cb.getRegisterStackName = self._cb.getRegisterStackName.__class__(self._get_register_stack_name) + self._cb.getAllRegisterStacks = self._cb.getAllRegisterStacks.__class__(self._get_all_register_stacks) + self._cb.getRegisterStackInfo = self._cb.getRegisterStackInfo.__class__(self._get_register_stack_info) + self._cb.getIntrinsicName = self._cb.getIntrinsicName.__class__(self._get_intrinsic_name) + self._cb.getAllIntrinsics = self._cb.getAllIntrinsics.__class__(self._get_all_intrinsics) + self._cb.getIntrinsicInputs = self._cb.getIntrinsicInputs.__class__(self._get_intrinsic_inputs) + self._cb.freeNameAndTypeList = self._cb.freeNameAndTypeList.__class__(self._free_name_and_type_list) + self._cb.getIntrinsicOutputs = self._cb.getIntrinsicOutputs.__class__(self._get_intrinsic_outputs) + self._cb.freeTypeList = self._cb.freeTypeList.__class__(self._free_type_list) + self._cb.assemble = self._cb.assemble.__class__(self._assemble) + self._cb.isNeverBranchPatchAvailable = self._cb.isNeverBranchPatchAvailable.__class__( + self._is_never_branch_patch_available) + self._cb.isAlwaysBranchPatchAvailable = self._cb.isAlwaysBranchPatchAvailable.__class__( + self._is_always_branch_patch_available) + self._cb.isInvertBranchPatchAvailable = self._cb.isInvertBranchPatchAvailable.__class__( + self._is_invert_branch_patch_available) + self._cb.isSkipAndReturnZeroPatchAvailable = self._cb.isSkipAndReturnZeroPatchAvailable.__class__( + self._is_skip_and_return_zero_patch_available) + self._cb.isSkipAndReturnValuePatchAvailable = self._cb.isSkipAndReturnValuePatchAvailable.__class__( + self._is_skip_and_return_value_patch_available) + self._cb.convertToNop = self._cb.convertToNop.__class__(self._convert_to_nop) + self._cb.alwaysBranch = self._cb.alwaysBranch.__class__(self._always_branch) + self._cb.invertBranch = self._cb.invertBranch.__class__(self._invert_branch) + self._cb.skipAndReturnValue = self._cb.skipAndReturnValue.__class__(self._skip_and_return_value) + + self.__dict__["endianness"] = self.__class__.endianness + self.__dict__["address_size"] = self.__class__.address_size + self.__dict__["default_int_size"] = self.__class__.default_int_size + self.__dict__["instr_alignment"] = self.__class__.instr_alignment + self.__dict__["max_instr_length"] = self.__class__.max_instr_length + self.__dict__["opcode_display_length"] = self.__class__.opcode_display_length + self.__dict__["stack_pointer"] = self.__class__.stack_pointer + self.__dict__["link_reg"] = self.__class__.link_reg + + self._all_regs = {} + self._full_width_regs = {} + self._regs_by_index = {} + self.__dict__["regs"] = self.__class__.regs + reg_index = 0 + + # Registers used for storage in register stacks must be sequential, so allocate these in order first + self._all_reg_stacks = {} + self._reg_stacks_by_index = {} + self.__dict__["reg_stacks"] = self.__class__.reg_stacks + reg_stack_index = 0 + for reg_stack in self.reg_stacks: + info = self.reg_stacks[reg_stack] + for reg in info.storage_regs: + self._all_regs[reg] = reg_index + self._regs_by_index[reg_index] = reg + self.regs[reg].index = reg_index + reg_index += 1 + for reg in info.top_relative_regs: + self._all_regs[reg] = reg_index + self._regs_by_index[reg_index] = reg + self.regs[reg].index = reg_index + reg_index += 1 + if reg_stack not in self._all_reg_stacks: + self._all_reg_stacks[reg_stack] = reg_stack_index + self._reg_stacks_by_index[reg_stack_index] = reg_stack + self.reg_stacks[reg_stack].index = reg_stack_index + reg_stack_index += 1 + + for reg in self.regs: + info = self.regs[reg] + if reg not in self._all_regs: + self._all_regs[reg] = reg_index + self._regs_by_index[reg_index] = reg + self.regs[reg].index = reg_index + reg_index += 1 + if info.full_width_reg not in self._all_regs: + self._all_regs[info.full_width_reg] = reg_index + self._regs_by_index[reg_index] = info.full_width_reg + self.regs[info.full_width_reg].index = reg_index + reg_index += 1 + if info.full_width_reg not in self._full_width_regs: + self._full_width_regs[info.full_width_reg] = self._all_regs[info.full_width_reg] + + self._flags = {} + self._flags_by_index = {} + self.__dict__["flags"] = self.__class__.flags + flag_index = 0 + for flag in self.__class__.flags: + if flag not in self._flags: + self._flags[flag] = flag_index + self._flags_by_index[flag_index] = flag + flag_index += 1 + + self._flag_write_types = {} + self._flag_write_types_by_index = {} + self.__dict__["flag_write_types"] = self.__class__.flag_write_types + write_type_index = 0 + for write_type in self.__class__.flag_write_types: + if write_type not in self._flag_write_types: + self._flag_write_types[write_type] = write_type_index + self._flag_write_types_by_index[write_type_index] = write_type + write_type_index += 1 + + self._semantic_flag_classes = {} + self._semantic_flag_classes_by_index = {} + self.__dict__["semantic_flag_classes"] = self.__class__.semantic_flag_classes + semantic_class_index = 1 + for sem_class in self.__class__.semantic_flag_classes: + if sem_class not in self._semantic_flag_classes: + self._semantic_flag_classes[sem_class] = semantic_class_index + self._semantic_flag_classes_by_index[semantic_class_index] = sem_class + semantic_class_index += 1 + + self._semantic_flag_groups = {} + self._semantic_flag_groups_by_index = {} + self.__dict__["semantic_flag_groups"] = self.__class__.semantic_flag_groups + semantic_group_index = 0 + for sem_group in self.__class__.semantic_flag_groups: + if sem_group not in self._semantic_flag_groups: + self._semantic_flag_groups[sem_group] = semantic_group_index + self._semantic_flag_groups_by_index[semantic_group_index] = sem_group + semantic_group_index += 1 + + self._flag_roles = {} + self.__dict__["flag_roles"] = self.__class__.flag_roles + for flag in self.__class__.flag_roles: + role = self.__class__.flag_roles[flag] + if isinstance(role, str): + role = FlagRole[role] + self._flag_roles[self._flags[flag]] = role + + self.__dict__["flags_required_for_flag_condition"] = self.__class__.flags_required_for_flag_condition + + self._flags_required_by_semantic_flag_group = {} + self.__dict__["flags_required_for_semantic_flag_group"] = self.__class__.flags_required_for_semantic_flag_group + for group in self.__class__.flags_required_for_semantic_flag_group: + flags = [] + for flag in self.__class__.flags_required_for_semantic_flag_group[group]: + flags.append(self._flags[flag]) + self._flags_required_by_semantic_flag_group[self._semantic_flag_groups[group]] = flags + + self._flag_conditions_for_semantic_flag_group = {} + self.__dict__["flag_conditions_for_semantic_flag_group"] = self.__class__.flag_conditions_for_semantic_flag_group + for group in self.__class__.flag_conditions_for_semantic_flag_group: + class_cond = {} + for sem_class in self.__class__.flag_conditions_for_semantic_flag_group[group]: + if sem_class is None: + class_cond[0] = self.__class__.flag_conditions_for_semantic_flag_group[group][sem_class] + else: + class_cond[self._semantic_flag_classes[sem_class]] = self.__class__.flag_conditions_for_semantic_flag_group[group][sem_class] + self._flag_conditions_for_semantic_flag_group[self._semantic_flag_groups[group]] = class_cond + + self._flags_written_by_flag_write_type = {} + self.__dict__["flags_written_by_flag_write_type"] = self.__class__.flags_written_by_flag_write_type + for write_type in self.__class__.flags_written_by_flag_write_type: + flags = [] + for flag in self.__class__.flags_written_by_flag_write_type[write_type]: + flags.append(self._flags[flag]) + self._flags_written_by_flag_write_type[self._flag_write_types[write_type]] = flags + + self._semantic_class_for_flag_write_type = {} + self.__dict__["semantic_class_for_flag_write_type"] = self.__class__.semantic_class_for_flag_write_type + for write_type in self.__class__.semantic_class_for_flag_write_type: + sem_class = self.__class__.semantic_class_for_flag_write_type[write_type] + if sem_class in self._semantic_flag_classes: + sem_class_index = self._semantic_flag_classes[sem_class] + else: + sem_class_index = 0 + self._semantic_class_for_flag_write_type[self._flag_write_types[write_type]] = sem_class_index + + self.__dict__["global_regs"] = self.__class__.global_regs + + self._intrinsics = {} + self._intrinsics_by_index = {} + self.__dict__["intrinsics"] = self.__class__.intrinsics + intrinsic_index = 0 + for intrinsic in self.__class__.intrinsics.keys(): + if intrinsic not in self._intrinsics: + info = self.__class__.intrinsics[intrinsic] + for i in range(0, len(info.inputs)): + if isinstance(info.inputs[i], types.Type): + info.inputs[i] = binaryninja.function.IntrinsicInput(info.inputs[i]) + elif isinstance(info.inputs[i], tuple): + info.inputs[i] = binaryninja.function.IntrinsicInput(info.inputs[i][0], info.inputs[i][1]) + info.index = intrinsic_index + self._intrinsics[intrinsic] = intrinsic_index + self._intrinsics_by_index[intrinsic_index] = (intrinsic, info) + intrinsic_index += 1 + + self._pending_reg_lists = {} + self._pending_token_lists = {} + self._pending_condition_lists = {} + self._pending_name_and_type_lists = {} + self._pending_type_lists = {}
+ + def __eq__(self, value): + if not isinstance(value, Architecture): + return False + return ctypes.addressof(self.handle.contents) == ctypes.addressof(value.handle.contents) + + def __ne__(self, value): + if not isinstance(value, Architecture): + return True + return ctypes.addressof(self.handle.contents) != ctypes.addressof(value.handle.contents) + + @property + def list(self): + """Allow tab completion to discover metaclass list property""" + pass + + @property + def full_width_regs(self): + """List of full width register strings (read-only)""" + count = ctypes.c_ulonglong() + regs = core.BNGetFullWidthArchitectureRegisters(self.handle, count) + result = [] + for i in range(0, count.value): + result.append(core.BNGetArchitectureRegisterName(self.handle, regs[i])) + core.BNFreeRegisterList(regs) + return result + + @property + def calling_conventions(self): + """Dict of CallingConvention objects (read-only)""" + count = ctypes.c_ulonglong() + cc = core.BNGetArchitectureCallingConventions(self.handle, count) + result = {} + for i in range(0, count.value): + obj = callingconvention.CallingConvention(handle=core.BNNewCallingConventionReference(cc[i])) + result[obj.name] = obj + core.BNFreeCallingConventionList(cc, count) + return result + + @property + def standalone_platform(self): + """Architecture standalone platform (read-only)""" + pl = core.BNGetArchitectureStandalonePlatform(self.handle) + return platform.Platform(self, pl) + + def __setattr__(self, name, value): + if ((name == "name") or (name == "endianness") or (name == "address_size") or + (name == "default_int_size") or (name == "regs") or (name == "get_max_instruction_length") or + (name == "get_instruction_alignment")): + raise AttributeError("attribute '%s' is read only" % name) + else: + try: + object.__setattr__(self, name, value) + except AttributeError: + raise AttributeError("attribute '%s' is read only" % name) + + def __repr__(self): + return "<arch: %s>" % self.name + + def _init(self, ctxt, handle): + self.handle = handle + + def _get_endianness(self, ctxt): + try: + return self.endianness + except: + log.log_error(traceback.format_exc()) + return Endianness.LittleEndian + + def _get_address_size(self, ctxt): + try: + return self.address_size + except: + log.log_error(traceback.format_exc()) + return 8 + + def _get_default_integer_size(self, ctxt): + try: + return self.default_int_size + except: + log.log_error(traceback.format_exc()) + return 4 + + def _get_instruction_alignment(self, ctxt): + try: + return self.instr_alignment + except: + log.log_error(traceback.format_exc()) + return 1 + + def _get_max_instruction_length(self, ctxt): + try: + return self.max_instr_length + except: + log.log_error(traceback.format_exc()) + return 16 + + def _get_opcode_display_length(self, ctxt): + try: + return self.opcode_display_length + except: + log.log_error(traceback.format_exc()) + return 8 + + def _get_associated_arch_by_address(self, ctxt, addr): + try: + result, new_addr = self.get_associated_arch_by_address(addr[0]) + addr[0] = new_addr + return ctypes.cast(result.handle, ctypes.c_void_p).value + except: + log.log_error(traceback.format_exc()) + return ctypes.cast(self.handle, ctypes.c_void_p).value + + def _get_instruction_info(self, ctxt, data, addr, max_len, result): + try: + buf = ctypes.create_string_buffer(max_len) + ctypes.memmove(buf, data, max_len) + info = self.get_instruction_info(buf.raw, addr) + if info is None: + return False + result[0].length = info.length + result[0].archTransitionByTargetAddr = info.arch_transition_by_target_addr + result[0].branchDelay = info.branch_delay + result[0].branchCount = len(info.branches) + for i in range(0, len(info.branches)): + if isinstance(info.branches[i].type, str): + result[0].branchType[i] = BranchType[info.branches[i].type] + else: + result[0].branchType[i] = info.branches[i].type + result[0].branchTarget[i] = info.branches[i].target + if info.branches[i].arch is None: + result[0].branchArch[i] = None + else: + result[0].branchArch[i] = info.branches[i].arch.handle + return True + except (KeyError, OSError): + log.log_error(traceback.format_exc()) + return False + + def _get_instruction_text(self, ctxt, data, addr, length, result, count): + try: + buf = ctypes.create_string_buffer(length[0]) + ctypes.memmove(buf, data, length[0]) + info = self.get_instruction_text(buf.raw, addr) + if info is None: + return False + tokens = info[0] + length[0] = info[1] + count[0] = len(tokens) + token_buf = binaryninja.function.InstructionTextToken.get_instruction_lines(tokens) + result[0] = token_buf + ptr = ctypes.cast(token_buf, ctypes.c_void_p) + self._pending_token_lists[ptr.value] = (ptr.value, token_buf) + return True + except (KeyError, OSError): + log.log_error(traceback.format_exc()) + return False + + def _free_instruction_text(self, tokens, count): + try: + buf = ctypes.cast(tokens, ctypes.c_void_p) + if buf.value not in self._pending_token_lists: + raise ValueError("freeing token list that wasn't allocated") + del self._pending_token_lists[buf.value] + except KeyError: + log.log_error(traceback.format_exc()) + + def _get_instruction_low_level_il(self, ctxt, data, addr, length, il): + try: + buf = ctypes.create_string_buffer(length[0]) + ctypes.memmove(buf, data, length[0]) + result = self.get_instruction_low_level_il(buf.raw, addr, + lowlevelil.LowLevelILFunction(self, core.BNNewLowLevelILFunctionReference(il))) + if result is None: + return False + length[0] = result + return True + except OSError: + log.log_error(traceback.format_exc()) + return False + + def _get_register_name(self, ctxt, reg): + try: + if reg in self._regs_by_index: + return core.BNAllocString(self._regs_by_index[reg]) + return core.BNAllocString("") + except (KeyError, OSError): + log.log_error(traceback.format_exc()) + return core.BNAllocString("") + + def _get_flag_name(self, ctxt, flag): + try: + if flag in self._flags_by_index: + return core.BNAllocString(self._flags_by_index[flag]) + return core.BNAllocString("") + except (KeyError, OSError): + log.log_error(traceback.format_exc()) + return core.BNAllocString("") + + def _get_flag_write_type_name(self, ctxt, write_type): + try: + if write_type in self._flag_write_types_by_index: + return core.BNAllocString(self._flag_write_types_by_index[write_type]) + return core.BNAllocString("") + except (KeyError, OSError): + log.log_error(traceback.format_exc()) + return core.BNAllocString("") + + def _get_semantic_flag_class_name(self, ctxt, sem_class): + try: + if sem_class in self._semantic_flag_classes_by_index: + return core.BNAllocString(self._semantic_flag_classes_by_index[sem_class]) + return core.BNAllocString("") + except (KeyError, OSError): + log.log_error(traceback.format_exc()) + return core.BNAllocString("") + + def _get_semantic_flag_group_name(self, ctxt, sem_group): + try: + if sem_group in self._semantic_flag_groups_by_index: + return core.BNAllocString(self._semantic_flag_groups_by_index[sem_group]) + return core.BNAllocString("") + except (KeyError, OSError): + log.log_error(traceback.format_exc()) + return core.BNAllocString("") + + def _get_full_width_registers(self, ctxt, count): + try: + regs = list(self._full_width_regs.values()) + count[0] = len(regs) + reg_buf = (ctypes.c_uint * len(regs))() + for i in range(0, len(regs)): + reg_buf[i] = regs[i] + result = ctypes.cast(reg_buf, ctypes.c_void_p) + self._pending_reg_lists[result.value] = (result, reg_buf) + return result.value + except KeyError: + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _get_all_registers(self, ctxt, count): + try: + regs = list(self._regs_by_index.keys()) + count[0] = len(regs) + reg_buf = (ctypes.c_uint * len(regs))() + for i in range(0, len(regs)): + reg_buf[i] = regs[i] + result = ctypes.cast(reg_buf, ctypes.c_void_p) + self._pending_reg_lists[result.value] = (result, reg_buf) + return result.value + except KeyError: + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _get_all_flags(self, ctxt, count): + try: + flags = list(self._flags_by_index.keys()) + count[0] = len(flags) + flag_buf = (ctypes.c_uint * len(flags))() + for i in range(0, len(flags)): + flag_buf[i] = flags[i] + result = ctypes.cast(flag_buf, ctypes.c_void_p) + self._pending_reg_lists[result.value] = (result, flag_buf) + return result.value + except KeyError: + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _get_all_flag_write_types(self, ctxt, count): + try: + write_types = list(self._flag_write_types_by_index.keys()) + count[0] = len(write_types) + type_buf = (ctypes.c_uint * len(write_types))() + for i in range(0, len(write_types)): + type_buf[i] = write_types[i] + result = ctypes.cast(type_buf, ctypes.c_void_p) + self._pending_reg_lists[result.value] = (result, type_buf) + return result.value + except KeyError: + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _get_all_semantic_flag_classes(self, ctxt, count): + try: + sem_classes = list(self._semantic_flag_classes_by_index.keys()) + count[0] = len(sem_classes) + class_buf = (ctypes.c_uint * len(sem_classes))() + for i in range(0, len(sem_classes)): + class_buf[i] = sem_classes[i] + result = ctypes.cast(class_buf, ctypes.c_void_p) + self._pending_reg_lists[result.value] = (result, class_buf) + return result.value + except KeyError: + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _get_all_semantic_flag_groups(self, ctxt, count): + try: + sem_groups = list(self._semantic_flag_groups_by_index.keys()) + count[0] = len(sem_groups) + group_buf = (ctypes.c_uint * len(sem_groups))() + for i in range(0, len(sem_groups)): + group_buf[i] = sem_groups[i] + result = ctypes.cast(group_buf, ctypes.c_void_p) + self._pending_reg_lists[result.value] = (result, group_buf) + return result.value + except KeyError: + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _get_flag_role(self, ctxt, flag, sem_class): + try: + if sem_class in self._semantic_flag_classes_by_index: + sem_class = self._semantic_flag_classes_by_index[sem_class] + else: + sem_class = None + return self.get_flag_role(flag, sem_class) + except KeyError: + log.log_error(traceback.format_exc()) + return FlagRole.SpecialFlagRole + + def _get_flags_required_for_flag_condition(self, ctxt, cond, sem_class, count): + try: + if sem_class in self._semantic_flag_classes_by_index: + sem_class = self._semantic_flag_classes_by_index[sem_class] + else: + sem_class = None + flag_names = self.get_flags_required_for_flag_condition(cond, sem_class) + flags = [] + for name in flag_names: + flags.append(self._flags[name]) + count[0] = len(flags) + flag_buf = (ctypes.c_uint * len(flags))() + for i in range(0, len(flags)): + flag_buf[i] = flags[i] + result = ctypes.cast(flag_buf, ctypes.c_void_p) + self._pending_reg_lists[result.value] = (result, flag_buf) + return result.value + except KeyError: + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _get_flags_required_for_semantic_flag_group(self, ctxt, sem_group, count): + try: + if sem_group in self._flags_required_by_semantic_flag_group: + flags = self._flags_required_by_semantic_flag_group[sem_group] + else: + flags = [] + count[0] = len(flags) + flag_buf = (ctypes.c_uint * len(flags))() + for i in range(0, len(flags)): + flag_buf[i] = flags[i] + result = ctypes.cast(flag_buf, ctypes.c_void_p) + self._pending_reg_lists[result.value] = (result, flag_buf) + return result.value + except (KeyError, OSError): + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _get_flag_conditions_for_semantic_flag_group(self, ctxt, sem_group, count): + try: + if sem_group in self._flag_conditions_for_semantic_flag_group: + class_cond = self._flag_conditions_for_semantic_flag_group[sem_group] + else: + class_cond = {} + count[0] = len(class_cond) + cond_buf = (core.BNFlagConditionForSemanticClass * len(class_cond))() + i = 0 + for class_index in class_cond.keys(): + cond_buf[i].semanticClass = class_index + cond_buf[i].condition = class_cond[class_index] + i += 1 + result = ctypes.cast(cond_buf, ctypes.c_void_p) + self._pending_condition_lists[result.value] = (result, cond_buf) + return result.value + except (KeyError, OSError): + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _free_flag_conditions_for_semantic_flag_group(self, ctxt, conditions): + try: + buf = ctypes.cast(conditions, ctypes.c_void_p) + if buf.value not in self._pending_condition_lists: + raise ValueError("freeing condition list that wasn't allocated") + del self._pending_condition_lists[buf.value] + except (ValueError, KeyError): + log.log_error(traceback.format_exc()) + + def _get_flags_written_by_flag_write_type(self, ctxt, write_type, count): + try: + if write_type in self._flags_written_by_flag_write_type: + flags = self._flags_written_by_flag_write_type[write_type] + else: + flags = [] + count[0] = len(flags) + flag_buf = (ctypes.c_uint * len(flags))() + for i in range(0, len(flags)): + flag_buf[i] = flags[i] + result = ctypes.cast(flag_buf, ctypes.c_void_p) + self._pending_reg_lists[result.value] = (result, flag_buf) + return result.value + except (KeyError, OSError): + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _get_semantic_class_for_flag_write_type(self, ctxt, write_type): + try: + if write_type in self._semantic_class_for_flag_write_type: + return self._semantic_class_for_flag_write_type[write_type] + else: + return 0 + except (KeyError, OSError): + log.log_error(traceback.format_exc()) + return 0 + + def _get_flag_write_low_level_il(self, ctxt, op, size, write_type, flag, operands, operand_count, il): + try: + write_type_name = None + if write_type != 0: + write_type_name = self._flag_write_types_by_index[write_type] + flag_name = self._flags_by_index[flag] + operand_list = [] + for i in range(operand_count): + if operands[i].constant: + operand_list.append(operands[i].value) + elif lowlevelil.LLIL_REG_IS_TEMP(operands[i].reg): + operand_list.append(lowlevelil.ILRegister(self, operands[i].reg)) + else: + operand_list.append(lowlevelil.ILRegister(self, operands[i].reg)) + return self.get_flag_write_low_level_il(op, size, write_type_name, flag_name, operand_list, + lowlevelil.LowLevelILFunction(self, core.BNNewLowLevelILFunctionReference(il))).index + except (KeyError, OSError): + log.log_error(traceback.format_exc()) + return False + + def _get_flag_condition_low_level_il(self, ctxt, cond, sem_class, il): + try: + if sem_class in self._semantic_flag_classes_by_index: + sem_class_name = self._semantic_flag_classes_by_index[sem_class] + else: + sem_class_name = None + return self.get_flag_condition_low_level_il(cond, sem_class_name, + lowlevelil.LowLevelILFunction(self, core.BNNewLowLevelILFunctionReference(il))).index + except OSError: + log.log_error(traceback.format_exc()) + return 0 + + def _get_semantic_flag_group_low_level_il(self, ctxt, sem_group, il): + try: + if sem_group in self._semantic_flag_groups_by_index: + sem_group_name = self._semantic_flag_groups_by_index[sem_group] + else: + sem_group_name = None + return self.get_semantic_flag_group_low_level_il(sem_group_name, + lowlevelil.LowLevelILFunction(self, core.BNNewLowLevelILFunctionReference(il))).index + except OSError: + log.log_error(traceback.format_exc()) + return 0 + + def _free_register_list(self, ctxt, regs): + try: + buf = ctypes.cast(regs, ctypes.c_void_p) + if buf.value not in self._pending_reg_lists: + raise ValueError("freeing register list that wasn't allocated") + del self._pending_reg_lists[buf.value] + except (ValueError, KeyError): + log.log_error(traceback.format_exc()) + + def _get_register_info(self, ctxt, reg, result): + try: + if reg not in self._regs_by_index: + result[0].fullWidthRegister = 0 + result[0].offset = 0 + result[0].size = 0 + result[0].extend = ImplicitRegisterExtend.NoExtend + return + info = self.regs[self._regs_by_index[reg]] + result[0].fullWidthRegister = self._all_regs[info.full_width_reg] + result[0].offset = info.offset + result[0].size = info.size + if isinstance(info.extend, str): + result[0].extend = ImplicitRegisterExtend[info.extend] + else: + result[0].extend = info.extend + except KeyError: + log.log_error(traceback.format_exc()) + result[0].fullWidthRegister = 0 + result[0].offset = 0 + result[0].size = 0 + result[0].extend = ImplicitRegisterExtend.NoExtend + + def _get_stack_pointer_register(self, ctxt): + try: + return self._all_regs[self.stack_pointer] + except KeyError: + log.log_error(traceback.format_exc()) + return 0 + + def _get_link_register(self, ctxt): + try: + if self.link_reg is None: + return 0xffffffff + return self._all_regs[self.link_reg] + except KeyError: + log.log_error(traceback.format_exc()) + return 0 + + def _get_global_registers(self, ctxt, count): + try: + count[0] = len(self.global_regs) + reg_buf = (ctypes.c_uint * len(self.global_regs))() + for i in range(0, len(self.global_regs)): + reg_buf[i] = self._all_regs[self.global_regs[i]] + result = ctypes.cast(reg_buf, ctypes.c_void_p) + self._pending_reg_lists[result.value] = (result, reg_buf) + return result.value + except KeyError: + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _get_register_stack_name(self, ctxt, reg_stack): + try: + if reg_stack in self._reg_stacks_by_index: + return core.BNAllocString(self._reg_stacks_by_index[reg_stack]) + return core.BNAllocString("") + except (KeyError, OSError): + log.log_error(traceback.format_exc()) + return core.BNAllocString("") + + def _get_all_register_stacks(self, ctxt, count): + try: + regs = list(self._reg_stacks_by_index.keys()) + count[0] = len(regs) + reg_buf = (ctypes.c_uint * len(regs))() + for i in range(0, len(regs)): + reg_buf[i] = regs[i] + result = ctypes.cast(reg_buf, ctypes.c_void_p) + self._pending_reg_lists[result.value] = (result, reg_buf) + return result.value + except KeyError: + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _get_register_stack_info(self, ctxt, reg_stack, result): + try: + if reg_stack not in self._reg_stacks_by_index: + result[0].firstStorageReg = 0 + result[0].firstTopRelativeReg = 0 + result[0].storageCount = 0 + result[0].topRelativeCount = 0 + result[0].stackTopReg = 0 + return + info = self.reg_stacks[self._reg_stacks_by_index[reg_stack]] + result[0].firstStorageReg = self._all_regs[info.storage_regs[0]] + result[0].storageCount = len(info.storage_regs) + if len(info.top_relative_regs) > 0: + result[0].firstTopRelativeReg = self._all_regs[info.top_relative_regs[0]] + result[0].topRelativeCount = len(info.top_relative_regs) + else: + result[0].firstTopRelativeReg = 0 + result[0].topRelativeCount = 0 + result[0].stackTopReg = self._all_regs[info.stack_top_reg] + except KeyError: + log.log_error(traceback.format_exc()) + result[0].firstStorageReg = 0 + result[0].firstTopRelativeReg = 0 + result[0].storageCount = 0 + result[0].topRelativeCount = 0 + result[0].stackTopReg = 0 + + def _get_intrinsic_name(self, ctxt, intrinsic): + try: + if intrinsic in self._intrinsics_by_index: + return core.BNAllocString(self._intrinsics_by_index[intrinsic][0]) + return core.BNAllocString("") + except (KeyError, OSError): + log.log_error(traceback.format_exc()) + return core.BNAllocString("") + + def _get_all_intrinsics(self, ctxt, count): + try: + regs = list(self._intrinsics_by_index.keys()) + count[0] = len(regs) + reg_buf = (ctypes.c_uint * len(regs))() + for i in range(0, len(regs)): + reg_buf[i] = regs[i] + result = ctypes.cast(reg_buf, ctypes.c_void_p) + self._pending_reg_lists[result.value] = (result, reg_buf) + return result.value + except KeyError: + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _get_intrinsic_inputs(self, ctxt, intrinsic, count): + try: + if intrinsic in self._intrinsics_by_index: + inputs = self._intrinsics_by_index[intrinsic][1].inputs + count[0] = len(inputs) + input_buf = (core.BNNameAndType * len(inputs))() + for i in range(0, len(inputs)): + input_buf[i].name = inputs[i].name + input_buf[i].type = core.BNNewTypeReference(inputs[i].type.handle) + input_buf[i].typeConfidence = inputs[i].type.confidence + result = ctypes.cast(input_buf, ctypes.c_void_p) + self._pending_name_and_type_lists[result.value] = (result, input_buf, len(inputs)) + return result.value + count[0] = 0 + return None + except: + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _free_name_and_type_list(self, ctxt, buf_raw, length): + try: + buf = ctypes.cast(buf_raw, ctypes.c_void_p) + if buf.value not in self._pending_name_and_type_lists: + raise ValueError("freeing name and type list that wasn't allocated") + name_and_types = self._pending_name_and_type_lists[buf.value][1] + count = self._pending_name_and_type_lists[buf.value][2] + for i in range(0, count): + core.BNFreeType(name_and_types[i].type) + del self._pending_name_and_type_lists[buf.value] + except (ValueError, KeyError): + log.log_error(traceback.format_exc()) + + def _get_intrinsic_outputs(self, ctxt, intrinsic, count): + try: + if intrinsic in self._intrinsics_by_index: + outputs = self._intrinsics_by_index[intrinsic][1].outputs + count[0] = len(outputs) + output_buf = (core.BNTypeWithConfidence * len(outputs))() + for i in range(0, len(outputs)): + output_buf[i].type = core.BNNewTypeReference(outputs[i].handle) + output_buf[i].confidence = outputs[i].confidence + result = ctypes.cast(output_buf, ctypes.c_void_p) + self._pending_type_lists[result.value] = (result, output_buf, len(outputs)) + return result.value + count[0] = 0 + return None + except: + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _free_type_list(self, ctxt, buf_raw, length): + try: + buf = ctypes.cast(buf_raw, ctypes.c_void_p) + if buf.value not in self._pending_type_lists: + raise ValueError("freeing type list that wasn't allocated") + types = self._pending_type_lists[buf.value][1] + count = self._pending_type_lists[buf.value][2] + for i in range(0, count): + core.BNFreeType(types[i].type) + del self._pending_type_lists[buf.value] + except (ValueError, KeyError): + log.log_error(traceback.format_exc()) + + def _assemble(self, ctxt, code, addr, result, errors): + try: + data, error_str = self.assemble(code, addr) + errors[0] = core.BNAllocString(str(error_str)) + if data is None: + return False + buf = ctypes.create_string_buffer(len(data)) + ctypes.memmove(buf, data, len(data)) + core.BNSetDataBufferContents(result, buf, len(data)) + return True + except: + log.log_error(traceback.format_exc()) + errors[0] = core.BNAllocString("Unhandled exception during assembly.\n") + return False + + def _is_never_branch_patch_available(self, ctxt, data, addr, length): + try: + buf = ctypes.create_string_buffer(length) + ctypes.memmove(buf, data, length) + return self.is_never_branch_patch_available(buf.raw, addr) + except: + log.log_error(traceback.format_exc()) + return False + + def _is_always_branch_patch_available(self, ctxt, data, addr, length): + try: + buf = ctypes.create_string_buffer(length) + ctypes.memmove(buf, data, length) + return self.is_always_branch_patch_available(buf.raw, addr) + except: + log.log_error(traceback.format_exc()) + return False + + def _is_invert_branch_patch_available(self, ctxt, data, addr, length): + try: + buf = ctypes.create_string_buffer(length) + ctypes.memmove(buf, data, length) + return self.is_invert_branch_patch_available(buf.raw, addr) + except: + log.log_error(traceback.format_exc()) + return False + + def _is_skip_and_return_zero_patch_available(self, ctxt, data, addr, length): + try: + buf = ctypes.create_string_buffer(length) + ctypes.memmove(buf, data, length) + return self.is_skip_and_return_zero_patch_available(buf.raw, addr) + except: + log.log_error(traceback.format_exc()) + return False + + def _is_skip_and_return_value_patch_available(self, ctxt, data, addr, length): + try: + buf = ctypes.create_string_buffer(length) + ctypes.memmove(buf, data, length) + return self.is_skip_and_return_value_patch_available(buf.raw, addr) + except: + log.log_error(traceback.format_exc()) + return False + + def _convert_to_nop(self, ctxt, data, addr, length): + try: + buf = ctypes.create_string_buffer(length) + ctypes.memmove(buf, data, length) + result = self.convert_to_nop(buf.raw, addr) + if result is None: + return False + result = str(result) + if len(result) > length: + result = result[0:length] + ctypes.memmove(data, result, len(result)) + return True + except: + log.log_error(traceback.format_exc()) + return False + + def _always_branch(self, ctxt, data, addr, length): + try: + buf = ctypes.create_string_buffer(length) + ctypes.memmove(buf, data, length) + result = self.always_branch(buf.raw, addr) + if result is None: + return False + result = str(result) + if len(result) > length: + result = result[0:length] + ctypes.memmove(data, result, len(result)) + return True + except: + log.log_error(traceback.format_exc()) + return False + + def _invert_branch(self, ctxt, data, addr, length): + try: + buf = ctypes.create_string_buffer(length) + ctypes.memmove(buf, data, length) + result = self.invert_branch(buf.raw, addr) + if result is None: + return False + result = str(result) + if len(result) > length: + result = result[0:length] + ctypes.memmove(data, result, len(result)) + return True + except: + log.log_error(traceback.format_exc()) + return False + + def _skip_and_return_value(self, ctxt, data, addr, length, value): + try: + buf = ctypes.create_string_buffer(length) + ctypes.memmove(buf, data, length) + result = self.skip_and_return_value(buf.raw, addr, value) + if result is None: + return False + result = str(result) + if len(result) > length: + result = result[0:length] + ctypes.memmove(data, result, len(result)) + return True + except: + log.log_error(traceback.format_exc()) + return False + +
[docs] def perform_get_associated_arch_by_address(self, addr): + """ + Deprecated method provided for compatibility. Architecture plugins should override ``get_associated_arch_by_address``. + """ + return self, addr
+ +
[docs] @abc.abstractmethod + def perform_get_instruction_info(self, data, addr): + """ + Deprecated method provided for compatibility. Architecture plugins should override ``get_instruction_info``. + + :param str data: bytes to decode + :param int addr: virtual address of the byte to be decoded + :return: a :py:class:`InstructionInfo` object containing the length and branch types for the given instruction + :rtype: InstructionInfo + """ + raise NotImplementedError
+ +
[docs] @abc.abstractmethod + def perform_get_instruction_text(self, data, addr): + """ + Deprecated method provided for compatibility. Architecture plugins should override ``get_instruction_text``. + + :param str data: bytes to decode + :param int addr: virtual address of the byte to be decoded + :return: a tuple of list(InstructionTextToken) and length of instruction decoded + :rtype: tuple(list(InstructionTextToken), int) + """ + raise NotImplementedError
+ +
[docs] @abc.abstractmethod + def perform_get_instruction_low_level_il(self, data, addr, il): + """ + Deprecated method provided for compatibility. Architecture plugins should override ``get_instruction_low_level_il``. + + :param str data: bytes to be interpreted as low-level IL instructions + :param int addr: virtual address of start of ``data`` + :param LowLevelILFunction il: LowLevelILFunction object to append LowLevelILExpr objects to + :rtype: length of bytes read on success, None on failure + """ + raise NotImplementedError
+ +
[docs] @abc.abstractmethod + def perform_get_flag_write_low_level_il(self, op, size, write_type, flag, operands, il): + """ + Deprecated method provided for compatibility. Architecture plugins should override ``get_flag_write_low_level_il``. + + :param LowLevelILOperation op: + :param int size: + :param int write_type: + :param int flag: + :param list(int_or_str): + :param LowLevelILFunction il: + :rtype: LowLevelILExpr + """ + flag = self.get_flag_index(flag) + if flag not in self._flag_roles: + return il.unimplemented() + return self.get_default_flag_write_low_level_il(op, size, self._flag_roles[flag], operands, il)
+ +
[docs] @abc.abstractmethod + def perform_get_flag_condition_low_level_il(self, cond, sem_class, il): + """ + Deprecated method provided for compatibility. Architecture plugins should override ``get_flag_condition_low_level_il``. + + :param LowLevelILFlagCondition cond: Flag condition to be computed + :param str sem_class: Semantic class to be used (None for default semantics) + :param LowLevelILFunction il: LowLevelILFunction object to append LowLevelILExpr objects to + :rtype: LowLevelILExpr + """ + return self.get_default_flag_condition_low_level_il(cond, sem_class, il)
+ +
[docs] @abc.abstractmethod + def perform_get_semantic_flag_group_low_level_il(self, sem_group, il): + """ + Deprecated method provided for compatibility. Architecture plugins should override ``get_semantic_flag_group_low_level_il``. + + :param str sem_group: Semantic group to be computed + :param LowLevelILFunction il: LowLevelILFunction object to append LowLevelILExpr objects to + :rtype: LowLevelILExpr + """ + return il.unimplemented()
+ +
[docs] @abc.abstractmethod + def perform_assemble(self, code, addr): + """ + Deprecated method provided for compatibility. Architecture plugins should override ``assemble``. + + :param str code: string representation of the instructions to be assembled + :param int addr: virtual address that the instructions will be loaded at + :return: the bytes for the assembled instructions or error string + :rtype: (a tuple of instructions and empty string) or (or None and error string) + """ + return None, "Architecture does not implement an assembler.\n"
+ +
[docs] @abc.abstractmethod + def perform_is_never_branch_patch_available(self, data, addr): + """ + Deprecated method provided for compatibility. Architecture plugins should override ``is_never_branch_patch_available``. + + .. note:: Architecture subclasses should implement this method. + .. warning:: This method should never be called directly. + + :param str data: bytes to be checked + :param int addr: the virtual address of the instruction to be patched + :return: True if the instruction can be patched, False otherwise + :rtype: bool + """ + return False
+ +
[docs] @abc.abstractmethod + def perform_is_always_branch_patch_available(self, data, addr): + """ + Deprecated method provided for compatibility. Architecture plugins should override ``is_always_branch_patch_available``. + + :param str data: bytes to be checked + :param int addr: the virtual address of the instruction to be patched + :return: True if the instruction can be patched, False otherwise + :rtype: bool + """ + return False
+ +
[docs] @abc.abstractmethod + def perform_is_invert_branch_patch_available(self, data, addr): + """ + Deprecated method provided for compatibility. Architecture plugins should override ``is_invert_branch_patch_available``. + + :param int addr: the virtual address of the instruction to be patched + :return: True if the instruction can be patched, False otherwise + :rtype: bool + """ + return False
+ +
[docs] @abc.abstractmethod + def perform_is_skip_and_return_zero_patch_available(self, data, addr): + """ + Deprecated method provided for compatibility. Architecture plugins should override ``is_skip_and_return_zero_patch_available``. + + :param str data: bytes to be checked + :param int addr: the virtual address of the instruction to be patched + :return: True if the instruction can be patched, False otherwise + :rtype: bool + """ + return False
+ +
[docs] @abc.abstractmethod + def perform_is_skip_and_return_value_patch_available(self, data, addr): + """ + Deprecated method provided for compatibility. Architecture plugins should override ``is_skip_and_return_value_patch_available``. + + :param str data: bytes to be checked + :param int addr: the virtual address of the instruction to be patched + :return: True if the instruction can be patched, False otherwise + :rtype: bool + """ + return False
+ +
[docs] @abc.abstractmethod + def perform_convert_to_nop(self, data, addr): + """ + Deprecated method provided for compatibility. Architecture plugins should override ``convert_to_nop``. + + :param str data: bytes at virtual address ``addr`` + :param int addr: the virtual address of the instruction to be patched + :return: nop sequence of same length as ``data`` or None + :rtype: str or None + """ + return None
+ +
[docs] @abc.abstractmethod + def perform_always_branch(self, data, addr): + """ + Deprecated method provided for compatibility. Architecture plugins should override ``always_branch``. + + :param str data: bytes to be checked + :param int addr: the virtual address of the instruction to be patched + :return: The bytes of the replacement unconditional branch instruction + :rtype: str + """ + return None
+ +
[docs] @abc.abstractmethod + def perform_invert_branch(self, data, addr): + """ + Deprecated method provided for compatibility. Architecture plugins should override ``invert_branch``. + + :param str data: bytes to be checked + :param int addr: the virtual address of the instruction to be patched + :return: The bytes of the replacement unconditional branch instruction + :rtype: str + """ + return None
+ +
[docs] @abc.abstractmethod + def perform_skip_and_return_value(self, data, addr, value): + """ + Deprecated method provided for compatibility. Architecture plugins should override ``skip_and_return_value``. + + :param str data: bytes to be checked + :param int addr: the virtual address of the instruction to be patched + :param int value: value to be returned + :return: The bytes of the replacement unconditional branch instruction + :rtype: str + """ + return None
+ +
[docs] def perform_get_flag_role(self, flag, sem_class): + """ + Deprecated method provided for compatibility. Architecture plugins should override ``get_flag_role``. + """ + if flag in self._flag_roles: + return self._flag_roles[flag] + return FlagRole.SpecialFlagRole
+ +
[docs] def perform_get_flags_required_for_flag_condition(self, cond, sem_class): + """ + Deprecated method provided for compatibility. Architecture plugins should override ``get_flags_required_for_flag_condition``. + """ + if cond in self.flags_required_for_flag_condition: + return self.flags_required_for_flag_condition[cond] + return []
+ +
[docs] def get_associated_arch_by_address(self, addr): + return self.perform_get_associated_arch_by_address(addr)
+ +
[docs] def get_instruction_info(self, data, addr): + """ + ``get_instruction_info`` returns an InstructionInfo object for the instruction at the given virtual address + ``addr`` with data ``data``. + + .. note:: Architecture subclasses should implement this method. + + .. note :: The instruction info object should always set the InstructionInfo.length to the instruction length, \ + and the branches of the proper types should be added if the instruction is a branch. + + If the instruction is a branch instruction architecture plugins should add a branch of the proper type: + + ===================== =================================================== + BranchType Description + ===================== =================================================== + UnconditionalBranch Branch will always be taken + FalseBranch False branch condition + TrueBranch True branch condition + CallDestination Branch is a call instruction (Branch with Link) + FunctionReturn Branch returns from a function + SystemCall System call instruction + IndirectBranch Branch destination is a memory address or register + UnresolvedBranch Branch destination is an unknown address + ===================== =================================================== + + :param str data: max_instruction_length bytes from the binary at virtual address ``addr`` + :param int addr: virtual address of bytes in ``data`` + :return: the InstructionInfo for the current instruction + :rtype: InstructionInfo + """ + return self.perform_get_instruction_info(data, addr)
+ +
[docs] def get_instruction_text(self, data, addr): + """ + ``get_instruction_text`` returns a list of InstructionTextToken objects for the instruction at the given virtual + address ``addr`` with data ``data``. + + .. note:: Architecture subclasses should implement this method. + + :param str data: max_instruction_length bytes from the binary at virtual address ``addr`` + :param int addr: virtual address of bytes in ``data`` + :return: an InstructionTextToken list for the current instruction + :rtype: list(InstructionTextToken) + """ + return self.perform_get_instruction_text(data, addr)
+ +
[docs] def get_instruction_low_level_il_instruction(self, bv, addr): + il = lowlevelil.LowLevelILFunction(self) + data = bv.read(addr, self.max_instr_length) + self.get_instruction_low_level_il(data, addr, il) + return il[0]
+ +
[docs] def get_instruction_low_level_il(self, data, addr, il): + """ + ``get_instruction_low_level_il`` appends LowLevelILExpr objects to ``il`` for the instruction at the given + virtual address ``addr`` with data ``data``. + + This is used to analyze arbitrary data at an address, if you are working with an existing binary, you likely + want to be using ``Function.get_low_level_il_at``. + + .. note:: Architecture subclasses should implement this method. + + :param str data: max_instruction_length bytes from the binary at virtual address ``addr`` + :param int addr: virtual address of bytes in ``data`` + :param LowLevelILFunction il: The function the current instruction belongs to + :return: the length of the current instruction + :rtype: int + """ + return self.perform_get_instruction_low_level_il(data, addr, il)
+ +
[docs] def get_low_level_il_from_bytes(self, data, addr): + """ + ``get_low_level_il_from_bytes`` converts the instruction in bytes to ``il`` at the given virtual address + + :param str data: the bytes of the instruction + :param int addr: virtual address of bytes in ``data`` + :return: the instruction + :rtype: LowLevelILInstruction + :Example: + + >>> arch.get_low_level_il_from_bytes('\xeb\xfe', 0x40DEAD) + <il: jump(0x40dead)> + >>> + """ + func = lowlevelil.LowLevelILFunction(self) + self.get_instruction_low_level_il(data, addr, func) + return func[0]
+ +
[docs] def get_reg_name(self, reg): + """ + ``get_reg_name`` gets a register name from a register number. + + :param int reg: register number + :return: the corresponding register string + :rtype: str + """ + return core.BNGetArchitectureRegisterName(self.handle, reg)
+ +
[docs] def get_reg_stack_name(self, reg_stack): + """ + ``get_reg_stack_name`` gets a register stack name from a register stack number. + + :param int reg_stack: register stack number + :return: the corresponding register string + :rtype: str + """ + return core.BNGetArchitectureRegisterStackName(self.handle, reg_stack)
+ +
[docs] def get_reg_stack_for_reg(self, reg): + reg = self.get_reg_index(reg) + result = core.BNGetArchitectureRegisterStackForRegister(self.handle, reg) + if result == 0xffffffff: + return None + return self.get_reg_stack_name(result)
+ +
[docs] def get_flag_name(self, flag): + """ + ``get_flag_name`` gets a flag name from a flag number. + + :param int reg: register number + :return: the corresponding register string + :rtype: str + """ + return core.BNGetArchitectureFlagName(self.handle, flag)
+ +
[docs] def get_reg_index(self, reg): + if isinstance(reg, str): + return self.regs[reg].index + elif isinstance(reg, lowlevelil.ILRegister): + return reg.index + return reg
+ +
[docs] def get_reg_stack_index(self, reg_stack): + if isinstance(reg_stack, str): + return self.reg_stacks[reg_stack].index + elif isinstance(reg_stack, lowlevelil.ILRegisterStack): + return reg_stack.index + return reg_stack
+ +
[docs] def get_flag_index(self, flag): + if isinstance(flag, str): + return self._flags[flag] + elif isinstance(flag, lowlevelil.ILFlag): + return flag.index + return flag
+ +
[docs] def get_semantic_flag_class_index(self, sem_class): + if sem_class is None: + return 0 + elif isinstance(sem_class, str): + return self._semantic_flag_classes[sem_class] + elif isinstance(sem_class, lowlevelil.ILSemanticFlagClass): + return sem_class.index + return sem_class
+ +
[docs] def get_semantic_flag_class_name(self, class_index): + """ + ``get_semantic_flag_class_name`` gets the name of a semantic flag class from the index. + + :param int _index: class_index + :return: the name of the semantic flag class + :rtype: str + """ + if not isinstance(class_index, (int, long)): + raise ValueError("argument 'class_index' must be an integer") + try: + return self._semantic_flag_classes_by_index[class_index] + except KeyError: + raise AttributeError("argument class_index is not a valid class index")
+ +
[docs] def get_semantic_flag_group_index(self, sem_group): + if isinstance(sem_group, str): + return self._semantic_flag_groups[sem_group] + elif isinstance(sem_group, lowlevelil.ILSemanticFlagGroup): + return sem_group.index + return sem_group
+ +
[docs] def get_semantic_flag_group_name(self, group_index): + """ + ``get_semantic_flag_group_name`` gets the name of a semantic flag group from the index. + + :param int group_index: group_index + :return: the name of the semantic flag group + :rtype: str + """ + if not isinstance(group_index, (int, long)): + raise ValueError("argument 'group_index' must be an integer") + try: + return self._semantic_flag_groups_by_index[group_index] + except KeyError: + raise AttributeError("argument group_index is not a valid group index")
+ +
[docs] def get_intrinsic_name(self, intrinsic): + """ + ``get_intrinsic_name`` gets an intrinsic name from an intrinsic number. + + :param int intrinsic: intrinsic number + :return: the corresponding intrinsic string + :rtype: str + """ + return core.BNGetArchitectureIntrinsicName(self.handle, intrinsic)
+ +
[docs] def get_intrinsic_index(self, intrinsic): + if isinstance(intrinsic, str): + return self._intrinsics[intrinsic] + elif isinstance(intrinsic, lowlevelil.ILIntrinsic): + return intrinsic.index + return intrinsic
+ +
[docs] def get_flag_write_type_name(self, write_type): + """ + ``get_flag_write_type_name`` gets the flag write type name for the given flag. + + :param int write_type: flag + :return: flag write type name + :rtype: str + """ + return core.BNGetArchitectureFlagWriteTypeName(self.handle, write_type)
+ +
[docs] def get_flag_by_name(self, flag): + """ + ``get_flag_by_name`` get flag name for flag index. + + :param int flag: flag index + :return: flag name for flag index + :rtype: str + """ + return self._flags[flag]
+ +
[docs] def get_flag_write_type_by_name(self, write_type): + """ + ``get_flag_write_type_by_name`` gets the flag write type name for the flag write type. + + :param int write_type: flag write type + :return: flag write type + :rtype: str + """ + return self._flag_write_types[write_type]
+ +
[docs] def get_semantic_flag_class_by_name(self, sem_class): + """ + ``get_semantic_flag_class_by_name`` gets the semantic flag class index by name. + + :param int sem_class: semantic flag class + :return: semantic flag class index + :rtype: str + """ + return self._semantic_flag_classes[sem_class]
+ +
[docs] def get_semantic_flag_group_by_name(self, sem_group): + """ + ``get_semantic_flag_group_by_name`` gets the semantic flag group index by name. + + :param int sem_group: semantic flag group + :return: semantic flag group index + :rtype: str + """ + return self._semantic_flag_groups[sem_group]
+ +
[docs] def get_flag_role(self, flag, sem_class = None): + """ + ``get_flag_role`` gets the role of a given flag. + + :param int flag: flag + :param int sem_class: optional semantic flag class + :return: flag role + :rtype: FlagRole + """ + return self.perform_get_flag_role(flag, sem_class)
+ +
[docs] def get_flag_write_low_level_il(self, op, size, write_type, flag, operands, il): + """ + :param LowLevelILOperation op: + :param int size: + :param str write_type: + :param list(str or int) operands: a list of either items that are either string register names or constant \ + integer values + :param LowLevelILFunction il: + :rtype: LowLevelILExpr + """ + return self.perform_get_flag_write_low_level_il(op, size, write_type, flag, operands, il)
+ +
[docs] def get_default_flag_write_low_level_il(self, op, size, role, operands, il): + """ + :param LowLevelILOperation op: + :param int size: + :param FlagRole role: + :param list(str or int) operands: a list of either items that are either string register names or constant \ + integer values + :param LowLevelILFunction il: + :rtype: LowLevelILExpr index + """ + operand_list = (core.BNRegisterOrConstant * len(operands))() + for i in range(len(operands)): + if isinstance(operands[i], str): + operand_list[i].constant = False + operand_list[i].reg = self.regs[operands[i]].index + elif isinstance(operands[i], lowlevelil.ILRegister): + operand_list[i].constant = False + operand_list[i].reg = operands[i].index + else: + operand_list[i].constant = True + operand_list[i].value = operands[i] + return lowlevelil.LowLevelILExpr(core.BNGetDefaultArchitectureFlagWriteLowLevelIL(self.handle, op, size, + role, operand_list, len(operand_list), il.handle))
+ +
[docs] def get_flag_condition_low_level_il(self, cond, sem_class, il): + """ + :param LowLevelILFlagCondition cond: Flag condition to be computed + :param str sem_class: Semantic class to be used (None for default semantics) + :param LowLevelILFunction il: LowLevelILFunction object to append LowLevelILExpr objects to + :rtype: LowLevelILExpr + """ + return self.perform_get_flag_condition_low_level_il(cond, sem_class, il)
+ +
[docs] def get_default_flag_condition_low_level_il(self, cond, sem_class, il): + """ + :param LowLevelILFlagCondition cond: + :param LowLevelILFunction il: + :param str sem_class: + :rtype: LowLevelILExpr + """ + class_index = self.get_semantic_flag_class_index(sem_class) + return lowlevelil.LowLevelILExpr(core.BNGetDefaultArchitectureFlagConditionLowLevelIL(self.handle, cond, class_index, il.handle))
+ +
[docs] def get_semantic_flag_group_low_level_il(self, sem_group, il): + """ + :param str sem_group: + :param LowLevelILFunction il: + :rtype: LowLevelILExpr + """ + return self.perform_get_semantic_flag_group_low_level_il(sem_group, il)
+ +
[docs] def get_flags_required_for_flag_condition(self, cond, sem_class = None): + return self.perform_get_flags_required_for_flag_condition(cond, sem_class)
+ +
[docs] def get_modified_regs_on_write(self, reg): + """ + ``get_modified_regs_on_write`` returns a list of register names that are modified when ``reg`` is written. + + :param str reg: string register name + :return: list of register names + :rtype: list(str) + """ + reg = core.BNGetArchitectureRegisterByName(self.handle, str(reg)) + count = ctypes.c_ulonglong() + regs = core.BNGetModifiedArchitectureRegistersOnWrite(self.handle, reg, count) + result = [] + for i in range(0, count.value): + result.append(core.BNGetArchitectureRegisterName(self.handle, regs[i])) + core.BNFreeRegisterList(regs) + return result
+ +
[docs] def assemble(self, code, addr=0): + """ + ``assemble`` converts the string of assembly instructions ``code`` loaded at virtual address ``addr`` to the + byte representation of those instructions. + + .. note:: Architecture subclasses should implement this method. + + Architecture plugins can override this method to provide assembler functionality. This can be done by + simply shelling out to an assembler like yasm or llvm-mc, since this method isn't performance sensitive. + + .. note :: It is important that the assembler used accepts a syntax identical to the one emitted by the \ + disassembler. This will prevent confusing the user. + + :param str code: string representation of the instructions to be assembled + :param int addr: virtual address that the instructions will be loaded at + :return: the bytes for the assembled instructions + :rtype: Python3 - a 'bytes' object; Python2 - a 'bytes' object + :Example: + + >>> arch.assemble("je 10") + '\\x0f\\x84\\x04\\x00\\x00\\x00' + >>> + """ + return self.perform_assemble(code, addr)
+ +
[docs] def is_never_branch_patch_available(self, data, addr): + """ + ``is_never_branch_patch_available`` determines if the instruction ``data`` at ``addr`` can be made to **never branch**. + + .. note:: Architecture subclasses should implement this method. + + :param str data: bytes for the instruction to be checked + :param int addr: the virtual address of the instruction to be patched + :return: True if the instruction can be patched, False otherwise + :rtype: bool + :Example: + + >>> arch.is_never_branch_patch_available(arch.assemble("je 10")[0], 0) + True + >>> arch.is_never_branch_patch_available(arch.assemble("nop")[0], 0) + False + >>> + """ + return self.perform_is_never_branch_patch_available(data, addr)
+ +
[docs] def is_always_branch_patch_available(self, data, addr): + """ + ``is_always_branch_patch_available`` determines if the instruction ``data`` at ``addr`` can be made to + **always branch**. + + .. note:: Architecture subclasses should implement this method. + + :param str data: bytes for the instruction to be checked + :param int addr: the virtual address of the instruction to be patched + :return: True if the instruction can be patched, False otherwise + :rtype: bool + :Example: + + >>> arch.is_always_branch_patch_available(arch.assemble("je 10")[0], 0) + True + >>> arch.is_always_branch_patch_available(arch.assemble("nop")[0], 0) + False + >>> + """ + return self.perform_is_always_branch_patch_available(data, addr)
+ +
[docs] def is_invert_branch_patch_available(self, data, addr): + """ + ``is_always_branch_patch_available`` determines if the instruction ``data`` at ``addr`` can be inverted. + + .. note:: Architecture subclasses should implement this method. + + :param str data: bytes for the instruction to be checked + :param int addr: the virtual address of the instruction to be patched + :return: True if the instruction can be patched, False otherwise + :rtype: bool + :Example: + + >>> arch.is_invert_branch_patch_available(arch.assemble("je 10")[0], 0) + True + >>> arch.is_invert_branch_patch_available(arch.assemble("nop")[0], 0) + False + >>> + """ + return self.perform_is_invert_branch_patch_available(data, addr)
+ +
[docs] def is_skip_and_return_zero_patch_available(self, data, addr): + """ + ``is_skip_and_return_zero_patch_available`` determines if the instruction ``data`` at ``addr`` is a *call-like* + instruction that can be made into an instruction *returns zero*. + + .. note:: Architecture subclasses should implement this method. + + :param str data: bytes for the instruction to be checked + :param int addr: the virtual address of the instruction to be patched + :return: True if the instruction can be patched, False otherwise + :rtype: bool + :Example: + + >>> arch.is_skip_and_return_zero_patch_available(arch.assemble("call 0")[0], 0) + True + >>> arch.is_skip_and_return_zero_patch_available(arch.assemble("call eax")[0], 0) + True + >>> arch.is_skip_and_return_zero_patch_available(arch.assemble("jmp eax")[0], 0) + False + >>> + """ + return self.perform_is_skip_and_return_zero_patch_available(data, addr)
+ +
[docs] def is_skip_and_return_value_patch_available(self, data, addr): + """ + ``is_skip_and_return_value_patch_available`` determines if the instruction ``data`` at ``addr`` is a *call-like* + instruction that can be made into an instruction *returns a value*. + + .. note:: Architecture subclasses should implement this method. + + :param str data: bytes for the instruction to be checked + :param int addr: the virtual address of the instruction to be patched + :return: True if the instruction can be patched, False otherwise + :rtype: bool + :Example: + + >>> arch.is_skip_and_return_value_patch_available(arch.assemble("call 0")[0], 0) + True + >>> arch.is_skip_and_return_value_patch_available(arch.assemble("jmp eax")[0], 0) + False + >>> + """ + return self.perform_is_skip_and_return_value_patch_available(data, addr)
+ +
[docs] def convert_to_nop(self, data, addr): + """ + ``convert_to_nop`` reads the instruction(s) in ``data`` at virtual address ``addr`` and returns a string of nop + instructions of the same length as data. + + .. note:: Architecture subclasses should implement this method. + + :param str data: bytes for the instruction to be converted + :param int addr: the virtual address of the instruction to be patched + :return: string containing len(data) worth of no-operation instructions + :rtype: str + :Example: + + >>> arch.convert_to_nop("\\x00\\x00", 0) + '\\x90\\x90' + >>> + """ + return self.perform_convert_to_nop(data, addr)
+ +
[docs] def always_branch(self, data, addr): + """ + ``always_branch`` reads the instruction(s) in ``data`` at virtual address ``addr`` and returns a string of bytes + of the same length which always branches. + + .. note:: Architecture subclasses should implement this method. + + :param str data: bytes for the instruction to be converted + :param int addr: the virtual address of the instruction to be patched + :return: string containing len(data) which always branches to the same location as the provided instruction + :rtype: str + :Example: + + >>> bytes = arch.always_branch(arch.assemble("je 10")[0], 0) + >>> arch.get_instruction_text(bytes, 0) + (['nop '], 1L) + >>> arch.get_instruction_text(bytes[1:], 0) + (['jmp ', '0x9'], 5L) + >>> + """ + return self.perform_always_branch(data, addr)
+ +
[docs] def invert_branch(self, data, addr): + """ + ``invert_branch`` reads the instruction(s) in ``data`` at virtual address ``addr`` and returns a string of bytes + of the same length which inverts the branch of provided instruction. + + .. note:: Architecture subclasses should implement this method. + + :param str data: bytes for the instruction to be converted + :param int addr: the virtual address of the instruction to be patched + :return: string containing len(data) which always branches to the same location as the provided instruction + :rtype: str + :Example: + + >>> arch.get_instruction_text(arch.invert_branch(arch.assemble("je 10")[0], 0), 0) + (['jne ', '0xa'], 6L) + >>> arch.get_instruction_text(arch.invert_branch(arch.assemble("jo 10")[0], 0), 0) + (['jno ', '0xa'], 6L) + >>> arch.get_instruction_text(arch.invert_branch(arch.assemble("jge 10")[0], 0), 0) + (['jl ', '0xa'], 6L) + >>> + """ + return self.perform_invert_branch(data, addr)
+ +
[docs] def skip_and_return_value(self, data, addr, value): + """ + ``skip_and_return_value`` reads the instruction(s) in ``data`` at virtual address ``addr`` and returns a string of + bytes of the same length which doesn't call and instead *return a value*. + + .. note:: Architecture subclasses should implement this method. + + :param str data: bytes for the instruction to be converted + :param int addr: the virtual address of the instruction to be patched + :return: string containing len(data) which always branches to the same location as the provided instruction + :rtype: str + :Example: + + >>> arch.get_instruction_text(arch.skip_and_return_value(arch.assemble("call 10")[0], 0, 0), 0) + (['mov ', 'eax', ', ', '0x0'], 5L) + >>> + """ + return self.perform_skip_and_return_value(data, addr, value)
+ +
[docs] def is_view_type_constant_defined(self, type_name, const_name): + """ + + :param str type_name: the BinaryView type name of the constant to query + :param str const_name: the constant name to query + :rtype: None + :Example: + + >>> arch.set_view_type_constant("ELF", "R_COPY", ELF_RELOC_COPY) + >>> arch.is_view_type_constant_defined("ELF", "R_COPY") + True + >>> arch.is_view_type_constant_defined("ELF", "NOT_THERE") + False + >>> + """ + return core.BNIsBinaryViewTypeArchitectureConstantDefined(self.handle, type_name, const_name)
+ +
[docs] def get_view_type_constant(self, type_name, const_name, default_value=0): + """ + ``get_view_type_constant`` retrieves the view type constant for the given type_name and const_name. + + :param str type_name: the BinaryView type name of the constant to be retrieved + :param str const_name: the constant name to retrieved + :param int value: optional default value if the type_name is not present. default value is zero. + :return: The BinaryView type constant or the default_value if not found + :rtype: int + :Example: + + >>> ELF_RELOC_COPY = 5 + >>> arch.set_view_type_constant("ELF", "R_COPY", ELF_RELOC_COPY) + >>> arch.get_view_type_constant("ELF", "R_COPY") + 5L + >>> arch.get_view_type_constant("ELF", "NOT_HERE", 100) + 100L + """ + return core.BNGetBinaryViewTypeArchitectureConstant(self.handle, type_name, const_name, default_value)
+ +
[docs] def set_view_type_constant(self, type_name, const_name, value): + """ + ``set_view_type_constant`` creates a new binaryview type constant. + + :param str type_name: the BinaryView type name of the constant to be registered + :param str const_name: the constant name to register + :param int value: the value of the constant + :rtype: None + :Example: + + >>> ELF_RELOC_COPY = 5 + >>> arch.set_view_type_constant("ELF", "R_COPY", ELF_RELOC_COPY) + >>> + """ + core.BNSetBinaryViewTypeArchitectureConstant(self.handle, type_name, const_name, value)
+ +
[docs] def register_calling_convention(self, cc): + """ + ``register_calling_convention`` registers a new calling convention for the Architecture. + + :param CallingConvention cc: CallingConvention object to be registered + :rtype: None + """ + core.BNRegisterCallingConvention(self.handle, cc.handle)
+ + +_architecture_cache = {} +
[docs]class CoreArchitecture(Architecture): +
[docs] def __init__(self, handle): + super(CoreArchitecture, self).__init__() + + self.handle = core.handle_of_type(handle, core.BNArchitecture) + self.__dict__["name"] = core.BNGetArchitectureName(self.handle) + self.__dict__["endianness"] = Endianness(core.BNGetArchitectureEndianness(self.handle)) + self.__dict__["address_size"] = core.BNGetArchitectureAddressSize(self.handle) + self.__dict__["default_int_size"] = core.BNGetArchitectureDefaultIntegerSize(self.handle) + self.__dict__["instr_alignment"] = core.BNGetArchitectureInstructionAlignment(self.handle) + self.__dict__["max_instr_length"] = core.BNGetArchitectureMaxInstructionLength(self.handle) + self.__dict__["opcode_display_length"] = core.BNGetArchitectureOpcodeDisplayLength(self.handle) + self.__dict__["stack_pointer"] = core.BNGetArchitectureRegisterName(self.handle, + core.BNGetArchitectureStackPointerRegister(self.handle)) + + link_reg = core.BNGetArchitectureLinkRegister(self.handle) + if link_reg == 0xffffffff: + self.__dict__["link_reg"] = None + else: + self.__dict__["link_reg"] = core.BNGetArchitectureRegisterName(self.handle, link_reg) + + count = ctypes.c_ulonglong() + regs = core.BNGetAllArchitectureRegisters(self.handle, count) + self._all_regs = {} + self._regs_by_index = {} + self._full_width_regs = {} + self.__dict__["regs"] = {} + for i in range(0, count.value): + name = core.BNGetArchitectureRegisterName(self.handle, regs[i]) + info = core.BNGetArchitectureRegisterInfo(self.handle, regs[i]) + full_width_reg = core.BNGetArchitectureRegisterName(self.handle, info.fullWidthRegister) + self.regs[name] = binaryninja.function.RegisterInfo(full_width_reg, info.size, info.offset, + ImplicitRegisterExtend(info.extend), regs[i]) + self._all_regs[name] = regs[i] + self._regs_by_index[regs[i]] = name + for i in range(0, count.value): + info = core.BNGetArchitectureRegisterInfo(self.handle, regs[i]) + full_width_reg = core.BNGetArchitectureRegisterName(self.handle, info.fullWidthRegister) + if full_width_reg not in self._full_width_regs: + self._full_width_regs[full_width_reg] = self._all_regs[full_width_reg] + core.BNFreeRegisterList(regs) + + count = ctypes.c_ulonglong() + flags = core.BNGetAllArchitectureFlags(self.handle, count) + self._flags = {} + self._flags_by_index = {} + self.__dict__["flags"] = [] + for i in range(0, count.value): + name = core.BNGetArchitectureFlagName(self.handle, flags[i]) + self._flags[name] = flags[i] + self._flags_by_index[flags[i]] = name + self.flags.append(name) + core.BNFreeRegisterList(flags) + + count = ctypes.c_ulonglong() + write_types = core.BNGetAllArchitectureFlagWriteTypes(self.handle, count) + self._flag_write_types = {} + self._flag_write_types_by_index = {} + self.__dict__["flag_write_types"] = [] + for i in range(0, count.value): + name = core.BNGetArchitectureFlagWriteTypeName(self.handle, write_types[i]) + self._flag_write_types[name] = write_types[i] + self._flag_write_types_by_index[write_types[i]] = name + self.flag_write_types.append(name) + core.BNFreeRegisterList(write_types) + + count = ctypes.c_ulonglong() + sem_classes = core.BNGetAllArchitectureSemanticFlagClasses(self.handle, count) + self._semantic_flag_classes = {} + self._semantic_flag_classes_by_index = {} + self.__dict__["semantic_flag_classes"] = [] + for i in range(0, count.value): + name = core.BNGetArchitectureSemanticFlagClassName(self.handle, sem_classes[i]) + self._semantic_flag_classes[name] = sem_classes[i] + self._semantic_flag_classes_by_index[sem_classes[i]] = name + self.semantic_flag_classes.append(name) + core.BNFreeRegisterList(sem_classes) + + count = ctypes.c_ulonglong() + sem_groups = core.BNGetAllArchitectureSemanticFlagGroups(self.handle, count) + self._semantic_flag_groups = {} + self._semantic_flag_groups_by_index = {} + self.__dict__["semantic_flag_groups"] = [] + for i in range(0, count.value): + name = core.BNGetArchitectureSemanticFlagGroupName(self.handle, sem_groups[i]) + self._semantic_flag_groups[name] = sem_groups[i] + self._semantic_flag_groups_by_index[sem_groups[i]] = name + self.semantic_flag_groups.append(name) + core.BNFreeRegisterList(sem_groups) + + self._flag_roles = {} + self.__dict__["flag_roles"] = {} + for flag in self.__dict__["flags"]: + role = FlagRole(core.BNGetArchitectureFlagRole(self.handle, self._flags[flag], 0)) + self.__dict__["flag_roles"][flag] = role + self._flag_roles[self._flags[flag]] = role + + self.__dict__["flags_required_for_flag_condition"] = {} + for cond in LowLevelILFlagCondition: + count = ctypes.c_ulonglong() + flags = core.BNGetArchitectureFlagsRequiredForFlagCondition(self.handle, cond, 0, count) + flag_names = [] + for i in range(0, count.value): + flag_names.append(self._flags_by_index[flags[i]]) + core.BNFreeRegisterList(flags) + self.__dict__["flags_required_for_flag_condition"][cond] = flag_names + + self._flags_required_by_semantic_flag_group = {} + self.__dict__["flags_required_for_semantic_flag_group"] = {} + for group in self.semantic_flag_groups: + count = ctypes.c_ulonglong() + flags = core.BNGetArchitectureFlagsRequiredForSemanticFlagGroup(self.handle, + self._semantic_flag_groups[group], count) + flag_indexes = [] + flag_names = [] + for i in range(0, count.value): + flag_indexes.append(flags[i]) + flag_names.append(self._flags_by_index[flags[i]]) + core.BNFreeRegisterList(flags) + self._flags_required_by_semantic_flag_group[self._semantic_flag_groups[group]] = flag_indexes + self.__dict__["flags_required_for_semantic_flag_group"][cond] = flag_names + + self._flag_conditions_for_semantic_flag_group = {} + self.__dict__["flag_conditions_for_semantic_flag_group"] = {} + for group in self.semantic_flag_groups: + count = ctypes.c_ulonglong() + conditions = core.BNGetArchitectureFlagConditionsForSemanticFlagGroup(self.handle, + self._semantic_flag_groups[group], count) + class_index_cond = {} + class_cond = {} + for i in range(0, count.value): + class_index_cond[conditions[i].semanticClass] = conditions[i].condition + if conditions[i].semanticClass == 0: + class_cond[None] = conditions[i].condition + elif conditions[i].semanticClass in self._semantic_flag_classes_by_index: + class_cond[self._semantic_flag_classes_by_index[conditions[i].semanticClass]] = conditions[i].condition + core.BNFreeFlagConditionsForSemanticFlagGroup(conditions) + self._flag_conditions_for_semantic_flag_group[self._semantic_flag_groups[group]] = class_index_cond + self.__dict__["flag_conditions_for_semantic_flag_group"][group] = class_cond + + self._flags_written_by_flag_write_type = {} + self.__dict__["flags_written_by_flag_write_type"] = {} + for write_type in self.flag_write_types: + count = ctypes.c_ulonglong() + flags = core.BNGetArchitectureFlagsWrittenByFlagWriteType(self.handle, + self._flag_write_types[write_type], count) + flag_indexes = [] + flag_names = [] + for i in range(0, count.value): + flag_indexes.append(flags[i]) + flag_names.append(self._flags_by_index[flags[i]]) + core.BNFreeRegisterList(flags) + self._flags_written_by_flag_write_type[self._flag_write_types[write_type]] = flag_indexes + self.__dict__["flags_written_by_flag_write_type"][write_type] = flag_names + + self._semantic_class_for_flag_write_type = {} + self.__dict__["semantic_class_for_flag_write_type"] = {} + for write_type in self.flag_write_types: + sem_class = core.BNGetArchitectureSemanticClassForFlagWriteType(self.handle, + self._flag_write_types[write_type]) + if sem_class == 0: + sem_class_name = None + else: + sem_class_name = self._semantic_flag_classes_by_index[sem_class] + self._semantic_class_for_flag_write_type[self._flag_write_types[write_type]] = sem_class + self.__dict__["semantic_class_for_flag_write_type"][write_type] = sem_class_name + + count = ctypes.c_ulonglong() + regs = core.BNGetArchitectureGlobalRegisters(self.handle, count) + self.__dict__["global_regs"] = [] + for i in range(0, count.value): + self.global_regs.append(core.BNGetArchitectureRegisterName(self.handle, regs[i])) + core.BNFreeRegisterList(regs) + + count = ctypes.c_ulonglong() + regs = core.BNGetAllArchitectureRegisterStacks(self.handle, count) + self._all_reg_stacks = {} + self._reg_stacks_by_index = {} + self.__dict__["reg_stacks"] = {} + for i in range(0, count.value): + name = core.BNGetArchitectureRegisterStackName(self.handle, regs[i]) + info = core.BNGetArchitectureRegisterStackInfo(self.handle, regs[i]) + storage = [] + for j in range(0, info.storageCount): + storage.append(core.BNGetArchitectureRegisterName(self.handle, info.firstStorageReg + j)) + top_rel = [] + for j in range(0, info.topRelativeCount): + top_rel.append(core.BNGetArchitectureRegisterName(self.handle, info.firstTopRelativeReg + j)) + top = core.BNGetArchitectureRegisterName(self.handle, info.stackTopReg) + self.reg_stacks[name] = binaryninja.function.RegisterStackInfo(storage, top_rel, top, regs[i]) + self._all_reg_stacks[name] = regs[i] + self._reg_stacks_by_index[regs[i]] = name + core.BNFreeRegisterList(regs) + + count = ctypes.c_ulonglong() + intrinsics = core.BNGetAllArchitectureIntrinsics(self.handle, count) + self._intrinsics = {} + self._intrinsics_by_index = {} + self.__dict__["intrinsics"] = {} + for i in range(0, count.value): + name = core.BNGetArchitectureIntrinsicName(self.handle, intrinsics[i]) + input_count = ctypes.c_ulonglong() + inputs = core.BNGetArchitectureIntrinsicInputs(self.handle, intrinsics[i], input_count) + input_list = [] + for j in range(0, input_count.value): + input_name = inputs[j].name + type_obj = types.Type(core.BNNewTypeReference(inputs[j].type), confidence = inputs[j].typeConfidence) + input_list.append(binaryninja.function.IntrinsicInput(type_obj, input_name)) + core.BNFreeNameAndTypeList(inputs, input_count.value) + output_count = ctypes.c_ulonglong() + outputs = core.BNGetArchitectureIntrinsicOutputs(self.handle, intrinsics[i], output_count) + output_list = [] + for j in range(0, output_count.value): + output_list.append(types.Type(core.BNNewTypeReference(outputs[j].type), confidence = outputs[j].confidence)) + core.BNFreeOutputTypeList(outputs, output_count.value) + self.intrinsics[name] = binaryninja.function.IntrinsicInfo(input_list, output_list) + self._intrinsics[name] = intrinsics[i] + self._intrinsics_by_index[intrinsics[i]] = (name, self.intrinsics[name]) + core.BNFreeRegisterList(intrinsics) + if type(self) is CoreArchitecture: + global _architecture_cache + _architecture_cache[ctypes.addressof(handle.contents)] = self
+ + @classmethod + def _from_cache(cls, handle): + global _architecture_cache + return _architecture_cache.get(ctypes.addressof(handle.contents)) or cls(handle) + +
[docs] def get_associated_arch_by_address(self, addr): + new_addr = ctypes.c_ulonglong() + new_addr.value = addr + result = core.BNGetAssociatedArchitectureByAddress(self.handle, new_addr) + return CoreArchitecture._from_cache(handle = result), new_addr.value
+ +
[docs] def get_instruction_info(self, data, addr): + """ + ``get_instruction_info`` returns an InstructionInfo object for the instruction at the given virtual address + ``addr`` with data ``data``. + + .. note :: The instruction info object should always set the InstructionInfo.length to the instruction length, \ + and the branches of the proper types should be added if the instruction is a branch. + + :param str data: max_instruction_length bytes from the binary at virtual address ``addr`` + :param int addr: virtual address of bytes in ``data`` + :return: the InstructionInfo for the current instruction + :rtype: InstructionInfo + """ + info = core.BNInstructionInfo() + buf = (ctypes.c_ubyte * len(data))() + ctypes.memmove(buf, data, len(data)) + if not core.BNGetInstructionInfo(self.handle, buf, addr, len(data), info): + return None + result = binaryninja.function.InstructionInfo() + result.length = info.length + result.arch_transition_by_target_addr = info.archTransitionByTargetAddr + result.branch_delay = info.branchDelay + for i in range(0, info.branchCount): + target = info.branchTarget[i] + if info.branchArch[i]: + arch = CoreArchitecture._from_cache(info.branchArch[i]) + else: + arch = None + result.add_branch(BranchType(info.branchType[i]), target, arch) + return result
+ +
[docs] def get_instruction_text(self, data, addr): + """ + ``get_instruction_text`` returns a list of InstructionTextToken objects for the instruction at the given virtual + address ``addr`` with data ``data``. + + :param str data: max_instruction_length bytes from the binary at virtual address ``addr`` + :param int addr: virtual address of bytes in ``data`` + :return: an InstructionTextToken list for the current instruction + :rtype: list(InstructionTextToken) + """ + if not isinstance(data, bytes): + if isinstance(data, str): + data=data.encode() + else: + raise TypeError("Must be bytes or str") + count = ctypes.c_ulonglong() + length = ctypes.c_ulonglong() + length.value = len(data) + buf = (ctypes.c_ubyte * len(data))() + ctypes.memmove(buf, data, len(data)) + tokens = ctypes.POINTER(core.BNInstructionTextToken)() + if not core.BNGetInstructionText(self.handle, buf, addr, length, tokens, count): + return None, 0 + result = binaryninja.function.InstructionTextToken.get_instruction_lines(tokens, count.value) + core.BNFreeInstructionText(tokens, count.value) + return result, length.value
+ +
[docs] def get_instruction_low_level_il(self, data, addr, il): + """ + ``get_instruction_low_level_il`` appends LowLevelILExpr objects to ``il`` for the instruction at the given + virtual address ``addr`` with data ``data``. + + This is used to analyze arbitrary data at an address, if you are working with an existing binary, you likely + want to be using ``Function.get_low_level_il_at``. + + :param str data: max_instruction_length bytes from the binary at virtual address ``addr`` + :param int addr: virtual address of bytes in ``data`` + :param LowLevelILFunction il: The function the current instruction belongs to + :return: the length of the current instruction + :rtype: int + """ + length = ctypes.c_ulonglong() + length.value = len(data) + buf = (ctypes.c_ubyte * len(data))() + ctypes.memmove(buf, data, len(data)) + core.BNGetInstructionLowLevelIL(self.handle, buf, addr, length, il.handle) + return length.value
+ +
[docs] def get_flag_write_low_level_il(self, op, size, write_type, flag, operands, il): + """ + :param LowLevelILOperation op: + :param int size: + :param str write_type: + :param list(str or int) operands: a list of either items that are either string register names or constant \ + integer values + :param LowLevelILFunction il: + :rtype: LowLevelILExpr + """ + flag = self.get_flag_index(flag) + operand_list = (core.BNRegisterOrConstant * len(operands))() + for i in range(len(operands)): + if isinstance(operands[i], str): + operand_list[i].constant = False + operand_list[i].reg = self.regs[operands[i]].index + elif isinstance(operands[i], lowlevelil.ILRegister): + operand_list[i].constant = False + operand_list[i].reg = operands[i].index + else: + operand_list[i].constant = True + operand_list[i].value = operands[i] + return lowlevelil.LowLevelILExpr(core.BNGetArchitectureFlagWriteLowLevelIL(self.handle, op, size, + self._flag_write_types[write_type], flag, operand_list, len(operand_list), il.handle))
+ +
[docs] def get_flag_condition_low_level_il(self, cond, sem_class, il): + """ + :param LowLevelILFlagCondition cond: Flag condition to be computed + :param str sem_class: Semantic class to be used (None for default semantics) + :param LowLevelILFunction il: LowLevelILFunction object to append LowLevelILExpr objects to + :rtype: LowLevelILExpr + """ + class_index = self.get_semantic_flag_class_index(sem_class) + return lowlevelil.LowLevelILExpr(core.BNGetArchitectureFlagConditionLowLevelIL(self.handle, cond, + class_index, il.handle))
+ +
[docs] def get_semantic_flag_group_low_level_il(self, sem_group, il): + """ + :param str sem_group: + :param LowLevelILFunction il: + :rtype: LowLevelILExpr + """ + group_index = self.get_semantic_flag_group_index(sem_group) + return lowlevelil.LowLevelILExpr(core.BNGetArchitectureSemanticFlagGroupLowLevelIL(self.handle, group_index, il.handle))
+ +
[docs] def assemble(self, code, addr=0): + """ + ``assemble`` converts the string of assembly instructions ``code`` loaded at virtual address ``addr`` to the + byte representation of those instructions. + + :param str code: string representation of the instructions to be assembled + :param int addr: virtual address that the instructions will be loaded at + :return: the bytes for the assembled instructions + :rtype: Python3 - a 'bytes' object; Python2 - a 'bytes' object + :Example: + + >>> arch.assemble("je 10") + '\\x0f\\x84\\x04\\x00\\x00\\x00' + >>> + """ + result = databuffer.DataBuffer() + errors = ctypes.c_char_p() + if not core.BNAssemble(self.handle, code, addr, result.handle, errors): + error_str = errors.value + core.BNFreeString(ctypes.cast(errors, ctypes.POINTER(ctypes.c_byte))) + raise ValueError("Could not assemble: %s" % errors.value) + if isinstance(str(result), bytes): + return str(result) + else: + return bytes(result)
+ +
[docs] def is_never_branch_patch_available(self, data, addr): + """ + ``is_never_branch_patch_available`` determines if the instruction ``data`` at ``addr`` can be made to **never branch**. + + :param str data: bytes for the instruction to be checked + :param int addr: the virtual address of the instruction to be patched + :return: True if the instruction can be patched, False otherwise + :rtype: bool + :Example: + + >>> arch.is_never_branch_patch_available(arch.assemble("je 10")[0], 0) + True + >>> arch.is_never_branch_patch_available(arch.assemble("nop")[0], 0) + False + >>> + """ + buf = (ctypes.c_ubyte * len(data))() + ctypes.memmove(buf, data, len(data)) + return core.BNIsArchitectureNeverBranchPatchAvailable(self.handle, buf, addr, len(data))
+ +
[docs] def is_always_branch_patch_available(self, data, addr): + """ + ``is_always_branch_patch_available`` determines if the instruction ``data`` at ``addr`` can be made to + **always branch**. + + :param str data: bytes for the instruction to be checked + :param int addr: the virtual address of the instruction to be patched + :return: True if the instruction can be patched, False otherwise + :rtype: bool + :Example: + + >>> arch.is_always_branch_patch_available(arch.assemble("je 10")[0], 0) + True + >>> arch.is_always_branch_patch_available(arch.assemble("nop")[0], 0) + False + >>> + """ + buf = (ctypes.c_ubyte * len(data))() + ctypes.memmove(buf, data, len(data)) + return core.BNIsArchitectureAlwaysBranchPatchAvailable(self.handle, buf, addr, len(data))
+ +
[docs] def is_invert_branch_patch_available(self, data, addr): + """ + ``is_always_branch_patch_available`` determines if the instruction ``data`` at ``addr`` can be inverted. + + :param str data: bytes for the instruction to be checked + :param int addr: the virtual address of the instruction to be patched + :return: True if the instruction can be patched, False otherwise + :rtype: bool + :Example: + + >>> arch.is_invert_branch_patch_available(arch.assemble("je 10")[0], 0) + True + >>> arch.is_invert_branch_patch_available(arch.assemble("nop")[0], 0) + False + >>> + """ + buf = (ctypes.c_ubyte * len(data))() + ctypes.memmove(buf, data, len(data)) + return core.BNIsArchitectureInvertBranchPatchAvailable(self.handle, buf, addr, len(data))
+ +
[docs] def is_skip_and_return_zero_patch_available(self, data, addr): + """ + ``is_skip_and_return_zero_patch_available`` determines if the instruction ``data`` at ``addr`` is a *call-like* + instruction that can be made into an instruction *returns zero*. + + :param str data: bytes for the instruction to be checked + :param int addr: the virtual address of the instruction to be patched + :return: True if the instruction can be patched, False otherwise + :rtype: bool + :Example: + + >>> arch.is_skip_and_return_zero_patch_available(arch.assemble("call 0")[0], 0) + True + >>> arch.is_skip_and_return_zero_patch_available(arch.assemble("call eax")[0], 0) + True + >>> arch.is_skip_and_return_zero_patch_available(arch.assemble("jmp eax")[0], 0) + False + >>> + """ + buf = (ctypes.c_ubyte * len(data))() + ctypes.memmove(buf, data, len(data)) + return core.BNIsArchitectureSkipAndReturnZeroPatchAvailable(self.handle, buf, addr, len(data))
+ +
[docs] def is_skip_and_return_value_patch_available(self, data, addr): + """ + ``is_skip_and_return_value_patch_available`` determines if the instruction ``data`` at ``addr`` is a *call-like* + instruction that can be made into an instruction *returns a value*. + + :param str data: bytes for the instruction to be checked + :param int addr: the virtual address of the instruction to be patched + :return: True if the instruction can be patched, False otherwise + :rtype: bool + :Example: + + >>> arch.is_skip_and_return_value_patch_available(arch.assemble("call 0")[0], 0) + True + >>> arch.is_skip_and_return_value_patch_available(arch.assemble("jmp eax")[0], 0) + False + >>> + """ + buf = (ctypes.c_ubyte * len(data))() + ctypes.memmove(buf, data, len(data)) + return core.BNIsArchitectureSkipAndReturnValuePatchAvailable(self.handle, buf, addr, len(data))
+ +
[docs] def convert_to_nop(self, data, addr): + """ + ``convert_to_nop`` reads the instruction(s) in ``data`` at virtual address ``addr`` and returns a string of nop + instructions of the same length as data. + + :param str data: bytes for the instruction to be converted + :param int addr: the virtual address of the instruction to be patched + :return: string containing len(data) worth of no-operation instructions + :rtype: str + :Example: + + >>> arch.convert_to_nop("\\x00\\x00", 0) + '\\x90\\x90' + >>> + """ + buf = (ctypes.c_ubyte * len(data))() + ctypes.memmove(buf, data, len(data)) + if not core.BNArchitectureConvertToNop(self.handle, buf, addr, len(data)): + return None + result = ctypes.create_string_buffer(len(data)) + ctypes.memmove(result, buf, len(data)) + return result.raw
+ +
[docs] def always_branch(self, data, addr): + """ + ``always_branch`` reads the instruction(s) in ``data`` at virtual address ``addr`` and returns a string of bytes + of the same length which always branches. + + :param str data: bytes for the instruction to be converted + :param int addr: the virtual address of the instruction to be patched + :return: string containing len(data) which always branches to the same location as the provided instruction + :rtype: str + :Example: + + >>> bytes = arch.always_branch(arch.assemble("je 10")[0], 0) + >>> arch.get_instruction_text(bytes, 0) + (['nop '], 1L) + >>> arch.get_instruction_text(bytes[1:], 0) + (['jmp ', '0x9'], 5L) + >>> + """ + buf = (ctypes.c_ubyte * len(data))() + ctypes.memmove(buf, data, len(data)) + if not core.BNArchitectureAlwaysBranch(self.handle, buf, addr, len(data)): + return None + result = ctypes.create_string_buffer(len(data)) + ctypes.memmove(result, buf, len(data)) + return result.raw
+ +
[docs] def invert_branch(self, data, addr): + """ + ``invert_branch`` reads the instruction(s) in ``data`` at virtual address ``addr`` and returns a string of bytes + of the same length which inverts the branch of provided instruction. + + :param str data: bytes for the instruction to be converted + :param int addr: the virtual address of the instruction to be patched + :return: string containing len(data) which always branches to the same location as the provided instruction + :rtype: str + :Example: + + >>> arch.get_instruction_text(arch.invert_branch(arch.assemble("je 10")[0], 0), 0) + (['jne ', '0xa'], 6L) + >>> arch.get_instruction_text(arch.invert_branch(arch.assemble("jo 10")[0], 0), 0) + (['jno ', '0xa'], 6L) + >>> arch.get_instruction_text(arch.invert_branch(arch.assemble("jge 10")[0], 0), 0) + (['jl ', '0xa'], 6L) + >>> + """ + buf = (ctypes.c_ubyte * len(data))() + ctypes.memmove(buf, data, len(data)) + if not core.BNArchitectureInvertBranch(self.handle, buf, addr, len(data)): + return None + result = ctypes.create_string_buffer(len(data)) + ctypes.memmove(result, buf, len(data)) + return result.raw
+ +
[docs] def skip_and_return_value(self, data, addr, value): + """ + ``skip_and_return_value`` reads the instruction(s) in ``data`` at virtual address ``addr`` and returns a string of + bytes of the same length which doesn't call and instead *return a value*. + + :param str data: bytes for the instruction to be converted + :param int addr: the virtual address of the instruction to be patched + :return: string containing len(data) which always branches to the same location as the provided instruction + :rtype: str + :Example: + + >>> arch.get_instruction_text(arch.skip_and_return_value(arch.assemble("call 10")[0], 0, 0), 0) + (['mov ', 'eax', ', ', '0x0'], 5L) + >>> + """ + buf = (ctypes.c_ubyte * len(data))() + ctypes.memmove(buf, data, len(data)) + if not core.BNArchitectureSkipAndReturnValue(self.handle, buf, addr, len(data), value): + return None + result = ctypes.create_string_buffer(len(data)) + ctypes.memmove(result, buf, len(data)) + return result.raw
+ +
[docs] def get_flag_role(self, flag, sem_class = None): + """ + ``get_flag_role`` gets the role of a given flag. + + :param int flag: flag + :param int sem_class: optional semantic flag class + :return: flag role + :rtype: FlagRole + """ + flag = self.get_flag_index(flag) + sem_class = self.get_semantic_flag_class_index(sem_class) + return FlagRole(core.BNGetArchitectureFlagRole(self.handle, flag, sem_class))
+ +
[docs] def get_flags_required_for_flag_condition(self, cond, sem_class = None): + sem_class = self.get_semantic_flag_class_index(sem_class) + count = ctypes.c_ulonglong() + flags = core.BNGetArchitectureFlagsRequiredForFlagCondition(self.handle, cond, sem_class, count) + flag_names = [] + for i in range(0, count.value): + flag_names.append(self._flags_by_index[flags[i]]) + core.BNFreeRegisterList(flags) + return flag_names
+ + +
[docs]class ArchitectureHook(CoreArchitecture): +
[docs] def __init__(self, base_arch): + self.base_arch = base_arch + super(ArchitectureHook, self).__init__(base_arch.handle) + + # To improve performance of simpler hooks, use null callback for functions that are not being overridden + if self.get_associated_arch_by_address.__code__ == CoreArchitecture.get_associated_arch_by_address.__code__: + self._cb.getAssociatedArchitectureByAddress = self._cb.getAssociatedArchitectureByAddress.__class__() + if self.get_instruction_info.__code__ == CoreArchitecture.get_instruction_info.__code__: + self._cb.getInstructionInfo = self._cb.getInstructionInfo.__class__() + if self.get_instruction_text.__code__ == CoreArchitecture.get_instruction_text.__code__: + self._cb.getInstructionText = self._cb.getInstructionText.__class__() + if self.__class__.stack_pointer is None: + self._cb.getStackPointerRegister = self._cb.getStackPointerRegister.__class__() + if self.__class__.link_reg is None: + self._cb.getLinkRegister = self._cb.getLinkRegister.__class__() + if len(self.__class__.regs) == 0: + self._cb.getRegisterInfo = self._cb.getRegisterInfo.__class__() + self._cb.getRegisterName = self._cb.getRegisterName.__class__() + if len(self.__class__.reg_stacks) == 0: + self._cb.getRegisterStackName = self._cb.getRegisterStackName.__class__() + self._cb.getRegisterStackInfo = self._cb.getRegisterStackInfo.__class__() + if len(self.__class__.intrinsics) == 0: + self._cb.getIntrinsicName = self._cb.getIntrinsicName.__class__() + self._cb.getIntrinsicInputs = self._cb.getIntrinsicInputs.__class__() + self._cb.freeNameAndTypeList = self._cb.freeNameAndTypeList.__class__() + self._cb.getIntrinsicOutputs = self._cb.getIntrinsicOutputs.__class__() + self._cb.freeTypeList = self._cb.freeTypeList.__class__()
+ +
[docs] def register(self): + self.__class__._registered_cb = self._cb + self.handle = core.BNRegisterArchitectureHook(self.base_arch.handle, self._cb)
+ + +
[docs]class ReferenceSource(object): +
[docs] def __init__(self, func, arch, addr): + self.function = func + self.arch = arch + self.address = addr
+ + def __repr__(self): + if self.arch: + return "<ref: %s@%#x>" % (self.arch.name, self.address) + else: + return "<ref: %#x>" % self.address
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/basicblock.html b/personal/api-docs/_modules/binaryninja/basicblock.html new file mode 100644 index 0000000..774f630 --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/basicblock.html @@ -0,0 +1,668 @@ + + + + + + + + + + + binaryninja.basicblock — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.basicblock

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

Source code for binaryninja.binaryview

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+import struct
+import traceback
+import ctypes
+import abc
+import numbers
+
+from collections import OrderedDict
+
+# Binary Ninja components
+from binaryninja import _binaryninjacore as core
+from binaryninja.enums import (AnalysisState, SymbolType, InstructionTextTokenType,
+	Endianness, ModificationStatus, StringType, SegmentFlag, SectionSemantics, FindFlag, TypeClass)
+import binaryninja
+from binaryninja import associateddatastore # required for _BinaryViewAssociatedDataStore
+from binaryninja import log
+from binaryninja import types
+from binaryninja import fileaccessor
+from binaryninja import databuffer
+from binaryninja import basicblock
+from binaryninja import lineardisassembly
+from binaryninja import metadata
+from binaryninja import highlight
+from binaryninja import function
+
+# 2-3 compatibility
+from binaryninja import range
+from binaryninja import with_metaclass
+
+
+
[docs]class BinaryDataNotification(object): +
[docs] def __init__(self): + pass
+ +
[docs] def data_written(self, view, offset, length): + pass
+ +
[docs] def data_inserted(self, view, offset, length): + pass
+ +
[docs] def data_removed(self, view, offset, length): + pass
+ +
[docs] def function_added(self, view, func): + pass
+ +
[docs] def function_removed(self, view, func): + pass
+ +
[docs] def function_updated(self, view, func): + pass
+ +
[docs] def function_update_requested(self, view, func): + pass
+ +
[docs] def data_var_added(self, view, var): + pass
+ +
[docs] def data_var_removed(self, view, var): + pass
+ +
[docs] def data_var_updated(self, view, var): + pass
+ +
[docs] def string_found(self, view, string_type, offset, length): + pass
+ +
[docs] def string_removed(self, view, string_type, offset, length): + pass
+ +
[docs] def type_defined(self, view, name, type): + pass
+ +
[docs] def type_undefined(self, view, name, type): + pass
+ + +
[docs]class StringReference(object): +
[docs] def __init__(self, bv, string_type, start, length): + self.type = string_type + self.start = start + self.length = length + self.view = bv
+ + @property + def value(self): + return binaryninja.pyNativeStr(self.view.read(self.start, self.length)) + + def __repr__(self): + return "<%s: %#x, len %#x>" % (self.type, self.start, self.length)
+ + +_pending_analysis_completion_events = {} +
[docs]class AnalysisCompletionEvent(object): + """ + The ``AnalysisCompletionEvent`` object provides an asynchronous mechanism for receiving + callbacks when analysis is complete. The callback runs once. A completion event must be added + for each new analysis in order to be notified of each analysis completion. The + AnalysisCompletionEvent class takes responsibility for keeping track of the object's lifetime. + + :Example: + >>> def on_complete(self): + ... print("Analysis Complete", self.view) + ... + >>> evt = AnalysisCompletionEvent(bv, on_complete) + >>> + """ +
[docs] def __init__(self, view, callback): + self.view = view + self.callback = callback + self._cb = ctypes.CFUNCTYPE(None, ctypes.c_void_p)(self._notify) + self.handle = core.BNAddAnalysisCompletionEvent(self.view.handle, None, self._cb) + global _pending_analysis_completion_events + _pending_analysis_completion_events[id(self)] = self
+ + def __del__(self): + global _pending_analysis_completion_events + if id(self) in _pending_analysis_completion_events: + del _pending_analysis_completion_events[id(self)] + core.BNFreeAnalysisCompletionEvent(self.handle) + + def _notify(self, ctxt): + global _pending_analysis_completion_events + if id(self) in _pending_analysis_completion_events: + del _pending_analysis_completion_events[id(self)] + try: + self.callback(self) + except: + log.log_error(traceback.format_exc()) + + def _empty_callback(self): + pass + +
[docs] def cancel(self): + """ + .. warning: This method should only be used when the system is being + shut down and no further analysis should be done afterward. + """ + self.callback = self._empty_callback + core.BNCancelAnalysisCompletionEvent(self.handle) + global _pending_analysis_completion_events + if id(self) in _pending_analysis_completion_events: + del _pending_analysis_completion_events[id(self)]
+ + +
[docs]class ActiveAnalysisInfo(object): +
[docs] def __init__(self, func, analysis_time, update_count, submit_count): + self.func = func + self.analysis_time = analysis_time + self.update_count = update_count + self.submit_count = submit_count
+ + def __repr__(self): + return "<ActiveAnalysisInfo %s, analysis_time %d, update_count %d, submit_count %d>" % (self.func, self.analysis_time, self.update_count, self.submit_count)
+ + +
[docs]class AnalysisInfo(object): +
[docs] def __init__(self, state, analysis_time, active_info): + self.state = AnalysisState(state) + self.analysis_time = analysis_time + self.active_info = active_info
+ + def __repr__(self): + return "<AnalysisInfo %s, analysis_time %d, active_info %s>" % (self.state, self.analysis_time, self.active_info)
+ + +
[docs]class AnalysisProgress(object): +
[docs] def __init__(self, state, count, total): + self.state = state + self.count = count + self.total = total
+ + def __str__(self): + if self.state == AnalysisState.DisassembleState: + return "Disassembling (%d/%d)" % (self.count, self.total) + if self.state == AnalysisState.AnalyzeState: + return "Analyzing (%d/%d)" % (self.count, self.total) + if self.state == AnalysisState.ExtendedAnalyzeState: + return "Extended Analysis" + return "Idle" + + def __repr__(self): + return "<progress: %s>" % str(self)
+ + +
[docs]class DataVariable(object): +
[docs] def __init__(self, addr, var_type, auto_discovered, view=None): + self.address = addr + self.type = var_type + self.auto_discovered = auto_discovered + self.view = view
+ + @property + def data_refs_from(self): + """data cross references from this data variable (read-only)""" + return self.view.get_data_refs_from(self.address, len(self.type)) + + @property + def data_refs(self): + """data cross references to this data variable (read-only)""" + return self.view.get_data_refs(self.address, len(self.type)) + + @property + def code_refs(self): + """code references to this data variable (read-only)""" + return self.view.get_code_refs(self.address, len(self.type)) + + def __len__(self): + return len(self.type) + + def __repr__(self): + return "<var 0x%x: %s>" % (self.address, str(self.type))
+ + +
[docs]class BinaryDataNotificationCallbacks(object): +
[docs] def __init__(self, view, notify): + self.view = view + self.notify = notify + self._cb = core.BNBinaryDataNotification() + self._cb.context = 0 + self._cb.dataWritten = self._cb.dataWritten.__class__(self._data_written) + self._cb.dataInserted = self._cb.dataInserted.__class__(self._data_inserted) + self._cb.dataRemoved = self._cb.dataRemoved.__class__(self._data_removed) + self._cb.functionAdded = self._cb.functionAdded.__class__(self._function_added) + self._cb.functionRemoved = self._cb.functionRemoved.__class__(self._function_removed) + self._cb.functionUpdated = self._cb.functionUpdated.__class__(self._function_updated) + self._cb.functionUpdateRequested = self._cb.functionUpdateRequested.__class__(self._function_update_requested) + self._cb.dataVariableAdded = self._cb.dataVariableAdded.__class__(self._data_var_added) + self._cb.dataVariableRemoved = self._cb.dataVariableRemoved.__class__(self._data_var_removed) + self._cb.dataVariableUpdated = self._cb.dataVariableUpdated.__class__(self._data_var_updated) + self._cb.stringFound = self._cb.stringFound.__class__(self._string_found) + self._cb.stringRemoved = self._cb.stringRemoved.__class__(self._string_removed) + self._cb.typeDefined = self._cb.typeDefined.__class__(self._type_defined) + self._cb.typeUndefined = self._cb.typeUndefined.__class__(self._type_undefined)
+ + def _register(self): + core.BNRegisterDataNotification(self.view.handle, self._cb) + + def _unregister(self): + core.BNUnregisterDataNotification(self.view.handle, self._cb) + + def _data_written(self, ctxt, view, offset, length): + try: + self.notify.data_written(self.view, offset, length) + except OSError: + log.log_error(traceback.format_exc()) + + def _data_inserted(self, ctxt, view, offset, length): + try: + self.notify.data_inserted(self.view, offset, length) + except: + log.log_error(traceback.format_exc()) + + def _data_removed(self, ctxt, view, offset, length): + try: + self.notify.data_removed(self.view, offset, length) + except: + log.log_error(traceback.format_exc()) + + def _function_added(self, ctxt, view, func): + try: + self.notify.function_added(self.view, binaryninja.function.Function(self.view, core.BNNewFunctionReference(func))) + except: + log.log_error(traceback.format_exc()) + + def _function_removed(self, ctxt, view, func): + try: + self.notify.function_removed(self.view, binaryninja.function.Function(self.view, core.BNNewFunctionReference(func))) + except: + log.log_error(traceback.format_exc()) + + def _function_updated(self, ctxt, view, func): + try: + self.notify.function_updated(self.view, binaryninja.function.Function(self.view, core.BNNewFunctionReference(func))) + except: + log.log_error(traceback.format_exc()) + + def _function_update_requested(self, ctxt, view, func): + try: + self.notify.function_update_requested(self.view, binaryninja.function.Function(self.view, core.BNNewFunctionReference(func))) + except: + log.log_error(traceback.format_exc()) + + def _data_var_added(self, ctxt, view, var): + try: + address = var[0].address + var_type = types.Type(core.BNNewTypeReference(var[0].type), platform = self.view.platform, confidence = var[0].typeConfidence) + auto_discovered = var[0].autoDiscovered + self.notify.data_var_added(self.view, DataVariable(address, var_type, auto_discovered, view)) + except: + log.log_error(traceback.format_exc()) + + def _data_var_removed(self, ctxt, view, var): + try: + address = var[0].address + var_type = types.Type(core.BNNewTypeReference(var[0].type), platform = self.view.platform, confidence = var[0].typeConfidence) + auto_discovered = var[0].autoDiscovered + self.notify.data_var_removed(self.view, DataVariable(address, var_type, auto_discovered, view)) + except: + log.log_error(traceback.format_exc()) + + def _data_var_updated(self, ctxt, view, var): + try: + address = var[0].address + var_type = types.Type(core.BNNewTypeReference(var[0].type), platform = self.view.platform, confidence = var[0].typeConfidence) + auto_discovered = var[0].autoDiscovered + self.notify.data_var_updated(self.view, DataVariable(address, var_type, auto_discovered, view)) + except: + log.log_error(traceback.format_exc()) + + def _string_found(self, ctxt, view, string_type, offset, length): + try: + self.notify.string_found(self.view, StringType(string_type), offset, length) + except: + log.log_error(traceback.format_exc()) + + def _string_removed(self, ctxt, view, string_type, offset, length): + try: + self.notify.string_removed(self.view, StringType(string_type), offset, length) + except: + log.log_error(traceback.format_exc()) + + def _type_defined(self, ctxt, view, name, type_obj): + try: + qualified_name = types.QualifiedName._from_core_struct(name[0]) + self.notify.type_defined(view, qualified_name, types.Type(core.BNNewTypeReference(type_obj), platform = self.view.platform)) + except: + log.log_error(traceback.format_exc()) + + def _type_undefined(self, ctxt, view, name, type_obj): + try: + qualified_name = types.QualifiedName._from_core_struct(name[0]) + self.notify.type_undefined(view, qualified_name, types.Type(core.BNNewTypeReference(type_obj), platform = self.view.platform)) + except: + log.log_error(traceback.format_exc())
+ + +class _BinaryViewTypeMetaclass(type): + + @property + def list(self): + """List all BinaryView types (read-only)""" + binaryninja._init_plugins() + count = ctypes.c_ulonglong() + types = core.BNGetBinaryViewTypes(count) + result = [] + for i in range(0, count.value): + result.append(BinaryViewType(types[i])) + core.BNFreeBinaryViewTypeList(types) + return result + + def __iter__(self): + binaryninja._init_plugins() + count = ctypes.c_ulonglong() + types = core.BNGetBinaryViewTypes(count) + try: + for i in range(0, count.value): + yield BinaryViewType(types[i]) + finally: + core.BNFreeBinaryViewTypeList(types) + + def __getitem__(self, value): + binaryninja._init_plugins() + view_type = core.BNGetBinaryViewTypeByName(str(value)) + if view_type is None: + raise KeyError("'%s' is not a valid view type" % str(value)) + return BinaryViewType(view_type) + + +
[docs]class BinaryViewType(with_metaclass(_BinaryViewTypeMetaclass, object)): + +
[docs] def __init__(self, handle): + self.handle = core.handle_of_type(handle, core.BNBinaryViewType)
+ + def __eq__(self, value): + if not isinstance(value, BinaryViewType): + return False + return ctypes.addressof(self.handle.contents) == ctypes.addressof(value.handle.contents) + + def __ne__(self, value): + if not isinstance(value, BinaryViewType): + return True + return ctypes.addressof(self.handle.contents) != ctypes.addressof(value.handle.contents) + + @property + def list(self): + """Allow tab completion to discover metaclass list property""" + pass + + @property + def name(self): + """BinaryView name (read-only)""" + return core.BNGetBinaryViewTypeName(self.handle) + + @property + def long_name(self): + """BinaryView long name (read-only)""" + return core.BNGetBinaryViewTypeLongName(self.handle) + + def __repr__(self): + return "<view type: '%s'>" % self.name + +
[docs] def create(self, data): + view = core.BNCreateBinaryViewOfType(self.handle, data.handle) + if view is None: + return None + return BinaryView(file_metadata=data.file, handle=view)
+ +
[docs] def open(self, src, file_metadata=None): + data = BinaryView.open(src, file_metadata) + if data is None: + return None + return self.create(data)
+ +
[docs] @classmethod + def get_view_of_file(cls, filename, update_analysis=True, progress_func=None): + """ + ``get_view_of_file`` returns the first available, non-Raw `BinaryView` available. + + :param str filename: Path to filename or bndb + :param bool update_analysis: defaults to True. Pass False to not run update_analysis_and_wait. + :param callable() progress_func: optional function to be called with the current progress and total count. + :return: returns a BinaryView object for the given filename. + :rtype: BinaryView or None + """ + sqlite = b"SQLite format 3" + if filename.endswith(".bndb"): + f = open(filename, 'rb') + if f is None or f.read(len(sqlite)) != sqlite: + return None + f.close() + view = binaryninja.filemetadata.FileMetadata().open_existing_database(filename, progress_func) + else: + view = BinaryView.open(filename) + + if view is None: + return None + for available in view.available_view_types: + if available.name != "Raw": + if filename.endswith(".bndb"): + bv = view.get_view_of_type(available.name) + else: + bv = cls[available.name].open(filename) + + if bv is None: + raise Exception("Unknown Architecture/Architecture Not Found (check plugins folder)") + + if update_analysis: + bv.update_analysis_and_wait() + return bv + return None
+ +
[docs] def is_valid_for_data(self, data): + return core.BNIsBinaryViewTypeValidForData(self.handle, data.handle)
+ +
[docs] def register_arch(self, ident, endian, arch): + core.BNRegisterArchitectureForViewType(self.handle, ident, endian, arch.handle)
+ +
[docs] def get_arch(self, ident, endian): + arch = core.BNGetArchitectureForViewType(self.handle, ident, endian) + if arch is None: + return None + return binaryninja.architecture.CoreArchitecture._from_cache(arch)
+ +
[docs] def register_platform(self, ident, arch, plat): + core.BNRegisterPlatformForViewType(self.handle, ident, arch.handle, plat.handle)
+ +
[docs] def register_default_platform(self, arch, plat): + core.BNRegisterDefaultPlatformForViewType(self.handle, arch.handle, plat.handle)
+ +
[docs] def get_platform(self, ident, arch): + plat = core.BNGetPlatformForViewType(self.handle, ident, arch.handle) + if plat is None: + return None + return binaryninja.platform.Platform(handle = plat)
+ + +
[docs]class Segment(object): +
[docs] def __init__(self, handle): + self.handle = handle
+ + @property + def start(self): + return core.BNSegmentGetStart(self.handle) + + @property + def end(self): + return core.BNSegmentGetEnd(self.handle) + + @property + def executable(self): + return (core.BNSegmentGetFlags(self.handle) & SegmentFlag.SegmentExecutable) != 0 + + @property + def writable(self): + return (core.BNSegmentGetFlags(self.handle) & SegmentFlag.SegmentWritable) != 0 + + @property + def readable(self): + return (core.BNSegmentGetFlags(self.handle) & SegmentFlag.SegmentReadable) != 0 + + @property + def end(self): + return core.BNSegmentGetEnd(self.handle) + + @property + def data_length(self): + return core.BNSegmentGetDataLength(self.handle) + + @property + def data_offset(self): + return core.BNSegmentGetDataOffset(self.handle) + + @property + def data_end(self): + return core.BNSegmentGetDataEnd(self.handle) + + @property + def relocation_count(self): + return core.BNSegmentGetRelocationsCount(self.handle) + + @property + def relocation_ranges(self): + """List of relocation range tuples (read-only)""" + + count = ctypes.c_ulonglong() + ranges = core.BNSegmentGetRelocationRanges(self.handle, count) + result = [] + for i in range(0, count.value): + result.append((ranges[i].start, ranges[i].end)) + core.BNFreeRelocationRanges(ranges, count) + return result + +
[docs] def relocation_ranges_at(self, addr): + """List of relocation range tuples (read-only)""" + + count = ctypes.c_ulonglong() + ranges = core.BNSegmentGetRelocationRangesAtAddress(self.handle, addr, count) + result = [] + for i in range(0, count.value): + result.append((ranges[i].start, ranges[i].end)) + core.BNFreeRelocationRanges(ranges, count) + return result
+ + def __del__(self): + core.BNFreeSegment(self.handle) + + def __eq__(self, other): + if not isinstance(other, Segment): + return False + return ctypes.addressof(self.handle.contents) == ctypes.addressof(other.handle.contents) + + def __ne__(self, other): + if not isinstance(other, Segment): + return False + return ctypes.addressof(self.handle.contents) != ctypes.addressof(other.handle.contents) + + def __hash__(self): + return hash(self.handle.contents) + + def __len__(self): + return core.BNSegmentGetLength(self.handle) + + def __repr__(self): + return "<segment: %#x-%#x, %s%s%s>" % (self.start, self.end, + "r" if self.readable else "-", + "w" if self.writable else "-", + "x" if self.executable else "-")
+ + +
[docs]class Section(object): +
[docs] def __init__(self, handle): + self.handle = core.handle_of_type(handle, core.BNSection)
+ + @property + def name(self): + return core.BNSectionGetName(self.handle) + + @property + def type(self): + return core.BNSectionGetType(self.handle) + + @property + def start(self): + return core.BNSectionGetStart(self.handle) + + @property + def linked_section(self): + return core.BNSectionGetLinkedSection(self.handle) + + @property + def info_section(self): + return core.BNSectionGetInfoSection(self.handle) + + @property + def info_data(self): + return core.BNSectionGetInfoData(self.handle) + + @property + def align(self): + return core.BNSectionGetAlign(self.handle) + + @property + def entry_size(self): + return core.BNSectionGetEntrySize(self.handle) + + @property + def semantics(self): + return SectionSemantics(core.BNSectionGetSemantics(self.handle)) + + @property + def auto_defined(self): + return core.BNSectionIsAutoDefined(self.handle) + + @property + def end(self): + return self.start + len(self) + + def __del__(self): + core.BNFreeSection(self.handle) + + def __eq__(self, other): + if not isinstance(other, Section): + return False + return ctypes.addressof(self.handle.contents) == ctypes.addressof(other.handle.contents) + + def __ne__(self, other): + if not isinstance(other, Section): + return False + return ctypes.addressof(self.handle.contents) != ctypes.addressof(other.handle.contents) + + def __hash__(self): + return hash(self.handle.contents) + + def __len__(self): + return core.BNSectionGetLength(self.handle) + + def __repr__(self): + return "<section %s: %#x-%#x>" % (self.name, self.start, self.end)
+ + +
[docs]class AddressRange(object): +
[docs] def __init__(self, start, end): + self.start = start + self.end = end
+ + @property + def length(self): + return self.end - self.start + + def __len__(self): + return self.end - self.start + + def __repr__(self): + return "<%#x-%#x>" % (self.start, self.end)
+ + +class _BinaryViewAssociatedDataStore(associateddatastore._AssociatedDataStore): + _defaults = {} + + +
[docs]class BinaryView(object): + """ + ``class BinaryView`` implements a view on binary data, and presents a queryable interface of a binary file. One key + job of BinaryView is file format parsing which allows Binary Ninja to read, write, insert, remove portions + of the file given a virtual address. For the purposes of this documentation we define a virtual address as the + memory address that the various pieces of the physical file will be loaded at. + + A binary file does not have to have just one BinaryView, thus much of the interface to manipulate disassembly exists + within or is accessed through a BinaryView. All files are guaranteed to have at least the ``Raw`` BinaryView. The + ``Raw`` BinaryView is simply a hex editor, but is helpful for manipulating binary files via their absolute addresses. + + BinaryViews are plugins and thus registered with Binary Ninja at startup, and thus should **never** be instantiated + directly as this is already done. The list of available BinaryViews can be seen in the BinaryViewType class which + provides an iterator and map of the various installed BinaryViews:: + + >>> list(BinaryViewType) + [<view type: 'Raw'>, <view type: 'ELF'>, <view type: 'Mach-O'>, <view type: 'PE'>] + >>> BinaryViewType['ELF'] + <view type: 'ELF'> + + To open a file with a given BinaryView the following code can be used:: + + >>> bv = BinaryViewType['Mach-O'].open("/bin/ls") + >>> bv + <BinaryView: '/bin/ls', start 0x100000000, len 0xa000> + + `By convention in the rest of this document we will use bv to mean an open BinaryView of an executable file.` + When a BinaryView is open on an executable view, analysis does not automatically run, this can be done by running + the ``update_analysis_and_wait()`` method which disassembles the executable and returns when all disassembly is + finished:: + + >>> bv.update_analysis_and_wait() + >>> + + Since BinaryNinja's analysis is multi-threaded (depending on version) this can also be done in the background by + using the ``update_analysis()`` method instead. + + By standard python convention methods which start with '_' should be considered private and should not be called + externally. Additionally, methods which begin with ``perform_`` should not be called either and are + used explicitly for subclassing the BinaryView. + + .. note:: An important note on the ``*_user_*()`` methods. Binary Ninja makes a distinction between edits \ + performed by the user and actions performed by auto analysis. Auto analysis actions that can quickly be recalculated \ + are not saved to the database. Auto analysis actions that take a long time and all user edits are stored in the \ + database (e.g. ``remove_user_function()`` rather than ``remove_function()``). Thus use ``_user_`` methods if saving \ + to the database is desired. + """ + name = None + long_name = None + _registered = False + _registered_cb = None + registered_view_type = None + next_address = 0 + _associated_data = {} + _registered_instances = [] + +
[docs] def __init__(self, file_metadata=None, parent_view=None, handle=None): + self._must_free = True + if handle is not None: + self.handle = core.handle_of_type(handle, core.BNBinaryView) + if file_metadata is None: + self.file = binaryninja.filemetadata.FileMetadata(handle=core.BNGetFileForView(handle)) + else: + self.file = file_metadata + elif self.__class__ is BinaryView: + binaryninja._init_plugins() + if file_metadata is None: + file_metadata = binaryninja.filemetadata.FileMetadata() + self.handle = core.BNCreateBinaryDataView(file_metadata.handle) + self.file = binaryninja.filemetadata.FileMetadata(handle=core.BNNewFileReference(file_metadata.handle)) + else: + binaryninja._init_plugins() + if not self.__class__._registered: + raise TypeError("view type not registered") + self._cb = core.BNCustomBinaryView() + self._cb.context = 0 + self._cb.init = self._cb.init.__class__(self._init) + self._cb.freeObject = self._cb.freeObject.__class__(self._free_object) + self._cb.read = self._cb.read.__class__(self._read) + self._cb.write = self._cb.write.__class__(self._write) + self._cb.insert = self._cb.insert.__class__(self._insert) + self._cb.remove = self._cb.remove.__class__(self._remove) + self._cb.getModification = self._cb.getModification.__class__(self._get_modification) + self._cb.isValidOffset = self._cb.isValidOffset.__class__(self._is_valid_offset) + self._cb.isOffsetReadable = self._cb.isOffsetReadable.__class__(self._is_offset_readable) + self._cb.isOffsetWritable = self._cb.isOffsetWritable.__class__(self._is_offset_writable) + self._cb.isOffsetExecutable = self._cb.isOffsetExecutable.__class__(self._is_offset_executable) + self._cb.getNextValidOffset = self._cb.getNextValidOffset.__class__(self._get_next_valid_offset) + self._cb.getStart = self._cb.getStart.__class__(self._get_start) + self._cb.getLength = self._cb.getLength.__class__(self._get_length) + self._cb.getEntryPoint = self._cb.getEntryPoint.__class__(self._get_entry_point) + self._cb.isExecutable = self._cb.isExecutable.__class__(self._is_executable) + self._cb.getDefaultEndianness = self._cb.getDefaultEndianness.__class__(self._get_default_endianness) + self._cb.isRelocatable = self._cb.isRelocatable.__class__(self._is_relocatable) + self._cb.getAddressSize = self._cb.getAddressSize.__class__(self._get_address_size) + self._cb.save = self._cb.save.__class__(self._save) + self.file = file_metadata + if parent_view is not None: + parent_view = parent_view.handle + self.handle = core.BNCreateCustomBinaryView(self.__class__.name, file_metadata.handle, parent_view, self._cb) + self.__class__._registered_instances.append(self) + self._must_free = False + self.notifications = {} + self.next_address = None # Do NOT try to access view before init() is called, use placeholder
+ + def __eq__(self, value): + if not isinstance(value, BinaryView): + return False + return ctypes.addressof(self.handle.contents) == ctypes.addressof(value.handle.contents) + + def __ne__(self, value): + if not isinstance(value, BinaryView): + return True + return ctypes.addressof(self.handle.contents) != ctypes.addressof(value.handle.contents) + +
[docs] @classmethod + def register(cls): + binaryninja._init_plugins() + if cls.name is None: + raise ValueError("view 'name' not defined") + if cls.long_name is None: + cls.long_name = cls.name + cls._registered_cb = core.BNCustomBinaryViewType() + cls._registered_cb.context = 0 + cls._registered_cb.create = cls._registered_cb.create.__class__(cls._create) + cls._registered_cb.isValidForData = cls._registered_cb.isValidForData.__class__(cls._is_valid_for_data) + cls.registered_view_type = BinaryViewType(core.BNRegisterBinaryViewType(cls.name, cls.long_name, cls._registered_cb)) + cls._registered = True
+ + @classmethod + def _create(cls, ctxt, data): + try: + file_metadata = binaryninja.filemetadata.FileMetadata(handle=core.BNGetFileForView(data)) + view = cls(BinaryView(file_metadata=file_metadata, handle=core.BNNewViewReference(data))) + if view is None: + return None + return ctypes.cast(core.BNNewViewReference(view.handle), ctypes.c_void_p).value + except: + log.log_error(traceback.format_exc()) + return None + + @classmethod + def _is_valid_for_data(cls, ctxt, data): + try: + return cls.is_valid_for_data(BinaryView(handle=core.BNNewViewReference(data))) + except: + log.log_error(traceback.format_exc()) + return False + +
[docs] @classmethod + def open(cls, src, file_metadata=None): + binaryninja._init_plugins() + if isinstance(src, fileaccessor.FileAccessor): + if file_metadata is None: + file_metadata = binaryninja.filemetadata.FileMetadata() + view = core.BNCreateBinaryDataViewFromFile(file_metadata.handle, src._cb) + else: + if file_metadata is None: + file_metadata = binaryninja.filemetadata.FileMetadata(str(src)) + view = core.BNCreateBinaryDataViewFromFilename(file_metadata.handle, str(src)) + if view is None: + return None + result = BinaryView(file_metadata=file_metadata, handle=view) + return result
+ +
[docs] @classmethod + def new(cls, data=None, file_metadata=None): + binaryninja._init_plugins() + if file_metadata is None: + file_metadata = binaryninja.filemetadata.FileMetadata() + if data is None: + view = core.BNCreateBinaryDataView(file_metadata.handle) + else: + buf = databuffer.DataBuffer(data) + view = core.BNCreateBinaryDataViewFromBuffer(file_metadata.handle, buf.handle) + if view is None: + return None + result = BinaryView(file_metadata=file_metadata, handle=view) + return result
+ + @classmethod + def _unregister(cls, view): + handle = ctypes.cast(view, ctypes.c_void_p) + if handle.value in cls._associated_data: + del cls._associated_data[handle.value] + +
[docs] @classmethod + def set_default_session_data(cls, name, value): + """ + ``set_default_session_data`` saves a variable to the BinaryView. + :param name: name of the variable to be saved + :param value: value of the variable to be saved + + :Example: + >>> BinaryView.set_default_session_data("variable_name", "value") + >>> bv.session_data.variable_name + 'value' + """ + _BinaryViewAssociatedDataStore.set_default(name, value)
+ + @property + def basic_blocks(self): + """A generator of all BasicBlock objects in the BinaryView""" + for func in self: + for block in func.basic_blocks: + yield block + + @property + def llil_basic_blocks(self): + """A generator of all LowLevelILBasicBlock objects in the BinaryView""" + for func in self: + for il_block in func.low_level_il.basic_blocks: + yield il_block + + @property + def mlil_basic_blocks(self): + """A generator of all MediumLevelILBasicBlock objects in the BinaryView""" + for func in self: + for il_block in func.mlil.basic_blocks: + yield il_block + + @property + def instructions(self): + """A generator of instruction tokens and their start addresses""" + for block in self.basic_blocks: + start = block.start + for i in block: + yield (i[0], start) + start += i[1] + + @property + def llil_instructions(self): + """A generator of llil instructions""" + for block in self.llil_basic_blocks: + for i in block: + yield i + + @property + def mlil_instructions(self): + """A generator of mlil instructions""" + for block in self.mlil_basic_blocks: + for i in block: + yield i + + def __del__(self): + for i in self.notifications.values(): + i._unregister() + if self._must_free: + core.BNFreeBinaryView(self.handle) + + def __iter__(self): + count = ctypes.c_ulonglong(0) + funcs = core.BNGetAnalysisFunctionList(self.handle, count) + try: + for i in range(0, count.value): + yield binaryninja.function.Function(self, core.BNNewFunctionReference(funcs[i])) + finally: + core.BNFreeFunctionList(funcs, count.value) + + @property + def parent_view(self): + """View that contains the raw data used by this view (read-only)""" + result = core.BNGetParentView(self.handle) + if result is None: + return None + return BinaryView(handle=result) + + @property + def modified(self): + """boolean modification state of the BinaryView (read/write)""" + return self.file.modified + + @modified.setter + def modified(self, value): + self.file.modified = value + + @property + def analysis_changed(self): + """boolean analysis state changed of the currently running analysis (read-only)""" + return self.file.analysis_changed + + @property + def has_database(self): + """boolean has a database been written to disk (read-only)""" + return self.file.has_database + + @property + def view(self): + return self.file.view + + @view.setter + def view(self, value): + self.file.view = value + + @property + def offset(self): + return self.file.offset + + @offset.setter + def offset(self, value): + self.file.offset = value + + @property + def start(self): + """Start offset of the binary (read-only)""" + return core.BNGetStartOffset(self.handle) + + @property + def end(self): + """End offset of the binary (read-only)""" + return core.BNGetEndOffset(self.handle) + + @property + def entry_point(self): + """Entry point of the binary (read-only)""" + return core.BNGetEntryPoint(self.handle) + + @property + def arch(self): + """The architecture associated with the current BinaryView (read/write)""" + arch = core.BNGetDefaultArchitecture(self.handle) + if arch is None: + return None + return binaryninja.architecture.CoreArchitecture._from_cache(handle=arch) + + @arch.setter + def arch(self, value): + if value is None: + core.BNSetDefaultArchitecture(self.handle, None) + else: + core.BNSetDefaultArchitecture(self.handle, value.handle) + + @property + def platform(self): + """The platform associated with the current BinaryView (read/write)""" + plat = core.BNGetDefaultPlatform(self.handle) + if plat is None: + return None + return binaryninja.platform.Platform(self.arch, handle=plat) + + @platform.setter + def platform(self, value): + if value is None: + core.BNSetDefaultPlatform(self.handle, None) + else: + core.BNSetDefaultPlatform(self.handle, value.handle) + + @property + def endianness(self): + """Endianness of the binary (read-only)""" + return Endianness(core.BNGetDefaultEndianness(self.handle)) + + @property + def relocatable(self): + """Boolean - is the binary relocatable (read-only)""" + return core.BNIsRelocatable(self.handle) + + @property + def address_size(self): + """Address size of the binary (read-only)""" + return core.BNGetViewAddressSize(self.handle) + + @property + def executable(self): + """Whether the binary is an executable (read-only)""" + return core.BNIsExecutableView(self.handle) + + @property + def functions(self): + """List of functions (read-only)""" + count = ctypes.c_ulonglong(0) + funcs = core.BNGetAnalysisFunctionList(self.handle, count) + result = [] + for i in range(0, count.value): + result.append(binaryninja.function.Function(self, core.BNNewFunctionReference(funcs[i]))) + core.BNFreeFunctionList(funcs, count.value) + return result + + @property + def has_functions(self): + """Boolean whether the binary has functions (read-only)""" + return core.BNHasFunctions(self.handle) + + @property + def entry_function(self): + """Entry function (read-only)""" + func = core.BNGetAnalysisEntryPoint(self.handle) + if func is None: + return None + return binaryninja.function.Function(self, func) + + @property + def symbols(self): + """Dict of symbols (read-only)""" + count = ctypes.c_ulonglong(0) + syms = core.BNGetSymbols(self.handle, count, None) + result = {} + for i in range(0, count.value): + sym = types.Symbol(None, None, None, handle=core.BNNewSymbolReference(syms[i])) + if sym.raw_name in result: + result[sym.raw_name] = [result[sym.raw_name], sym] + else: + result[sym.raw_name] = sym + core.BNFreeSymbolList(syms, count.value) + return result + +
[docs] @classmethod + def internal_namespace(self): + """Internal namespace for the current BinaryView""" + ns = core.BNGetInternalNameSpace() + result = types.NameSpace._from_core_struct(ns) + core.BNFreeNameSpace(ns) + return result
+ +
[docs] @classmethod + def external_namespace(self): + """External namespace for the current BinaryView""" + ns = core.BNGetExternalNameSpace() + result = types.NameSpace._from_core_struct(ns) + core.BNFreeNameSpace(ns) + return result
+ + @property + def namespaces(self): + """Returns a list of namespaces for the current BinaryView""" + count = ctypes.c_ulonglong(0) + nameSpaceList = core.BNGetNameSpaces(self.handle, count) + result = [] + for i in range(count.value): + result.append(types.NameSpace._from_core_struct(nameSpaceList[i])) + core.BNFreeNameSpaceList(nameSpaceList, count.value); + return result + + @property + def view_type(self): + """View type (read-only)""" + return core.BNGetViewType(self.handle) + + @property + def available_view_types(self): + """Available view types (read-only)""" + count = ctypes.c_ulonglong(0) + types = core.BNGetBinaryViewTypesForData(self.handle, count) + result = [] + for i in range(0, count.value): + result.append(BinaryViewType(types[i])) + core.BNFreeBinaryViewTypeList(types) + return result + + @property + def strings(self): + """List of strings (read-only)""" + return self.get_strings() + + @property + def saved(self): + """boolean state of whether or not the file has been saved (read/write)""" + return self.file.saved + + @saved.setter + def saved(self, value): + self.file.saved = value + + @property + def analysis_info(self): + """Provides instantaneous analysis state information and a list of current functions under analysis (read-only). + All times are given in units of milliseconds (ms). Per function `analysis_time` is the aggregation of time spent + performing incremental updates and is reset on a full function update. Per function `update_count` tracks the + current number of incremental updates and is reset on a full function update. Per function `submit_count` tracks the + current number of full updates that have completed. Note that the `submit_count` is currently not reset across analysis updates.""" + info_ref = core.BNGetAnalysisInfo(self.handle) + info = info_ref[0] + active_info_list = [] + for i in range(0, info.count): + func = binaryninja.function.Function(self, core.BNNewFunctionReference(info.activeInfo[i].func)) + active_info = ActiveAnalysisInfo(func, info.activeInfo[i].analysisTime, info.activeInfo[i].updateCount, info.activeInfo[i].submitCount) + active_info_list.append(active_info) + result = AnalysisInfo(info.state, info.analysisTime, active_info_list) + core.BNFreeAnalysisInfo(info_ref) + return result + + @property + def analysis_progress(self): + """Status of current analysis (read-only)""" + result = core.BNGetAnalysisProgress(self.handle) + return AnalysisProgress(result.state, result.count, result.total) + + @property + def linear_disassembly(self): + """Iterator for all lines in the linear disassembly of the view""" + return self.get_linear_disassembly(None) + + @property + def data_vars(self): + """List of data variables (read-only)""" + count = ctypes.c_ulonglong(0) + var_list = core.BNGetDataVariables(self.handle, count) + result = {} + for i in range(0, count.value): + addr = var_list[i].address + var_type = types.Type(core.BNNewTypeReference(var_list[i].type), platform = self.platform, confidence = var_list[i].typeConfidence) + auto_discovered = var_list[i].autoDiscovered + result[addr] = DataVariable(addr, var_type, auto_discovered, self) + core.BNFreeDataVariables(var_list, count.value) + return result + + @property + def types(self): + """List of defined types (read-only)""" + count = ctypes.c_ulonglong(0) + type_list = core.BNGetAnalysisTypeList(self.handle, count) + result = {} + for i in range(0, count.value): + name = types.QualifiedName._from_core_struct(type_list[i].name) + result[name] = types.Type(core.BNNewTypeReference(type_list[i].type), platform = self.platform) + core.BNFreeTypeList(type_list, count.value) + return result + + @property + def segments(self): + """List of segments (read-only)""" + count = ctypes.c_ulonglong(0) + segment_list = core.BNGetSegments(self.handle, count) + result = [] + for i in range(0, count.value): + result.append(Segment(core.BNNewSegmentReference(segment_list[i]))) + core.BNFreeSegmentList(segment_list, count.value) + return result + + @property + def sections(self): + """List of sections (read-only)""" + count = ctypes.c_ulonglong(0) + section_list = core.BNGetSections(self.handle, count) + result = {} + for i in range(0, count.value): + result[core.BNSectionGetName(section_list[i])] = Section(core.BNNewSectionReference(section_list[i])) + core.BNFreeSectionList(section_list, count.value) + return result + + @property + def allocated_ranges(self): + """List of valid address ranges for this view (read-only)""" + count = ctypes.c_ulonglong(0) + range_list = core.BNGetAllocatedRanges(self.handle, count) + result = [] + for i in range(0, count.value): + result.append(AddressRange(range_list[i].start, range_list[i].end)) + core.BNFreeAddressRanges(range_list) + return result + + @property + def session_data(self): + """Dictionary object where plugins can store arbitrary data associated with the view""" + handle = ctypes.cast(self.handle, ctypes.c_void_p) + if handle.value not in BinaryView._associated_data: + obj = _BinaryViewAssociatedDataStore() + BinaryView._associated_data[handle.value] = obj + return obj + else: + return BinaryView._associated_data[handle.value] + + @property + def global_pointer_value(self): + """Discovered value of the global pointer register, if the binary uses one (read-only)""" + result = core.BNGetGlobalPointerValue(self.handle) + return binaryninja.function.RegisterValue(self.arch, result.value, confidence = result.confidence) + + @property + def parameters_for_analysis(self): + return core.BNGetParametersForAnalysis(self.handle) + + @parameters_for_analysis.setter + def parameters_for_analysis(self, params): + core.BNSetParametersForAnalysis(self.handle, params) + + @property + def max_function_size_for_analysis(self): + """Maximum size of function (sum of basic block sizes in bytes) for auto analysis""" + return core.BNGetMaxFunctionSizeForAnalysis(self.handle) + + @max_function_size_for_analysis.setter + def max_function_size_for_analysis(self, size): + core.BNSetMaxFunctionSizeForAnalysis(self.handle, size) + + @property + def relocation_ranges(self): + """List of relocation range tuples (read-only)""" + + count = ctypes.c_ulonglong() + ranges = core.BNGetRelocationRanges(self.handle, count) + result = [] + for i in range(0, count.value): + result.append((ranges[i].start, ranges[i].end)) + core.BNFreeRelocationRanges(ranges, count) + return result + +
[docs] def relocation_ranges_at(self, addr): + """List of relocation range tuples for a given address""" + + count = ctypes.c_ulonglong() + ranges = core.BNGetRelocationRangesAtAddress(self.handle, addr, count) + result = [] + for i in range(0, count.value): + result.append((ranges[i].start, ranges[i].end)) + core.BNFreeRelocationRanges(ranges, count) + return result
+ + @property + def new_auto_function_analysis_suppressed(self): + """Whether or not automatically discovered functions will be analyzed""" + return core.BNGetNewAutoFunctionAnalysisSuppressed(self.handle) + + @new_auto_function_analysis_suppressed.setter + def new_auto_function_analysis_suppressed(self, suppress): + core.BNSetNewAutoFunctionAnalysisSuppressed(self.handle, suppress) + + def __len__(self): + return int(core.BNGetViewLength(self.handle)) + + def __getitem__(self, i): + if isinstance(i, tuple): + result = "" + for s in i: + result += self.__getitem__(s) + return result + elif isinstance(i, slice): + if i.step is not None: + raise IndexError("step not implemented") + i = i.indices(self.end) + start = i[0] + stop = i[1] + if stop <= start: + return "" + return str(self.read(start, stop - start)) + elif i < 0: + if i >= -len(self): + value = str(self.read(int(len(self) + i), 1)) + if len(value) == 0: + return IndexError("index not readable") + return value + raise IndexError("index out of range") + elif (i >= self.start) and (i < self.end): + value = str(self.read(int(i), 1)) + if len(value) == 0: + return IndexError("index not readable") + return value + else: + raise IndexError("index out of range") + + def __setitem__(self, i, value): + if isinstance(i, slice): + if i.step is not None: + raise IndexError("step not supported on assignment") + i = i.indices(self.end) + start = i[0] + stop = i[1] + if stop < start: + stop = start + if len(value) != (stop - start): + self.remove(start, stop - start) + self.insert(start, value) + else: + self.write(start, value) + elif i < 0: + if i >= -len(self): + if len(value) != 1: + raise ValueError("expected single byte for assignment") + if self.write(int(len(self) + i), value) != 1: + raise IndexError("index not writable") + else: + raise IndexError("index out of range") + elif (i >= self.start) and (i < self.end): + if len(value) != 1: + raise ValueError("expected single byte for assignment") + if self.write(int(i), value) != 1: + raise IndexError("index not writable") + else: + raise IndexError("index out of range") + + def __repr__(self): + start = self.start + length = len(self) + if start != 0: + size = "start %#x, len %#x" % (start, length) + else: + size = "len %#x" % length + filename = self.file.filename + if len(filename) > 0: + return "<BinaryView: '%s', %s>" % (filename, size) + return "<BinaryView: %s>" % (size) + + def _init(self, ctxt): + try: + return self.init() + except: + log.log_error(traceback.format_exc()) + return False + + def _free_object(self, ctxt): + try: + self.__class__._registered_instances.remove(self) + except: + log.log_error(traceback.format_exc()) + + def _read(self, ctxt, dest, offset, length): + try: + data = self.perform_read(offset, length) + if data is None: + return 0 + if len(data) > length: + data = data[0:length] + ctypes.memmove(dest, str(data), len(data)) + return len(data) + except: + log.log_error(traceback.format_exc()) + return 0 + + def _write(self, ctxt, offset, src, length): + try: + data = ctypes.create_string_buffer(length) + ctypes.memmove(data, src, length) + return self.perform_write(offset, data.raw) + except: + log.log_error(traceback.format_exc()) + return 0 + + def _insert(self, ctxt, offset, src, length): + try: + data = ctypes.create_string_buffer(length) + ctypes.memmove(data, src, length) + return self.perform_insert(offset, data.raw) + except: + log.log_error(traceback.format_exc()) + return 0 + + def _remove(self, ctxt, offset, length): + try: + return self.perform_remove(offset, length) + except: + log.log_error(traceback.format_exc()) + return 0 + + def _get_modification(self, ctxt, offset): + try: + return self.perform_get_modification(offset) + except: + log.log_error(traceback.format_exc()) + return ModificationStatus.Original + + def _is_valid_offset(self, ctxt, offset): + try: + return self.perform_is_valid_offset(offset) + except: + log.log_error(traceback.format_exc()) + return False + + def _is_offset_readable(self, ctxt, offset): + try: + return self.perform_is_offset_readable(offset) + except: + log.log_error(traceback.format_exc()) + return False + + def _is_offset_writable(self, ctxt, offset): + try: + return self.perform_is_offset_writable(offset) + except: + log.log_error(traceback.format_exc()) + return False + + def _is_offset_executable(self, ctxt, offset): + try: + return self.perform_is_offset_executable(offset) + except: + log.log_error(traceback.format_exc()) + return False + + def _get_next_valid_offset(self, ctxt, offset): + try: + return self.perform_get_next_valid_offset(offset) + except: + log.log_error(traceback.format_exc()) + return offset + + def _get_start(self, ctxt): + try: + return self.perform_get_start() + except: + log.log_error(traceback.format_exc()) + return 0 + + def _get_length(self, ctxt): + try: + return self.perform_get_length() + except: + log.log_error(traceback.format_exc()) + return 0 + + def _get_entry_point(self, ctxt): + try: + return self.perform_get_entry_point() + except: + log.log_error(traceback.format_exc()) + return 0 + + def _is_executable(self, ctxt): + try: + return self.perform_is_executable() + except: + log.log_error(traceback.format_exc()) + return False + + def _get_default_endianness(self, ctxt): + try: + return self.perform_get_default_endianness() + except: + log.log_error(traceback.format_exc()) + return Endianness.LittleEndian + + def _is_relocatable(self, ctxt): + try: + return self.perform_is_relocatable() + except: + log.log_error(traceback.format_exc()) + return False + + def _get_address_size(self, ctxt): + try: + return self.perform_get_address_size() + except: + log.log_error(traceback.format_exc()) + return 8 + + def _save(self, ctxt, file_accessor): + try: + return self.perform_save(fileaccessor.CoreFileAccessor(file_accessor)) + except: + log.log_error(traceback.format_exc()) + return False + +
[docs] def init(self): + return True
+ +
[docs] def get_disassembly(self, addr, arch=None): + """ + ``get_disassembly`` simple helper function for printing disassembly of a given address + + :param int addr: virtual address of instruction + :param Architecture arch: optional Architecture, ``self.arch`` is used if this parameter is None + :return: a str representation of the instruction at virtual address ``addr`` or None + :rtype: str or None + :Example: + + >>> bv.get_disassembly(bv.entry_point) + 'push ebp' + >>> + """ + if arch is None: + arch = self.arch + txt, size = arch.get_instruction_text(self.read(addr, arch.max_instr_length), addr) + self.next_address = addr + size + if txt is None: + return None + return ''.join(str(a) for a in txt).strip()
+ +
[docs] def get_next_disassembly(self, arch=None): + """ + ``get_next_disassembly`` simple helper function for printing disassembly of the next instruction. + The internal state of the instruction to be printed is stored in the ``next_address`` attribute + + :param Architecture arch: optional Architecture, ``self.arch`` is used if this parameter is None + :return: a str representation of the instruction at virtual address ``self.next_address`` + :rtype: str or None + :Example: + + >>> bv.get_next_disassembly() + 'push ebp' + >>> bv.get_next_disassembly() + 'mov ebp, esp' + >>> #Now reset the starting point back to the entry point + >>> bv.next_address = bv.entry_point + >>> bv.get_next_disassembly() + 'push ebp' + >>> + """ + if arch is None: + arch = self.arch + if self.next_address is None: + self.next_address = self.entry_point + txt, size = arch.get_instruction_text(self.read(self.next_address, arch.max_instr_length), self.next_address) + self.next_address += size + if txt is None: + return None + return ''.join(str(a) for a in txt).strip()
+ +
[docs] def perform_save(self, accessor): + if self.parent_view is not None: + return self.parent_view.save(accessor) + return False
+ +
[docs] @abc.abstractmethod + def perform_get_address_size(self): + raise NotImplementedError
+ +
[docs] def perform_get_length(self): + """ + ``perform_get_length`` implements a query for the size of the virtual address range used by + the BinaryView. + + .. note:: This method **may** be overridden by custom BinaryViews. Use ``add_auto_segment`` to provide + data without overriding this method. + .. warning:: This method **must not** be called directly. + + :return: returns the size of the virtual address range used by the BinaryView. + :rtype: int + """ + return 0
+ +
[docs] def perform_read(self, addr, length): + """ + ``perform_read`` implements a mapping between a virtual address and an absolute file offset, reading + ``length`` bytes from the rebased address ``addr``. + + .. note:: This method **may** be overridden by custom BinaryViews. Use ``add_auto_segment`` to provide + data without overriding this method. + .. warning:: This method **must not** be called directly. + + :param int addr: a virtual address to attempt to read from + :param int length: the number of bytes to be read + :return: length bytes read from addr, should return empty string on error + :rtype: str + """ + return ""
+ +
[docs] def perform_write(self, addr, data): + """ + ``perform_write`` implements a mapping between a virtual address and an absolute file offset, writing + the bytes ``data`` to rebased address ``addr``. + + .. note:: This method **may** be overridden by custom BinaryViews. Use ``add_auto_segment`` to provide + data without overriding this method. + .. warning:: This method **must not** be called directly. + + :param int addr: a virtual address + :param str data: the data to be written + :return: length of data written, should return 0 on error + :rtype: int + """ + return 0
+ +
[docs] def perform_insert(self, addr, data): + """ + ``perform_insert`` implements a mapping between a virtual address and an absolute file offset, inserting + the bytes ``data`` to rebased address ``addr``. + + .. note:: This method **may** be overridden by custom BinaryViews. If not overridden, inserting is disallowed + .. warning:: This method **must not** be called directly. + + :param int addr: a virtual address + :param str data: the data to be inserted + :return: length of data inserted, should return 0 on error + :rtype: int + """ + return 0
+ +
[docs] def perform_remove(self, addr, length): + """ + ``perform_remove`` implements a mapping between a virtual address and an absolute file offset, removing + ``length`` bytes from the rebased address ``addr``. + + .. note:: This method **may** be overridden by custom BinaryViews. If not overridden, removing data is disallowed + .. warning:: This method **must not** be called directly. + + :param int addr: a virtual address + :param str data: the data to be removed + :return: length of data removed, should return 0 on error + :rtype: int + """ + return 0
+ +
[docs] def perform_get_modification(self, addr): + """ + ``perform_get_modification`` implements query to the whether the virtual address ``addr`` is modified. + + .. note:: This method **may** be overridden by custom BinaryViews. Use ``add_auto_segment`` to provide + data without overriding this method. + .. warning:: This method **must not** be called directly. + + :param int addr: a virtual address to be checked + :return: One of the following: Original = 0, Changed = 1, Inserted = 2 + :rtype: ModificationStatus + """ + return ModificationStatus.Original
+ +
[docs] def perform_is_valid_offset(self, addr): + """ + ``perform_is_valid_offset`` implements a check if an virtual address ``addr`` is valid. + + .. note:: This method **may** be overridden by custom BinaryViews. Use ``add_auto_segment`` to provide + data without overriding this method. + .. warning:: This method **must not** be called directly. + + :param int addr: a virtual address to be checked + :return: true if the virtual address is valid, false if the virtual address is invalid or error + :rtype: bool + """ + data = self.read(addr, 1) + return (data is not None) and (len(data) == 1)
+ +
[docs] def perform_is_offset_readable(self, offset): + """ + ``perform_is_offset_readable`` implements a check if an virtual address is readable. + + .. note:: This method **may** be overridden by custom BinaryViews. Use ``add_auto_segment`` to provide + data without overriding this method. + .. warning:: This method **must not** be called directly. + + :param int offset: a virtual address to be checked + :return: true if the virtual address is readable, false if the virtual address is not readable or error + :rtype: bool + """ + return self.is_valid_offset(offset)
+ +
[docs] def perform_is_offset_writable(self, addr): + """ + ``perform_is_offset_writable`` implements a check if a virtual address ``addr`` is writable. + + .. note:: This method **may** be overridden by custom BinaryViews. Use ``add_auto_segment`` to provide + data without overriding this method. + .. warning:: This method **must not** be called directly. + + :param int addr: a virtual address to be checked + :return: true if the virtual address is writable, false if the virtual address is not writable or error + :rtype: bool + """ + return self.is_valid_offset(addr)
+ +
[docs] def perform_is_offset_executable(self, addr): + """ + ``perform_is_offset_executable`` implements a check if a virtual address ``addr`` is executable. + + .. note:: This method **may** be overridden by custom BinaryViews. Use ``add_auto_segment`` to provide + data without overriding this method. + .. warning:: This method **must not** be called directly. + + :param int addr: a virtual address to be checked + :return: true if the virtual address is executable, false if the virtual address is not executable or error + :rtype: int + """ + return self.is_valid_offset(addr)
+ +
[docs] def perform_get_next_valid_offset(self, addr): + """ + ``perform_get_next_valid_offset`` implements a query for the next valid readable, writable, or executable virtual + memory address. + + .. note:: This method **may** be overridden by custom BinaryViews. Use ``add_auto_segment`` to provide + data without overriding this method. + .. warning:: This method **must not** be called directly. + + :param int addr: a virtual address to start checking from. + :return: the next readable, writable, or executable virtual memory address + :rtype: int + """ + if addr < self.perform_get_start(): + return self.perform_get_start() + return addr
+ +
[docs] def perform_get_start(self): + """ + ``perform_get_start`` implements a query for the first readable, writable, or executable virtual address in + the BinaryView. + + .. note:: This method **may** be overridden by custom BinaryViews. Use ``add_auto_segment`` to provide + data without overriding this method. + .. warning:: This method **must not** be called directly. + + :return: returns the first virtual address in the BinaryView. + :rtype: int + """ + return 0
+ +
[docs] def perform_get_entry_point(self): + """ + ``perform_get_entry_point`` implements a query for the initial entry point for code execution. + + .. note:: This method **should** be implemented for custom BinaryViews that are executable. + .. warning:: This method **must not** be called directly. + + :return: the virtual address of the entry point + :rtype: int + """ + return 0
+ +
[docs] def perform_is_executable(self): + """ + ``perform_is_executable`` implements a check which returns true if the BinaryView is executable. + + .. note:: This method **must** be implemented for custom BinaryViews that are executable. + .. warning:: This method **must not** be called directly. + + :return: true if the current BinaryView is executable, false if it is not executable or on error + :rtype: bool + """ + return False
+ +
[docs] def perform_get_default_endianness(self): + """ + ``perform_get_default_endianness`` implements a check which returns true if the BinaryView is executable. + + .. note:: This method **may** be implemented for custom BinaryViews that are not LittleEndian. + .. warning:: This method **must not** be called directly. + + :return: either ``Endianness.LittleEndian`` or ``Endianness.BigEndian`` + :rtype: Endianness + """ + return Endianness.LittleEndian
+ +
[docs] def perform_is_relocatable(self): + """ + ``perform_is_relocatable`` implements a check which returns true if the BinaryView is relocatable. Defaults to + True. + + .. note:: This method **may** be implemented for custom BinaryViews that are relocatable. + .. warning:: This method **must not** be called directly. + + :return: True if the BinaryView is relocatable, False otherwise + :rtype: boolean + """ + return True
+ +
[docs] def create_database(self, filename, progress_func=None): + """ + ``create_database`` writes the current database (.bndb) file out to the specified file. + + :param str filename: path and filename to write the bndb to, this string `should` have ".bndb" appended to it. + :param callable() progress_func: optional function to be called with the current progress and total count. + :return: true on success, false on failure + :rtype: bool + """ + return self.file.create_database(filename, progress_func)
+ +
[docs] def save_auto_snapshot(self, progress_func=None): + """ + ``save_auto_snapshot`` saves the current database to the already created file. + + .. note:: :py:meth:`create_database` should have been called prior to executing this method + + :param callable() progress_func: optional function to be called with the current progress and total count. + :return: True if it successfully saved the snapshot, False otherwise + :rtype: bool + """ + return self.file.save_auto_snapshot(progress_func)
+ +
[docs] def get_view_of_type(self, name): + """ + ``get_view_of_type`` returns the BinaryView associated with the provided name if it exists. + + :param str name: Name of the view to be retrieved + :return: BinaryView object associated with the provided name or None on failure + :rtype: BinaryView or None + """ + return self.file.get_view_of_type(name)
+ +
[docs] def begin_undo_actions(self): + """ + ``begin_undo_actions`` start recording actions taken so the can be undone at some point. + + :rtype: None + :Example: + + >>> bv.get_disassembly(0x100012f1) + 'xor eax, eax' + >>> bv.begin_undo_actions() + >>> bv.convert_to_nop(0x100012f1) + True + >>> bv.commit_undo_actions() + >>> bv.get_disassembly(0x100012f1) + 'nop' + >>> bv.undo() + >>> bv.get_disassembly(0x100012f1) + 'xor eax, eax' + >>> + """ + self.file.begin_undo_actions()
+ +
[docs] def add_undo_action(self, action): + core.BNAddUndoAction(self.handle, action.__class__.name, action._cb)
+ +
[docs] def commit_undo_actions(self): + """ + ``commit_undo_actions`` commit the actions taken since the last commit to the undo database. + + :rtype: None + :Example: + + >>> bv.get_disassembly(0x100012f1) + 'xor eax, eax' + >>> bv.begin_undo_actions() + >>> bv.convert_to_nop(0x100012f1) + True + >>> bv.commit_undo_actions() + >>> bv.get_disassembly(0x100012f1) + 'nop' + >>> bv.undo() + >>> bv.get_disassembly(0x100012f1) + 'xor eax, eax' + >>> + """ + self.file.commit_undo_actions()
+ +
[docs] def undo(self): + """ + ``undo`` undo the last committed action in the undo database. + + :rtype: None + :Example: + + >>> bv.get_disassembly(0x100012f1) + 'xor eax, eax' + >>> bv.begin_undo_actions() + >>> bv.convert_to_nop(0x100012f1) + True + >>> bv.commit_undo_actions() + >>> bv.get_disassembly(0x100012f1) + 'nop' + >>> bv.undo() + >>> bv.get_disassembly(0x100012f1) + 'xor eax, eax' + >>> bv.redo() + >>> bv.get_disassembly(0x100012f1) + 'nop' + >>> + """ + self.file.undo()
+ +
[docs] def redo(self): + """ + ``redo`` redo the last committed action in the undo database. + + :rtype: None + :Example: + + >>> bv.get_disassembly(0x100012f1) + 'xor eax, eax' + >>> bv.begin_undo_actions() + >>> bv.convert_to_nop(0x100012f1) + True + >>> bv.commit_undo_actions() + >>> bv.get_disassembly(0x100012f1) + 'nop' + >>> bv.undo() + >>> bv.get_disassembly(0x100012f1) + 'xor eax, eax' + >>> bv.redo() + >>> bv.get_disassembly(0x100012f1) + 'nop' + >>> + """ + self.file.redo()
+ +
[docs] def navigate(self, view, offset): + return self.file.navigate(view, offset)
+ +
[docs] def read(self, addr, length): + """ + ``read`` returns the data reads at most ``length`` bytes from virtual address ``addr``. + + Note: Python2 returns a str, but Python3 returns a bytes object. str(DataBufferObject) will + still get you a str in either case. + + :param int addr: virtual address to read from. + :param int length: number of bytes to read. + :return: at most ``length`` bytes from the virtual address ``addr``, empty string on error or no data. + :rtype: python2 - str; python3 - bytes + :Example: + + >>> #Opening a x86_64 Mach-O binary + >>> bv = BinaryViewType['Raw'].open("/bin/ls") + >>> bv.read(0,4) + \'\\xcf\\xfa\\xed\\xfe\' + """ + if (addr < 0) or (length < 0): + raise ValueError("length and address must both be positive") + buf = databuffer.DataBuffer(handle=core.BNReadViewBuffer(self.handle, addr, length)) + return bytes(buf)
+ +
[docs] def write(self, addr, data): + """ + ``write`` writes the bytes in ``data`` to the virtual address ``addr``. + + :param int addr: virtual address to write to. + :param str data: data to be written at addr. + :return: number of bytes written to virtual address ``addr`` + :rtype: int + :Example: + + >>> bv.read(0,4) + 'BBBB' + >>> bv.write(0, "AAAA") + 4L + >>> bv.read(0,4) + 'AAAA' + """ + if not isinstance(data, bytes): + if isinstance(data, str): + buf = databuffer.DataBuffer(data.encode()) + else: + raise TypeError("Must be bytes or str") + else: + buf = databuffer.DataBuffer(data) + return core.BNWriteViewBuffer(self.handle, addr, buf.handle)
+ +
[docs] def insert(self, addr, data): + """ + ``insert`` inserts the bytes in ``data`` to the virtual address ``addr``. + + :param int addr: virtual address to write to. + :param str data: data to be inserted at addr. + :return: number of bytes inserted to virtual address ``addr`` + :rtype: int + :Example: + + >>> bv.insert(0,"BBBB") + 4L + >>> bv.read(0,8) + 'BBBBAAAA' + """ + if not isinstance(data, bytes): + raise TypeError("Must be bytes") + buf = databuffer.DataBuffer(data) + return core.BNInsertViewBuffer(self.handle, addr, buf.handle)
+ +
[docs] def remove(self, addr, length): + """ + ``remove`` removes at most ``length`` bytes from virtual address ``addr``. + + :param int addr: virtual address to remove from. + :param int length: number of bytes to remove. + :return: number of bytes removed from virtual address ``addr`` + :rtype: int + :Example: + + >>> bv.read(0,8) + 'BBBBAAAA' + >>> bv.remove(0,4) + 4L + >>> bv.read(0,4) + 'AAAA' + """ + return core.BNRemoveViewData(self.handle, addr, length)
+ +
[docs] def get_entropy(self, addr, length, block_size=0): + """ + ``get_entropy`` returns the shannon entropy given the start ``addr``, ``length`` in bytes, and optionally in + ``block_size`` chunks. + + :param int addr: virtual address + :param int length: total length in bytes + :param int block_size: optional block size + :return: list of entropy values for each chunk + :rtype: list of entropy values or an empty list + """ + result = [] + if length == 0: + return result + if block_size == 0: + block_size = length + data = (ctypes.c_float * ((length // block_size) + 1))() + length = core.BNGetEntropy(self.handle, addr, length, block_size, data) + + for i in range(0, length): + result.append(float(data[i])) + return result
+ +
[docs] def get_modification(self, addr, length=None): + """ + ``get_modification`` returns the modified bytes of up to ``length`` bytes from virtual address ``addr``, or if + ``length`` is None returns the ModificationStatus. + + :param int addr: virtual address to get modification from + :param int length: optional length of modification + :return: Either ModificationStatus of the byte at ``addr``, or string of modified bytes at ``addr`` + :rtype: ModificationStatus or str + """ + if length is None: + return ModificationStatus(core.BNGetModification(self.handle, addr)) + data = (ModificationStatus * length)() + length = core.BNGetModificationArray(self.handle, addr, data, length) + return data[0:length]
+ +
[docs] def is_valid_offset(self, addr): + """ + ``is_valid_offset`` checks if an virtual address ``addr`` is valid . + + :param int addr: a virtual address to be checked + :return: true if the virtual address is valid, false if the virtual address is invalid or error + :rtype: bool + """ + return core.BNIsValidOffset(self.handle, addr)
+ +
[docs] def is_offset_readable(self, addr): + """ + ``is_offset_readable`` checks if an virtual address ``addr`` is valid for reading. + + :param int addr: a virtual address to be checked + :return: true if the virtual address is valid for reading, false if the virtual address is invalid or error + :rtype: bool + """ + return core.BNIsOffsetReadable(self.handle, addr)
+ +
[docs] def is_offset_writable(self, addr): + """ + ``is_offset_writable`` checks if an virtual address ``addr`` is valid for writing. + + :param int addr: a virtual address to be checked + :return: true if the virtual address is valid for writing, false if the virtual address is invalid or error + :rtype: bool + """ + return core.BNIsOffsetWritable(self.handle, addr)
+ +
[docs] def is_offset_executable(self, addr): + """ + ``is_offset_executable`` checks if an virtual address ``addr`` is valid for executing. + + :param int addr: a virtual address to be checked + :return: true if the virtual address is valid for executing, false if the virtual address is invalid or error + :rtype: bool + """ + return core.BNIsOffsetExecutable(self.handle, addr)
+ +
[docs] def is_offset_code_semantics(self, addr): + """ + ``is_offset_code_semantics`` checks if an virtual address ``addr`` is semantically valid for code. + + :param int addr: a virtual address to be checked + :return: true if the virtual address is valid for writing, false if the virtual address is invalid or error + :rtype: bool + """ + return core.BNIsOffsetCodeSemantics(self.handle, addr)
+ +
[docs] def is_offset_extern_semantics(self, addr): + """ + ``is_offset_extern_semantics`` checks if an virtual address ``addr`` is semantically valid for external references. + + :param int addr: a virtual address to be checked + :return: true if the virtual address is valid for writing, false if the virtual address is invalid or error + :rtype: bool + """ + return core.BNIsOffsetExternSemantics(self.handle, addr)
+ +
[docs] def is_offset_writable_semantics(self, addr): + """ + ``is_offset_writable_semantics`` checks if an virtual address ``addr`` is semantically writable. Some sections + may have writable permissions for linking purposes but can be treated as read-only for the purposes of + analysis. + + :param int addr: a virtual address to be checked + :return: true if the virtual address is valid for writing, false if the virtual address is invalid or error + :rtype: bool + """ + return core.BNIsOffsetWritableSemantics(self.handle, addr)
+ +
[docs] def save(self, dest): + """ + ``save`` saves the original binary file to the provided destination ``dest`` along with any modifications. + + :param str dest: destination path and filename of file to be written + :return: boolean True on success, False on failure + :rtype: bool + """ + if isinstance(dest, fileaccessor.FileAccessor): + return core.BNSaveToFile(self.handle, dest._cb) + return core.BNSaveToFilename(self.handle, str(dest))
+ +
[docs] def register_notification(self, notify): + """ + `register_notification` provides a mechanism for receiving callbacks for various analysis events. A full + list of callbacks can be seen in :py:Class:`BinaryDataNotification`. + + :param BinaryDataNotification notify: notify is a subclassed instance of :py:Class:`BinaryDataNotification`. + :rtype: None + """ + cb = BinaryDataNotificationCallbacks(self, notify) + cb._register() + self.notifications[notify] = cb
+ +
[docs] def unregister_notification(self, notify): + """ + `unregister_notification` unregisters the :py:Class:`BinaryDataNotification` object passed to + `register_notification` + + :param BinaryDataNotification notify: notify is a subclassed instance of :py:Class:`BinaryDataNotification`. + :rtype: None + """ + if notify in self.notifications: + self.notifications[notify]._unregister() + del self.notifications[notify]
+ +
[docs] def add_function(self, addr, plat=None): + """ + ``add_function`` add a new function of the given ``plat`` at the virtual address ``addr`` + + :param int addr: virtual address of the function to be added + :param Platform plat: Platform for the function to be added + :rtype: None + :Example: + + >>> bv.add_function(1) + >>> bv.functions + [<func: x86_64@0x1>] + + """ + if self.platform is None: + raise Exception("Default platform not set in BinaryView") + if plat is None: + plat = self.platform + core.BNAddFunctionForAnalysis(self.handle, plat.handle, addr)
+ +
[docs] def add_entry_point(self, addr, plat=None): + """ + ``add_entry_point`` adds an virtual address to start analysis from for a given plat. + + :param int addr: virtual address to start analysis from + :param Platform plat: Platform for the entry point analysis + :rtype: None + :Example: + >>> bv.add_entry_point(0xdeadbeef) + >>> + """ + if self.platform is None: + raise Exception("Default platform not set in BinaryView") + if plat is None: + plat = self.platform + core.BNAddEntryPointForAnalysis(self.handle, plat.handle, addr)
+ +
[docs] def remove_function(self, func): + """ + ``remove_function`` removes the function ``func`` from the list of functions + + :param Function func: a Function object. + :rtype: None + :Example: + + >>> bv.functions + [<func: x86_64@0x1>] + >>> bv.remove_function(bv.functions[0]) + >>> bv.functions + [] + """ + core.BNRemoveAnalysisFunction(self.handle, func.handle)
+ +
[docs] def create_user_function(self, addr, plat=None): + """ + ``create_user_function`` add a new *user* function of the given ``plat`` at the virtual address ``addr`` + + :param int addr: virtual address of the *user* function to be added + :param Platform plat: Platform for the function to be added + :rtype: None + :Example: + + >>> bv.create_user_function(1) + >>> bv.functions + [<func: x86_64@0x1>] + + """ + if plat is None: + plat = self.platform + core.BNCreateUserFunction(self.handle, plat.handle, addr)
+ +
[docs] def remove_user_function(self, func): + """ + ``remove_user_function`` removes the *user* function ``func`` from the list of functions + + :param Function func: a Function object. + :rtype: None + :Example: + + >>> bv.functions + [<func: x86_64@0x1>] + >>> bv.remove_user_function(bv.functions[0]) + >>> bv.functions + [] + """ + core.BNRemoveUserFunction(self.handle, func.handle)
+ +
[docs] def add_analysis_option(self, name): + """ + ``add_analysis_option`` adds an analysis option. Analysis options elaborate the analysis phase. The user must + start analysis by calling either ``update_analysis()`` or ``update_analysis_and_wait()``. + + :param str name: name of the analysis option. Available options: + "linearsweep" : apply linearsweep analysis during the next analysis update (run-once semantics) + + :rtype: None + :Example: + + >>> bv.add_analysis_option("linearsweep") + >>> bv.update_analysis_and_wait() + """ + core.BNAddAnalysisOption(self.handle, name)
+ +
[docs] def update_analysis(self): + """ + ``update_analysis`` asynchronously starts the analysis running and returns immediately. Analysis of BinaryViews + does not occur automatically, the user must start analysis by calling either ``update_analysis()`` or + ``update_analysis_and_wait()``. An analysis update **must** be run after changes are made which could change + analysis results such as adding functions. + + :rtype: None + """ + core.BNUpdateAnalysis(self.handle)
+ +
[docs] def update_analysis_and_wait(self): + """ + ``update_analysis_and_wait`` blocking call to update the analysis, this call returns when the analysis is + complete. Analysis of BinaryViews does not occur automatically, the user must start analysis by calling either + ``update_analysis()`` or ``update_analysis_and_wait()``. An analysis update **must** be run after changes are + made which could change analysis results such as adding functions. + + :rtype: None + """ + core.BNUpdateAnalysisAndWait(self.handle)
+ +
[docs] def abort_analysis(self): + """ + ``abort_analysis`` will abort the currently running analysis. + + :rtype: None + """ + core.BNAbortAnalysis(self.handle)
+ +
[docs] def define_data_var(self, addr, var_type): + """ + ``define_data_var`` defines a non-user data variable ``var_type`` at the virtual address ``addr``. + + :param int addr: virtual address to define the given data variable + :param Type var_type: type to be defined at the given virtual address + :rtype: None + :Example: + + >>> t = bv.parse_type_string("int foo") + >>> t + (<type: int32_t>, 'foo') + >>> bv.define_data_var(bv.entry_point, t[0]) + >>> + """ + tc = core.BNTypeWithConfidence() + tc.type = var_type.handle + tc.confidence = var_type.confidence + core.BNDefineDataVariable(self.handle, addr, tc)
+ +
[docs] def define_user_data_var(self, addr, var_type): + """ + ``define_user_data_var`` defines a user data variable ``var_type`` at the virtual address ``addr``. + + :param int addr: virtual address to define the given data variable + :param binaryninja.Type var_type: type to be defined at the given virtual address + :rtype: None + :Example: + + >>> t = bv.parse_type_string("int foo") + >>> t + (<type: int32_t>, 'foo') + >>> bv.define_user_data_var(bv.entry_point, t[0]) + >>> + """ + tc = core.BNTypeWithConfidence() + tc.type = var_type.handle + tc.confidence = var_type.confidence + core.BNDefineUserDataVariable(self.handle, addr, tc)
+ +
[docs] def undefine_data_var(self, addr): + """ + ``undefine_data_var`` removes the non-user data variable at the virtual address ``addr``. + + :param int addr: virtual address to define the data variable to be removed + :rtype: None + :Example: + + >>> bv.undefine_data_var(bv.entry_point) + >>> + """ + core.BNUndefineDataVariable(self.handle, addr)
+ +
[docs] def undefine_user_data_var(self, addr): + """ + ``undefine_user_data_var`` removes the user data variable at the virtual address ``addr``. + + :param int addr: virtual address to define the data variable to be removed + :rtype: None + :Example: + + >>> bv.undefine_user_data_var(bv.entry_point) + >>> + """ + core.BNUndefineUserDataVariable(self.handle, addr)
+ +
[docs] def get_data_var_at(self, addr): + """ + ``get_data_var_at`` returns the data type at a given virtual address. + + :param int addr: virtual address to get the data type from + :return: returns the DataVariable at the given virtual address, None on error. + :rtype: DataVariable + :Example: + + >>> t = bv.parse_type_string("int foo") + >>> bv.define_data_var(bv.entry_point, t[0]) + >>> bv.get_data_var_at(bv.entry_point) + <var 0x100001174: int32_t> + + """ + var = core.BNDataVariable() + if not core.BNGetDataVariableAtAddress(self.handle, addr, var): + return None + return DataVariable(var.address, types.Type(var.type, platform = self.platform, confidence = var.typeConfidence), var.autoDiscovered, self)
+ +
[docs] def get_functions_containing(self, addr): + """ + ``get_functions_containing`` returns a list of functions which contain the given address or None on failure. + + :param int addr: virtual address to query. + :rtype: list of Function objects or None + """ + basic_blocks = self.get_basic_blocks_at(addr) + if len(basic_blocks) == 0: + return None + + result = [] + for block in basic_blocks: + result.append(block.function) + return result
+ +
[docs] def get_function_at(self, addr, plat=None): + """ + ``get_function_at`` gets a Function object for the function that starts at virtual address ``addr``: + + :param int addr: starting virtual address of the desired function + :param Platform plat: plat of the desired function + :return: returns a Function object or None for the function at the virtual address provided + :rtype: Function + :Example: + + >>> bv.get_function_at(bv.entry_point) + <func: x86_64@0x100001174> + >>> + """ + if plat is None: + plat = self.platform + if plat is None: + return None + func = core.BNGetAnalysisFunction(self.handle, plat.handle, addr) + if func is None: + return None + return binaryninja.function.Function(self, func)
+ +
[docs] def get_functions_at(self, addr): + """ + ``get_functions_at`` get a list of binaryninja.Function objects (one for each valid plat) at the given + virtual address. Binary Ninja does not limit the number of platforms in a given file thus there may be multiple + functions defined from different architectures at the same location. This API allows you to query all of valid + platforms. + + :param int addr: virtual address of the desired Function object list. + :return: a list of binaryninja.Function objects defined at the provided virtual address + :rtype: list(Function) + """ + count = ctypes.c_ulonglong(0) + funcs = core.BNGetAnalysisFunctionsForAddress(self.handle, addr, count) + result = [] + for i in range(0, count.value): + result.append(binaryninja.function.Function(self, core.BNNewFunctionReference(funcs[i]))) + core.BNFreeFunctionList(funcs, count.value) + return result
+ +
[docs] def get_recent_function_at(self, addr): + func = core.BNGetRecentAnalysisFunctionForAddress(self.handle, addr) + if func is None: + return None + return binaryninja.function.Function(self, func)
+ +
[docs] def get_basic_blocks_at(self, addr): + """ + ``get_basic_blocks_at`` get a list of :py:Class:`BasicBlock` objects which exist at the provided virtual address. + + :param int addr: virtual address of BasicBlock desired + :return: a list of :py:Class:`BasicBlock` objects + :rtype: list(BasicBlock) + """ + count = ctypes.c_ulonglong(0) + blocks = core.BNGetBasicBlocksForAddress(self.handle, addr, count) + result = [] + for i in range(0, count.value): + result.append(basicblock.BasicBlock(core.BNNewBasicBlockReference(blocks[i]), self)) + core.BNFreeBasicBlockList(blocks, count.value) + return result
+ +
[docs] def get_basic_blocks_starting_at(self, addr): + """ + ``get_basic_blocks_starting_at`` get a list of :py:Class:`BasicBlock` objects which start at the provided virtual address. + + :param int addr: virtual address of BasicBlock desired + :return: a list of :py:Class:`BasicBlock` objects + :rtype: list(BasicBlock) + """ + count = ctypes.c_ulonglong(0) + blocks = core.BNGetBasicBlocksStartingAtAddress(self.handle, addr, count) + result = [] + for i in range(0, count.value): + result.append(basicblock.BasicBlock(core.BNNewBasicBlockReference(blocks[i]), self)) + core.BNFreeBasicBlockList(blocks, count.value) + return result
+ +
[docs] def get_recent_basic_block_at(self, addr): + block = core.BNGetRecentBasicBlockForAddress(self.handle, addr) + if block is None: + return None + return basicblock.BasicBlock(block, self)
+ +
[docs] def get_code_refs(self, addr, length=None): + """ + ``get_code_refs`` returns a list of ReferenceSource objects (xrefs or cross-references) that point to the provided virtual address. + + :param int addr: virtual address to query for references + :return: List of References for the given virtual address + :rtype: list(ReferenceSource) + :Example: + + >>> bv.get_code_refs(here) + [<ref: x86@0x4165ff>] + >>> + + """ + count = ctypes.c_ulonglong(0) + if length is None: + refs = core.BNGetCodeReferences(self.handle, addr, count) + else: + refs = core.BNGetCodeReferencesInRange(self.handle, addr, length, count) + result = [] + for i in range(0, count.value): + if refs[i].func: + func = binaryninja.function.Function(self, core.BNNewFunctionReference(refs[i].func)) + else: + func = None + if refs[i].arch: + arch = binaryninja.architecture.CoreArchitecture._from_cache(refs[i].arch) + else: + arch = None + addr = refs[i].addr + result.append(binaryninja.architecture.ReferenceSource(func, arch, addr)) + core.BNFreeCodeReferences(refs, count.value) + return result
+ +
[docs] def get_data_refs(self, addr, length=None): + """ + ``get_data_refs`` returns a list of virtual addresses of data which references ``addr``. Optionally specifying + a length. When ``length`` is set ``get_data_refs`` returns the data which references in the range ``addr``-``addr``+``length``. + + :param int addr: virtual address to query for references + :param int length: optional length of query + :return: list of integers + :rtype: list(integer) + :Example: + + >>> bv.get_data_refs(here) + [4203812] + >>> + """ + count = ctypes.c_ulonglong(0) + if length is None: + refs = core.BNGetDataReferences(self.handle, addr, count) + else: + refs = core.BNGetDataReferencesInRange(self.handle, addr, length, count) + + result = [] + for i in range(0, count.value): + result.append(refs[i]) + core.BNFreeDataReferences(refs, count.value) + return result
+ +
[docs] def get_data_refs_from(self, addr, length=None): + """ + ``get_data_refs_from`` returns a list of virtual addresses referenced by the address ``addr``. Optionally specifying + a length. When ``length`` is set ``get_data_refs_from`` returns the data referenced in the range ``addr``-``addr``+``length``. + + :param int addr: virtual address to query for references + :param int length: optional length of query + :return: list of integers + :rtype: list(integer) + :Example: + + >>> bv.get_data_refs_from(here) + [4200327] + >>> + """ + count = ctypes.c_ulonglong(0) + if length is None: + refs = core.BNGetDataReferencesFrom(self.handle, addr, count) + else: + refs = core.BNGetDataReferencesFromInRange(self.handle, addr, length, count) + + result = [] + for i in range(0, count.value): + result.append(refs[i]) + core.BNFreeDataReferences(refs, count.value) + return result
+ + +
[docs] def get_symbol_at(self, addr, namespace=None): + """ + ``get_symbol_at`` returns the Symbol at the provided virtual address. + + :param int addr: virtual address to query for symbol + :return: Symbol for the given virtual address + :param NameSpace namespace: the namespace of the symbols to retrieve + :rtype: Symbol + :Example: + + >>> bv.get_symbol_at(bv.entry_point) + <FunctionSymbol: "_start" @ 0x100001174> + >>> + """ + if isinstance(namespace, str): + namespace = types.NameSpace(namespace) + if isinstance(namespace, types.NameSpace): + namespace = namespace._get_core_struct() + + sym = core.BNGetSymbolByAddress(self.handle, addr, namespace) + if sym is None: + return None + return types.Symbol(None, None, None, handle = sym)
+ +
[docs] def get_symbol_by_raw_name(self, name, namespace=None): + """ + ``get_symbol_by_raw_name`` retrieves a Symbol object for the given a raw (mangled) name. + + :param str name: raw (mangled) name of Symbol to be retrieved + :return: Symbol object corresponding to the provided raw name + :param NameSpace namespace: the namespace to search for the given symbol + :rtype: Symbol + :Example: + + >>> bv.get_symbol_by_raw_name('?testf@Foobar@@SA?AW4foo@1@W421@@Z') + <FunctionSymbol: "public: static enum Foobar::foo __cdecl Foobar::testf(enum Foobar::foo)" @ 0x10001100> + >>> + """ + if isinstance(namespace, str): + namespace = types.NameSpace(namespace) + if isinstance(namespace, types.NameSpace): + namespace = namespace._get_core_struct() + sym = core.BNGetSymbolByRawName(self.handle, name, namespace) + if sym is None: + return None + return types.Symbol(None, None, None, handle = sym)
+ +
[docs] def get_symbols_by_name(self, name, namespace=None): + """ + ``get_symbols_by_name`` retrieves a list of Symbol objects for the given symbol name. + + :param str name: name of Symbol object to be retrieved + :return: Symbol object corresponding to the provided name + :param NameSpace namespace: the namespace of the symbol + :rtype: Symbol + :Example: + + >>> bv.get_symbols_by_name('?testf@Foobar@@SA?AW4foo@1@W421@@Z') + [<FunctionSymbol: "public: static enum Foobar::foo __cdecl Foobar::testf(enum Foobar::foo)" @ 0x10001100>] + >>> + """ + if isinstance(namespace, str): + namespace = types.NameSpace(namespace) + if isinstance(namespace, types.NameSpace): + namespace = namespace._get_core_struct() + count = ctypes.c_ulonglong(0) + syms = core.BNGetSymbolsByName(self.handle, name, count, namespace) + result = [] + for i in range(0, count.value): + result.append(types.Symbol(None, None, None, handle = core.BNNewSymbolReference(syms[i]))) + core.BNFreeSymbolList(syms, count.value) + return result
+ +
[docs] def get_symbols(self, start=None, length=None, namespace=None): + """ + ``get_symbols`` retrieves the list of all Symbol objects in the optionally provided range. + + :param int start: optional start virtual address + :param int length: optional length + :return: list of all Symbol objects, or those Symbol objects in the range of ``start``-``start+length`` + :rtype: list(Symbol) + :Example: + + >>> bv.get_symbols(0x1000200c, 1) + [<ImportAddressSymbol: "KERNEL32!IsProcessorFeaturePresent@IAT" @ 0x1000200c>] + >>> + """ + count = ctypes.c_ulonglong(0) + if isinstance(namespace, str): + namespace = types.NameSpace(namespace) + if isinstance(namespace, types.NameSpace): + namespace = namespace._get_core_struct() + if start is None: + syms = core.BNGetSymbols(self.handle, count, namespace) + else: + syms = core.BNGetSymbolsInRange(self.handle, start, length, count, namespace) + result = [] + for i in range(0, count.value): + result.append(types.Symbol(None, None, None, handle = core.BNNewSymbolReference(syms[i]))) + core.BNFreeSymbolList(syms, count.value) + return result
+ +
[docs] def get_symbols_of_type(self, sym_type, start=None, length=None, namespace=None): + """ + ``get_symbols_of_type`` retrieves a list of all Symbol objects of the provided symbol type in the optionally + provided range. + + :param SymbolType sym_type: A Symbol type: :py:Class:`Symbol`. + :param int start: optional start virtual address + :param int length: optional length + :return: list of all Symbol objects of type sym_type, or those Symbol objects in the range of ``start``-``start+length`` + :rtype: list(Symbol) + :Example: + + >>> bv.get_symbols_of_type(SymbolType.ImportAddressSymbol, 0x10002028, 1) + [<ImportAddressSymbol: "KERNEL32!GetCurrentThreadId@IAT" @ 0x10002028>] + >>> + """ + if isinstance(sym_type, str): + sym_type = SymbolType[sym_type] + if isinstance(namespace, str): + namespace = types.NameSpace(namespace) + if isinstance(namespace, types.NameSpace): + namespace = namespace._get_core_struct() + count = ctypes.c_ulonglong(0) + if start is None: + syms = core.BNGetSymbolsOfType(self.handle, sym_type, count, namespace) + else: + syms = core.BNGetSymbolsOfTypeInRange(self.handle, sym_type, start, length, count) + result = [] + for i in range(0, count.value): + result.append(types.Symbol(None, None, None, handle = core.BNNewSymbolReference(syms[i]))) + core.BNFreeSymbolList(syms, count.value) + return result
+ +
[docs] def define_auto_symbol(self, sym): + """ + ``define_auto_symbol`` adds a symbol to the internal list of automatically discovered Symbol objects in a given + namespace. + + .. warning:: If multiple symbols for the same address are defined, only the most recent symbol will ever be used. + + :param Symbol sym: the symbol to define + :rtype: None + """ + core.BNDefineAutoSymbol(self.handle, sym.handle)
+ +
[docs] def define_auto_symbol_and_var_or_function(self, sym, sym_type, plat=None): + """ + ``define_auto_symbol_and_var_or_function`` + + .. warning:: If multiple symbols for the same address are defined, only the most recent symbol will ever be used. + + :param Symbol sym: the symbol to define + :param SymbolType sym_type: Type of symbol being defined + :param Platform plat: (optional) platform + :rtype: None + """ + if plat is None: + plat = self.plat + if plat is not None: + plat = plat.handle + if sym_type is not None: + sym_type = sym_type.handle + core.BNDefineAutoSymbolAndVariableOrFunction(self.handle, plat, sym.handle, sym_type)
+ +
[docs] def undefine_auto_symbol(self, sym): + """ + ``undefine_auto_symbol`` removes a symbol from the internal list of automatically discovered Symbol objects. + + :param Symbol sym: the symbol to undefine + :rtype: None + """ + core.BNUndefineAutoSymbol(self.handle, sym.handle)
+ +
[docs] def define_user_symbol(self, sym): + """ + ``define_user_symbol`` adds a symbol to the internal list of user added Symbol objects. + + .. warning:: If multiple symbols for the same address are defined, only the most recent symbol will ever be used. + + :param Symbol sym: the symbol to define + :rtype: None + """ + core.BNDefineUserSymbol(self.handle, sym.handle)
+ +
[docs] def undefine_user_symbol(self, sym): + """ + ``undefine_user_symbol`` removes a symbol from the internal list of user added Symbol objects. + + :param Symbol sym: the symbol to undefine + :rtype: None + """ + core.BNUndefineUserSymbol(self.handle, sym.handle)
+ +
[docs] def define_imported_function(self, import_addr_sym, func): + """ + ``define_imported_function`` defines an imported Function ``func`` with a ImportedFunctionSymbol type. + + :param Symbol import_addr_sym: A Symbol object with type ImportedFunctionSymbol + :param Function func: A Function object to define as an imported function + :rtype: None + """ + core.BNDefineImportedFunction(self.handle, import_addr_sym.handle, func.handle)
+ +
[docs] def is_never_branch_patch_available(self, addr, arch=None): + """ + ``is_never_branch_patch_available`` queries the architecture plugin to determine if the instruction at the + instruction at ``addr`` can be made to **never branch**. The actual logic of which is implemented in the + ``perform_is_never_branch_patch_available`` in the corresponding architecture. + + :param int addr: the virtual address of the instruction to be patched + :param Architecture arch: (optional) the architecture of the instructions if different from the default + :return: True if the instruction can be patched, False otherwise + :rtype: bool + :Example: + + >>> bv.get_disassembly(0x100012ed) + 'test eax, eax' + >>> bv.is_never_branch_patch_available(0x100012ed) + False + >>> bv.get_disassembly(0x100012ef) + 'jg 0x100012f5' + >>> bv.is_never_branch_patch_available(0x100012ef) + True + >>> + """ + if arch is None: + arch = self.arch + return core.BNIsNeverBranchPatchAvailable(self.handle, arch.handle, addr)
+ +
[docs] def is_always_branch_patch_available(self, addr, arch=None): + """ + ``is_always_branch_patch_available`` queries the architecture plugin to determine if the + instruction at ``addr`` can be made to **always branch**. The actual logic of which is implemented in the + ``perform_is_always_branch_patch_available`` in the corresponding architecture. + + :param int addr: the virtual address of the instruction to be patched + :param Architecture arch: (optional) the architecture for the current view + :return: True if the instruction can be patched, False otherwise + :rtype: bool + :Example: + + >>> bv.get_disassembly(0x100012ed) + 'test eax, eax' + >>> bv.is_always_branch_patch_available(0x100012ed) + False + >>> bv.get_disassembly(0x100012ef) + 'jg 0x100012f5' + >>> bv.is_always_branch_patch_available(0x100012ef) + True + >>> + """ + if arch is None: + arch = self.arch + return core.BNIsAlwaysBranchPatchAvailable(self.handle, arch.handle, addr)
+ +
[docs] def is_invert_branch_patch_available(self, addr, arch=None): + """ + ``is_invert_branch_patch_available`` queries the architecture plugin to determine if the instruction at ``addr`` + is a branch that can be inverted. The actual logic of which is implemented in the + ``perform_is_invert_branch_patch_available`` in the corresponding architecture. + + :param int addr: the virtual address of the instruction to be patched + :param Architecture arch: (optional) the architecture of the instructions if different from the default + :return: True if the instruction can be patched, False otherwise + :rtype: bool + :Example: + + >>> bv.get_disassembly(0x100012ed) + 'test eax, eax' + >>> bv.is_invert_branch_patch_available(0x100012ed) + False + >>> bv.get_disassembly(0x100012ef) + 'jg 0x100012f5' + >>> bv.is_invert_branch_patch_available(0x100012ef) + True + >>> + """ + if arch is None: + arch = self.arch + return core.BNIsInvertBranchPatchAvailable(self.handle, arch.handle, addr)
+ +
[docs] def is_skip_and_return_zero_patch_available(self, addr, arch=None): + """ + ``is_skip_and_return_zero_patch_available`` queries the architecture plugin to determine if the + instruction at ``addr`` is similar to an x86 "call" instruction which can be made to return zero. The actual + logic of which is implemented in the ``perform_is_skip_and_return_zero_patch_available`` in the corresponding + architecture. + + :param int addr: the virtual address of the instruction to be patched + :param Architecture arch: (optional) the architecture of the instructions if different from the default + :return: True if the instruction can be patched, False otherwise + :rtype: bool + :Example: + + >>> bv.get_disassembly(0x100012f6) + 'mov dword [0x10003020], eax' + >>> bv.is_skip_and_return_zero_patch_available(0x100012f6) + False + >>> bv.get_disassembly(0x100012fb) + 'call 0x10001629' + >>> bv.is_skip_and_return_zero_patch_available(0x100012fb) + True + >>> + """ + if arch is None: + arch = self.arch + return core.BNIsSkipAndReturnZeroPatchAvailable(self.handle, arch.handle, addr)
+ +
[docs] def is_skip_and_return_value_patch_available(self, addr, arch=None): + """ + ``is_skip_and_return_value_patch_available`` queries the architecture plugin to determine if the + instruction at ``addr`` is similar to an x86 "call" instruction which can be made to return a value. The actual + logic of which is implemented in the ``perform_is_skip_and_return_value_patch_available`` in the corresponding + architecture. + + :param int addr: the virtual address of the instruction to be patched + :param Architecture arch: (optional) the architecture of the instructions if different from the default + :return: True if the instruction can be patched, False otherwise + :rtype: bool + :Example: + + >>> bv.get_disassembly(0x100012f6) + 'mov dword [0x10003020], eax' + >>> bv.is_skip_and_return_value_patch_available(0x100012f6) + False + >>> bv.get_disassembly(0x100012fb) + 'call 0x10001629' + >>> bv.is_skip_and_return_value_patch_available(0x100012fb) + True + >>> + """ + if arch is None: + arch = self.arch + return core.BNIsSkipAndReturnValuePatchAvailable(self.handle, arch.handle, addr)
+ +
[docs] def convert_to_nop(self, addr, arch=None): + """ + ``convert_to_nop`` converts the instruction at virtual address ``addr`` to a nop of the provided architecture. + + .. note:: This API performs a binary patch, analysis may need to be updated afterward. Additionally the binary\ + file must be saved in order to preserve the changes made. + + :param int addr: virtual address of the instruction to convert to nops + :param Architecture arch: (optional) the architecture of the instructions if different from the default + :return: True on success, False on failure. + :rtype: bool + :Example: + + >>> bv.get_disassembly(0x100012fb) + 'call 0x10001629' + >>> bv.convert_to_nop(0x100012fb) + True + >>> #The above 'call' instruction is 5 bytes, a nop in x86 is 1 byte, + >>> # thus 5 nops are used: + >>> bv.get_disassembly(0x100012fb) + 'nop' + >>> bv.get_next_disassembly() + 'nop' + >>> bv.get_next_disassembly() + 'nop' + >>> bv.get_next_disassembly() + 'nop' + >>> bv.get_next_disassembly() + 'nop' + >>> bv.get_next_disassembly() + 'mov byte [ebp-0x1c], al' + """ + if arch is None: + arch = self.arch + return core.BNConvertToNop(self.handle, arch.handle, addr)
+ +
[docs] def always_branch(self, addr, arch=None): + """ + ``always_branch`` convert the instruction of architecture ``arch`` at the virtual address ``addr`` to an + unconditional branch. + + .. note:: This API performs a binary patch, analysis may need to be updated afterward. Additionally the binary\ + file must be saved in order to preserve the changes made. + + :param int addr: virtual address of the instruction to be modified + :param Architecture arch: (optional) the architecture of the instructions if different from the default + :return: True on success, False on failure. + :rtype: bool + :Example: + + >>> bv.get_disassembly(0x100012ef) + 'jg 0x100012f5' + >>> bv.always_branch(0x100012ef) + True + >>> bv.get_disassembly(0x100012ef) + 'jmp 0x100012f5' + >>> + """ + if arch is None: + arch = self.arch + return core.BNAlwaysBranch(self.handle, arch.handle, addr)
+ +
[docs] def never_branch(self, addr, arch=None): + """ + ``never_branch`` convert the branch instruction of architecture ``arch`` at the virtual address ``addr`` to + a fall through. + + .. note:: This API performs a binary patch, analysis may need to be updated afterward. Additionally the binary\ + file must be saved in order to preserve the changes made. + + :param int addr: virtual address of the instruction to be modified + :param Architecture arch: (optional) the architecture of the instructions if different from the default + :return: True on success, False on failure. + :rtype: bool + :Example: + + >>> bv.get_disassembly(0x1000130e) + 'jne 0x10001317' + >>> bv.never_branch(0x1000130e) + True + >>> bv.get_disassembly(0x1000130e) + 'nop' + >>> + """ + if arch is None: + arch = self.arch + return core.BNConvertToNop(self.handle, arch.handle, addr)
+ +
[docs] def invert_branch(self, addr, arch=None): + """ + ``invert_branch`` convert the branch instruction of architecture ``arch`` at the virtual address ``addr`` to the + inverse branch. + + .. note:: This API performs a binary patch, analysis may need to be updated afterward. Additionally the binary + file must be saved in order to preserve the changes made. + + :param int addr: virtual address of the instruction to be modified + :param Architecture arch: (optional) the architecture of the instructions if different from the default + :return: True on success, False on failure. + :rtype: bool + :Example: + + >>> bv.get_disassembly(0x1000130e) + 'je 0x10001317' + >>> bv.invert_branch(0x1000130e) + True + >>> + >>> bv.get_disassembly(0x1000130e) + 'jne 0x10001317' + >>> + """ + if arch is None: + arch = self.arch + return core.BNInvertBranch(self.handle, arch.handle, addr)
+ +
[docs] def skip_and_return_value(self, addr, value, arch=None): + """ + ``skip_and_return_value`` convert the ``call`` instruction of architecture ``arch`` at the virtual address + ``addr`` to the equivalent of returning a value. + + :param int addr: virtual address of the instruction to be modified + :param int value: value to make the instruction *return* + :param Architecture arch: (optional) the architecture of the instructions if different from the default + :return: True on success, False on failure. + :rtype: bool + :Example: + + >>> bv.get_disassembly(0x1000132a) + 'call 0x1000134a' + >>> bv.skip_and_return_value(0x1000132a, 42) + True + >>> #The return value from x86 functions is stored in eax thus: + >>> bv.get_disassembly(0x1000132a) + 'mov eax, 0x2a' + >>> + """ + if arch is None: + arch = self.arch + return core.BNSkipAndReturnValue(self.handle, arch.handle, addr, value)
+ +
[docs] def get_instruction_length(self, addr, arch=None): + """ + ``get_instruction_length`` returns the number of bytes in the instruction of Architecture ``arch`` at the virtual + address ``addr`` + + :param int addr: virtual address of the instruction query + :param Architecture arch: (optional) the architecture of the instructions if different from the default + :return: Number of bytes in instruction + :rtype: int + :Example: + + >>> bv.get_disassembly(0x100012f1) + 'xor eax, eax' + >>> bv.get_instruction_length(0x100012f1) + 2L + >>> + """ + if arch is None: + arch = self.arch + return core.BNGetInstructionLength(self.handle, arch.handle, addr)
+ +
[docs] def notify_data_written(self, offset, length): + core.BNNotifyDataWritten(self.handle, offset, length)
+ +
[docs] def notify_data_inserted(self, offset, length): + core.BNNotifyDataInserted(self.handle, offset, length)
+ +
[docs] def notify_data_removed(self, offset, length): + core.BNNotifyDataRemoved(self.handle, offset, length)
+ +
[docs] def get_strings(self, start = None, length = None): + """ + ``get_strings`` returns a list of strings defined in the binary in the optional virtual address range: + ``start-(start+length)`` + + :param int start: optional virtual address to start the string list from, defaults to start of the binary + :param int length: optional length range to return strings from, defaults to length of the binary + :return: a list of all strings or a list of strings defined between ``start`` and ``start+length`` + :rtype: list(str()) + :Example: + + >>> bv.get_strings(0x1000004d, 1) + [<AsciiString: 0x1000004d, len 0x2c>] + >>> + """ + count = ctypes.c_ulonglong(0) + if start is None: + strings = core.BNGetStrings(self.handle, count) + else: + if length is None: + length = self.end - start + strings = core.BNGetStringsInRange(self.handle, start, length, count) + result = [] + for i in range(0, count.value): + result.append(StringReference(self, StringType(strings[i].type), strings[i].start, strings[i].length)) + core.BNFreeStringReferenceList(strings) + return result
+ +
[docs] def add_analysis_completion_event(self, callback): + """ + ``add_analysis_completion_event`` sets up a call back function to be called when analysis has been completed. + This is helpful when using ``update_analysis`` which does not wait for analysis completion before returning. + + The callee of this function is not responsible for maintaining the lifetime of the returned AnalysisCompletionEvent object. + + :param callable() callback: A function to be called with no parameters when analysis has completed. + :return: An initialized AnalysisCompletionEvent object. + :rtype: AnalysisCompletionEvent + :Example: + + >>> def completionEvent(): + ... print("done") + ... + >>> bv.add_analysis_completion_event(completionEvent) + <binaryninja.AnalysisCompletionEvent object at 0x10a2c9f10> + >>> bv.update_analysis() + done + >>> + """ + return AnalysisCompletionEvent(self, callback)
+ +
[docs] def get_next_function_start_after(self, addr): + """ + ``get_next_function_start_after`` returns the virtual address of the Function that occurs after the virtual address + ``addr`` + + :param int addr: the virtual address to start looking from. + :return: the virtual address of the next Function + :rtype: int + :Example: + + >>> bv.get_next_function_start_after(bv.entry_point) + 268441061L + >>> hex(bv.get_next_function_start_after(bv.entry_point)) + '0x100015e5L' + >>> hex(bv.get_next_function_start_after(0x100015e5)) + '0x10001629L' + >>> hex(bv.get_next_function_start_after(0x10001629)) + '0x1000165eL' + >>> + """ + return core.BNGetNextFunctionStartAfterAddress(self.handle, addr)
+ +
[docs] def get_next_basic_block_start_after(self, addr): + """ + ``get_next_basic_block_start_after`` returns the virtual address of the BasicBlock that occurs after the virtual + address ``addr`` + + :param int addr: the virtual address to start looking from. + :return: the virtual address of the next BasicBlock + :rtype: int + :Example: + + >>> hex(bv.get_next_basic_block_start_after(bv.entry_point)) + '0x100014a8L' + >>> hex(bv.get_next_basic_block_start_after(0x100014a8)) + '0x100014adL' + >>> + """ + return core.BNGetNextBasicBlockStartAfterAddress(self.handle, addr)
+ +
[docs] def get_next_data_after(self, addr): + """ + ``get_next_data_after`` retrieves the virtual address of the next non-code byte. + + :param int addr: the virtual address to start looking from. + :return: the virtual address of the next data byte which is data, not code + :rtype: int + :Example: + + >>> hex(bv.get_next_data_after(0x10000000)) + '0x10000001L' + """ + return core.BNGetNextDataAfterAddress(self.handle, addr)
+ +
[docs] def get_next_data_var_after(self, addr): + """ + ``get_next_data_var_after`` retrieves the next virtual address of the next :py:Class:`DataVariable` + + :param int addr: the virtual address to start looking from. + :return: the virtual address of the next :py:Class:`DataVariable` + :rtype: int + :Example: + + >>> hex(bv.get_next_data_var_after(0x10000000)) + '0x1000003cL' + >>> bv.get_data_var_at(0x1000003c) + <var 0x1000003c: int32_t> + >>> + """ + return core.BNGetNextDataVariableAfterAddress(self.handle, addr)
+ +
[docs] def get_previous_function_start_before(self, addr): + """ + ``get_previous_function_start_before`` returns the virtual address of the Function that occurs prior to the + virtual address provided + + :param int addr: the virtual address to start looking from. + :return: the virtual address of the previous Function + :rtype: int + :Example: + + >>> hex(bv.entry_point) + '0x1000149fL' + >>> hex(bv.get_next_function_start_after(bv.entry_point)) + '0x100015e5L' + >>> hex(bv.get_previous_function_start_before(0x100015e5)) + '0x1000149fL' + >>> + """ + return core.BNGetPreviousFunctionStartBeforeAddress(self.handle, addr)
+ +
[docs] def get_previous_basic_block_start_before(self, addr): + """ + ``get_previous_basic_block_start_before`` returns the virtual address of the BasicBlock that occurs prior to the + provided virtual address + + :param int addr: the virtual address to start looking from. + :return: the virtual address of the previous BasicBlock + :rtype: int + :Example: + + >>> hex(bv.entry_point) + '0x1000149fL' + >>> hex(bv.get_next_basic_block_start_after(bv.entry_point)) + '0x100014a8L' + >>> hex(bv.get_previous_basic_block_start_before(0x100014a8)) + '0x1000149fL' + >>> + """ + return core.BNGetPreviousBasicBlockStartBeforeAddress(self.handle, addr)
+ +
[docs] def get_previous_basic_block_end_before(self, addr): + """ + ``get_previous_basic_block_end_before`` + + :param int addr: the virtual address to start looking from. + :return: the virtual address of the previous BasicBlock end + :rtype: int + :Example: + >>> hex(bv.entry_point) + '0x1000149fL' + >>> hex(bv.get_next_basic_block_start_after(bv.entry_point)) + '0x100014a8L' + >>> hex(bv.get_previous_basic_block_end_before(0x100014a8)) + '0x100014a8L' + """ + return core.BNGetPreviousBasicBlockEndBeforeAddress(self.handle, addr)
+ +
[docs] def get_previous_data_before(self, addr): + """ + ``get_previous_data_before`` + + :param int addr: the virtual address to start looking from. + :return: the virtual address of the previous data (non-code) byte + :rtype: int + :Example: + + >>> hex(bv.get_previous_data_before(0x1000001)) + '0x1000000L' + >>> + """ + return core.BNGetPreviousDataBeforeAddress(self.handle, addr)
+ +
[docs] def get_previous_data_var_before(self, addr): + """ + ``get_previous_data_var_before`` + + :param int addr: the virtual address to start looking from. + :return: the virtual address of the previous :py:Class:`DataVariable` + :rtype: int + :Example: + + >>> hex(bv.get_previous_data_var_before(0x1000003c)) + '0x10000000L' + >>> bv.get_data_var_at(0x10000000) + <var 0x10000000: int16_t> + >>> + """ + return core.BNGetPreviousDataVariableBeforeAddress(self.handle, addr)
+ +
[docs] def get_linear_disassembly_position_at(self, addr, settings): + """ + ``get_linear_disassembly_position_at`` instantiates a :py:class:`LinearDisassemblyPosition` object for use in + :py:meth:`get_previous_linear_disassembly_lines` or :py:meth:`get_next_linear_disassembly_lines`. + + :param int addr: virtual address of linear disassembly position + :param DisassemblySettings settings: an instantiated :py:class:`DisassemblySettings` object + :return: An instantiated :py:class:`LinearDisassemblyPosition` object for the provided virtual address + :rtype: LinearDisassemblyPosition + :Example: + + >>> settings = DisassemblySettings() + >>> pos = bv.get_linear_disassembly_position_at(0x1000149f, settings) + >>> lines = bv.get_previous_linear_disassembly_lines(pos, settings) + >>> lines + [<0x1000149a: pop esi>, <0x1000149b: pop ebp>, + <0x1000149c: retn 0xc>, <0x1000149f: >] + """ + if settings is not None: + settings = settings.handle + pos = core.BNGetLinearDisassemblyPositionForAddress(self.handle, addr, settings) + func = None + block = None + if pos.function: + func = binaryninja.function.Function(self, pos.function) + if pos.block: + block = basicblock.BasicBlock(pos.block, self) + return lineardisassembly.LinearDisassemblyPosition(func, block, pos.address)
+ + def _get_linear_disassembly_lines(self, api, pos, settings): + pos_obj = core.BNLinearDisassemblyPosition() + pos_obj.function = None + pos_obj.block = None + pos_obj.address = pos.address + if pos.function is not None: + pos_obj.function = core.BNNewFunctionReference(pos.function.handle) + if pos.block is not None: + pos_obj.block = core.BNNewBasicBlockReference(pos.block.handle) + + if settings is not None: + settings = settings.handle + + count = ctypes.c_ulonglong(0) + lines = api(self.handle, pos_obj, settings, count) + + result = [] + for i in range(0, count.value): + func = None + block = None + if lines[i].function: + func = binaryninja.function.Function(self, core.BNNewFunctionReference(lines[i].function)) + if lines[i].block: + block = basicblock.BasicBlock(core.BNNewBasicBlockReference(lines[i].block), self) + color = highlight.HighlightColor._from_core_struct(lines[i].contents.highlight) + addr = lines[i].contents.addr + tokens = binaryninja.function.InstructionTextToken.get_instruction_lines(lines[i].contents.tokens, lines[i].contents.count) + contents = binaryninja.function.DisassemblyTextLine(tokens, addr, color = color) + result.append(lineardisassembly.LinearDisassemblyLine(lines[i].type, func, block, lines[i].lineOffset, contents)) + + func = None + block = None + if pos_obj.function: + func = binaryninja.function.Function(self, pos_obj.function) + if pos_obj.block: + block = basicblock.BasicBlock(pos_obj.block, self) + pos.function = func + pos.block = block + pos.address = pos_obj.address + + core.BNFreeLinearDisassemblyLines(lines, count.value) + return result + +
[docs] def get_previous_linear_disassembly_lines(self, pos, settings): + """ + ``get_previous_linear_disassembly_lines`` retrieves a list of :py:class:`LinearDisassemblyLine` objects for the + previous disassembly lines, and updates the LinearDisassemblyPosition passed in. This function can be called + repeatedly to get more lines of linear disassembly. + + :param LinearDisassemblyPosition pos: Position to start retrieving linear disassembly lines from + :param DisassemblySettings settings: DisassemblySettings display settings for the linear disassembly + :return: a list of :py:class:`LinearDisassemblyLine` objects for the previous lines. + :Example: + + >>> settings = DisassemblySettings() + >>> pos = bv.get_linear_disassembly_position_at(0x1000149a, settings) + >>> bv.get_previous_linear_disassembly_lines(pos, settings) + [<0x10001488: push dword [ebp+0x10 {arg_c}]>, ... , <0x1000149a: >] + >>> bv.get_previous_linear_disassembly_lines(pos, settings) + [<0x10001483: xor eax, eax {0x0}>, ... , <0x10001488: >] + """ + return self._get_linear_disassembly_lines(core.BNGetPreviousLinearDisassemblyLines, pos, settings)
+ +
[docs] def get_next_linear_disassembly_lines(self, pos, settings): + """ + ``get_next_linear_disassembly_lines`` retrieves a list of :py:class:`LinearDisassemblyLine` objects for the + next disassembly lines, and updates the LinearDisassemblyPosition passed in. This function can be called + repeatedly to get more lines of linear disassembly. + + :param LinearDisassemblyPosition pos: Position to start retrieving linear disassembly lines from + :param DisassemblySettings settings: DisassemblySettings display settings for the linear disassembly + :return: a list of :py:class:`LinearDisassemblyLine` objects for the next lines. + :Example: + + >>> settings = DisassemblySettings() + >>> pos = bv.get_linear_disassembly_position_at(0x10001483, settings) + >>> bv.get_next_linear_disassembly_lines(pos, settings) + [<0x10001483: xor eax, eax {0x0}>, <0x10001485: inc eax {0x1}>, ... , <0x10001488: >] + >>> bv.get_next_linear_disassembly_lines(pos, settings) + [<0x10001488: push dword [ebp+0x10 {arg_c}]>, ... , <0x1000149a: >] + >>> + """ + return self._get_linear_disassembly_lines(core.BNGetNextLinearDisassemblyLines, pos, settings)
+ +
[docs] def get_linear_disassembly(self, settings): + """ + ``get_linear_disassembly`` gets an iterator for all lines in the linear disassembly of the view for the given + disassembly settings. + + .. note:: linear_disassembly doesn't just return disassembly it will return a single line from the linear view,\ + and thus will contain both data views, and disassembly. + + :param DisassemblySettings settings: instance specifying the desired output formatting. + :return: An iterator containing formatted disassembly lines. + :rtype: LinearDisassemblyIterator + :Example: + + >>> settings = DisassemblySettings() + >>> lines = bv.get_linear_disassembly(settings) + >>> for line in lines: + ... print(line) + ... break + ... + cf fa ed fe 07 00 00 01 ........ + """ + class LinearDisassemblyIterator(object): + def __init__(self, view, settings): + self.view = view + self.settings = settings + + def __iter__(self): + pos = self.view.get_linear_disassembly_position_at(self.view.start, self.settings) + while True: + lines = self.view.get_next_linear_disassembly_lines(pos, self.settings) + if len(lines) == 0: + break + for line in lines: + yield line + + return iter(LinearDisassemblyIterator(self, settings))
+ +
[docs] def parse_type_string(self, text): + """ + ``parse_type_string`` converts `C-style` string into a :py:Class:`Type`. + + :param str text: `C-style` string of type to create + :return: A tuple of a :py:Class:`Type` and type name + :rtype: tuple(Type, QualifiedName) + :Example: + + >>> bv.parse_type_string("int foo") + (<type: int32_t>, 'foo') + >>> + """ + result = core.BNQualifiedNameAndType() + errors = ctypes.c_char_p() + if not core.BNParseTypeString(self.handle, text, result, errors): + error_str = errors.value + core.BNFreeString(ctypes.cast(errors, ctypes.POINTER(ctypes.c_byte))) + raise SyntaxError(error_str) + type_obj = types.Type(core.BNNewTypeReference(result.type), platform = self.platform) + name = types.QualifiedName._from_core_struct(result.name) + core.BNFreeQualifiedNameAndType(result) + return type_obj, name
+ +
[docs] def get_type_by_name(self, name): + """ + ``get_type_by_name`` returns the defined type whose name corresponds with the provided ``name`` + + :param QualifiedName name: Type name to lookup + :return: A :py:Class:`Type` or None if the type does not exist + :rtype: Type or None + :Example: + + >>> type, name = bv.parse_type_string("int foo") + >>> bv.define_user_type(name, type) + >>> bv.get_type_by_name(name) + <type: int32_t> + >>> + """ + name = types.QualifiedName(name)._get_core_struct() + obj = core.BNGetAnalysisTypeByName(self.handle, name) + if not obj: + return None + return types.Type(obj, platform = self.platform)
+ +
[docs] def get_type_by_id(self, id): + """ + ``get_type_by_id`` returns the defined type whose unique identifier corresponds with the provided ``id`` + + :param str id: Unique identifier to lookup + :return: A :py:Class:`Type` or None if the type does not exist + :rtype: Type or None + :Example: + + >>> type, name = bv.parse_type_string("int foo") + >>> type_id = Type.generate_auto_type_id("source", name) + >>> bv.define_type(type_id, name, type) + >>> bv.get_type_by_id(type_id) + <type: int32_t> + >>> + """ + obj = core.BNGetAnalysisTypeById(self.handle, id) + if not obj: + return None + return types.Type(obj, platform = self.platform)
+ +
[docs] def get_type_name_by_id(self, id): + """ + ``get_type_name_by_id`` returns the defined type name whose unique identifier corresponds with the provided ``id`` + + :param str id: Unique identifier to lookup + :return: A QualifiedName or None if the type does not exist + :rtype: QualifiedName or None + :Example: + + >>> type, name = bv.parse_type_string("int foo") + >>> type_id = Type.generate_auto_type_id("source", name) + >>> bv.define_type(type_id, name, type) + 'foo' + >>> bv.get_type_name_by_id(type_id) + 'foo' + >>> + """ + name = core.BNGetAnalysisTypeNameById(self.handle, id) + result = types.QualifiedName._from_core_struct(name) + core.BNFreeQualifiedName(name) + if len(result) == 0: + return None + return result
+ +
[docs] def get_type_id(self, name): + """ + ``get_type_id`` returns the unique identifier of the defined type whose name corresponds with the + provided ``name`` + + :param QualifiedName name: Type name to lookup + :return: The unique identifier of the type + :rtype: str + :Example: + + >>> type, name = bv.parse_type_string("int foo") + >>> type_id = Type.generate_auto_type_id("source", name) + >>> registered_name = bv.define_type(type_id, name, type) + >>> bv.get_type_id(registered_name) == type_id + True + >>> + """ + name = types.QualifiedName(name)._get_core_struct() + return core.BNGetAnalysisTypeId(self.handle, name)
+ +
[docs] def is_type_auto_defined(self, name): + """ + ``is_type_auto_defined`` queries the user type list of name. If name is not in the *user* type list then the name + is considered an *auto* type. + + :param QualifiedName name: Name of type to query + :return: True if the type is not a *user* type. False if the type is a *user* type. + :Example: + >>> bv.is_type_auto_defined("foo") + True + >>> bv.define_user_type("foo", bv.parse_type_string("struct {int x,y;}")[0]) + >>> bv.is_type_auto_defined("foo") + False + >>> + """ + name = types.QualifiedName(name)._get_core_struct() + return core.BNIsAnalysisTypeAutoDefined(self.handle, name)
+ +
[docs] def define_type(self, type_id, default_name, type_obj): + """ + ``define_type`` registers a :py:Class:`Type` ``type_obj`` of the given ``name`` in the global list of types for + the current :py:Class:`BinaryView`. This method should only be used for automatically generated types. + + :param str type_id: Unique identifier for the automatically generated type + :param QualifiedName default_name: Name of the type to be registered + :param Type type_obj: Type object to be registered + :return: Registered name of the type. May not be the same as the requested name if the user has renamed types. + :rtype: QualifiedName + :Example: + + >>> type, name = bv.parse_type_string("int foo") + >>> registered_name = bv.define_type(Type.generate_auto_type_id("source", name), name, type) + >>> bv.get_type_by_name(registered_name) + <type: int32_t> + """ + name = types.QualifiedName(default_name)._get_core_struct() + reg_name = core.BNDefineAnalysisType(self.handle, type_id, name, type_obj.handle) + result = types.QualifiedName._from_core_struct(reg_name) + core.BNFreeQualifiedName(reg_name) + return result
+ +
[docs] def define_user_type(self, name, type_obj): + """ + ``define_user_type`` registers a :py:Class:`Type` ``type_obj`` of the given ``name`` in the global list of user + types for the current :py:Class:`BinaryView`. + + :param QualifiedName name: Name of the user type to be registered + :param Type type_obj: Type object to be registered + :rtype: None + :Example: + + >>> type, name = bv.parse_type_string("int foo") + >>> bv.define_user_type(name, type) + >>> bv.get_type_by_name(name) + <type: int32_t> + """ + name = types.QualifiedName(name)._get_core_struct() + core.BNDefineUserAnalysisType(self.handle, name, type_obj.handle)
+ +
[docs] def undefine_type(self, type_id): + """ + ``undefine_type`` removes a :py:Class:`Type` from the global list of types for the current :py:Class:`BinaryView` + + :param str type_id: Unique identifier of type to be undefined + :rtype: None + :Example: + + >>> type, name = bv.parse_type_string("int foo") + >>> type_id = Type.generate_auto_type_id("source", name) + >>> bv.define_type(type_id, name, type) + >>> bv.get_type_by_name(name) + <type: int32_t> + >>> bv.undefine_type(type_id) + >>> bv.get_type_by_name(name) + >>> + """ + core.BNUndefineAnalysisType(self.handle, type_id)
+ +
[docs] def undefine_user_type(self, name): + """ + ``undefine_user_type`` removes a :py:Class:`Type` from the global list of user types for the current + :py:Class:`BinaryView` + + :param QualifiedName name: Name of user type to be undefined + :rtype: None + :Example: + + >>> type, name = bv.parse_type_string("int foo") + >>> bv.define_user_type(name, type) + >>> bv.get_type_by_name(name) + <type: int32_t> + >>> bv.undefine_user_type(name) + >>> bv.get_type_by_name(name) + >>> + """ + name = types.QualifiedName(name)._get_core_struct() + core.BNUndefineUserAnalysisType(self.handle, name)
+ +
[docs] def rename_type(self, old_name, new_name): + """ + ``rename_type`` renames a type in the global list of types for the current :py:Class:`BinaryView` + + :param QualifiedName old_name: Existing name of type to be renamed + :param QualifiedName new_name: New name of type to be renamed + :rtype: None + :Example: + + >>> type, name = bv.parse_type_string("int foo") + >>> bv.define_user_type(name, type) + >>> bv.get_type_by_name("foo") + <type: int32_t> + >>> bv.rename_type("foo", "bar") + >>> bv.get_type_by_name("bar") + <type: int32_t> + >>> + """ + old_name = types.QualifiedName(old_name)._get_core_struct() + new_name = types.QualifiedName(new_name)._get_core_struct() + core.BNRenameAnalysisType(self.handle, old_name, new_name)
+ +
[docs] def register_platform_types(self, platform): + """ + ``register_platform_types`` ensures that the platform-specific types for a :py:Class:`Platform` are available + for the current :py:Class:`BinaryView`. This is automatically performed when adding a new function or setting + the default platform. + + :param Platform platform: Platform containing types to be registered + :rtype: None + :Example: + + >>> platform = Platform["linux-x86"] + >>> bv.register_platform_types(platform) + >>> + """ + core.BNRegisterPlatformTypes(self.handle, platform.handle)
+ +
[docs] def find_next_data(self, start, data, flags=FindFlag.FindCaseSensitive): + """ + ``find_next_data`` searches for the bytes ``data`` starting at the virtual address ``start`` until the end of the BinaryView. + + :param int start: virtual address to start searching from. + :param str data: data to search for + :param FindFlag flags: (optional) defaults to case-insensitive data search + + ==================== ============================ + FindFlag Description + ==================== ============================ + FindCaseSensitive Case-sensitive search + FindCaseInsensitive Case-insensitive search + ===================== ============================ + """ + buf = databuffer.DataBuffer(str(data)) + result = ctypes.c_ulonglong() + if not core.BNFindNextData(self.handle, start, buf.handle, result, flags): + return None + return result.value
+ + +
[docs] def find_next_text(self, start, text, settings=None, flags=FindFlag.FindCaseSensitive): + """ + ``find_next_text`` searches for string ``text`` occurring in the linear view output starting at the virtual + address ``start`` until the end of the BinaryView. + + :param int start: virtual address to start searching from. + :param str text: text to search for + :param FindFlag flags: (optional) defaults to case-insensitive data search + + ==================== ============================ + FindFlag Description + ==================== ============================ + FindCaseSensitive Case-sensitive search + FindCaseInsensitive Case-insensitive search + ===================== ============================ + """ + if not isinstance(text, str): + raise TypeError("text parameter is not str type") + if settings is None: + settings = function.DisassemblySettings() + if not isinstance(settings, function.DisassemblySettings): + raise TypeError("settings parameter is not DisassemblySettings type") + + result = ctypes.c_ulonglong() + if not core.BNFindNextText(self.handle, start, text, result, settings.handle, flags): + return None + return result.value
+ +
[docs] def find_next_constant(self, start, constant, settings=None): + """ + ``find_next_constant`` searches for integer constant ``constant`` occurring in the linear view output starting at the virtual + address ``start`` until the end of the BinaryView. + + :param int start: virtual address to start searching from. + :param int constant: constant to search for + """ + if not isinstance(constant, numbers.Integral): + raise TypeError("constant parameter is not integral type") + if settings is None: + settings = function.DisassemblySettings() + if not isinstance(settings, function.DisassemblySettings): + raise TypeError("settings parameter is not DisassemblySettings type") + + result = ctypes.c_ulonglong() + if not core.BNFindNextConstant(self.handle, start, constant, result, settings.handle): + return None + return result.value
+ +
[docs] def reanalyze(self): + """ + ``reanalyze`` causes all functions to be reanalyzed. This function does not wait for the analysis to finish. + + :rtype: None + """ + core.BNReanalyzeAllFunctions(self.handle)
+ +
[docs] def show_plain_text_report(self, title, contents): + core.BNShowPlainTextReport(self.handle, title, contents)
+ +
[docs] def show_markdown_report(self, title, contents, plaintext = ""): + """ + ``show_markdown_report`` displays the markdown contents in UI applications and plaintext in command-line + applications. Markdown reports support hyperlinking into the BinaryView. Hyperlinks can be specified as follows: + ``binaryninja://?expr=_start`` Where ``expr=`` specifies an expression parsable by the `parse_expression` API. + + Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line + a simple text prompt is used. + + :param str contents: markdown contents to display + :param str plaintext: Plain text version to display (used on the command-line) + :rtype: None + :Example: + >>> bv.show_markdown_report("title", "##Contents", "Plain text contents") + Plain text contents + """ + core.BNShowMarkdownReport(self.handle, title, contents, plaintext)
+ +
[docs] def show_html_report(self, title, contents, plaintext = ""): + """ + ``show_html_report`` displays the HTML contents in UI applications and plaintext in command-line + applications. HTML reports support hyperlinking into the BinaryView. Hyperlinks can be specified as follows: + ``binaryninja://?expr=_start`` Where ``expr=`` specifies an expression parsable by the `parse_expression` API. + + Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line + a simple text prompt is used. + + :param str contents: HTML contents to display + :param str plaintext: Plain text version to display (used on the command-line) + :rtype: None + :Example: + >>> bv.show_html_report("title", "<h1>Contents</h1>", "Plain text contents") + Plain text contents + """ + core.BNShowHTMLReport(self.handle, title, contents, plaintext)
+ +
[docs] def show_graph_report(self, title, graph): + core.BNShowHTMLReport(self.handle, title, graph.handle)
+ +
[docs] def get_address_input(self, prompt, title, current_address = None): + if current_address is None: + current_address = self.file.offset + value = ctypes.c_ulonglong() + if not core.BNGetAddressInput(value, prompt, title, self.handle, current_address): + return None + return value.value
+ +
[docs] def add_auto_segment(self, start, length, data_offset, data_length, flags): + core.BNAddAutoSegment(self.handle, start, length, data_offset, data_length, flags)
+ +
[docs] def remove_auto_segment(self, start, length): + core.BNRemoveAutoSegment(self.handle, start, length)
+ +
[docs] def add_user_segment(self, start, length, data_offset, data_length, flags): + core.BNAddUserSegment(self.handle, start, length, data_offset, data_length, flags)
+ +
[docs] def remove_user_segment(self, start, length): + core.BNRemoveUserSegment(self.handle, start, length)
+ +
[docs] def get_segment_at(self, addr): + seg = core.BNGetSegmentAt(self.handle, addr) + if not seg: + return None + return Segment(core.BNNewSegmentReference(seg))
+ +
[docs] def get_address_for_data_offset(self, offset): + address = ctypes.c_ulonglong() + if not core.BNGetAddressForDataOffset(self.handle, offset, address): + return None + return address.value
+ +
[docs] def add_auto_section(self, name, start, length, semantics = SectionSemantics.DefaultSectionSemantics, + type = "", align = 1, entry_size = 1, linked_section = "", info_section = "", info_data = 0): + core.BNAddAutoSection(self.handle, name, start, length, semantics, type, align, entry_size, linked_section, + info_section, info_data)
+ +
[docs] def remove_auto_section(self, name): + core.BNRemoveAutoSection(self.handle, name)
+ +
[docs] def add_user_section(self, name, start, length, semantics = SectionSemantics.DefaultSectionSemantics, + type = "", align = 1, entry_size = 1, linked_section = "", info_section = "", info_data = 0): + core.BNAddUserSection(self.handle, name, start, length, semantics, type, align, entry_size, linked_section, + info_section, info_data)
+ +
[docs] def remove_user_section(self, name): + core.BNRemoveUserSection(self.handle, name)
+ +
[docs] def get_sections_at(self, addr): + count = ctypes.c_ulonglong(0) + section_list = core.BNGetSectionsAt(self.handle, addr, count) + result = [] + for i in range(0, count.value): + result.append(Section(core.BNNewSectionReference(section_list[i]))) + core.BNFreeSectionList(section_list, count.value) + return result
+ +
[docs] def get_section_by_name(self, name): + section = core.BNGetSectionByName(self.handle, name) + if not section: + return None + result = Section(core.BNNewSectionReference(section)) + return result
+ +
[docs] def get_unique_section_names(self, name_list): + incoming_names = (ctypes.c_char_p * len(name_list))() + for i in range(0, len(name_list)): + incoming_names[i] = binaryninja.cstr(name_list[i]) + outgoing_names = core.BNGetUniqueSectionNames(self.handle, incoming_names, len(name_list)) + result = [] + for i in range(0, len(name_list)): + result.append(str(outgoing_names[i])) + core.BNFreeStringList(outgoing_names, len(name_list)) + return result
+ +
[docs] def query_metadata(self, key): + """ + `query_metadata` retrieves a metadata associated with the given key stored in the current BinaryView. + + :param string key: key to query + :rtype: metadata associated with the key + :Example: + + >>> bv.store_metadata("integer", 1337) + >>> bv.query_metadata("integer") + 1337L + >>> bv.store_metadata("list", [1,2,3]) + >>> bv.query_metadata("list") + [1L, 2L, 3L] + >>> bv.store_metadata("string", "my_data") + >>> bv.query_metadata("string") + 'my_data' + """ + md_handle = core.BNBinaryViewQueryMetadata(self.handle, key) + if md_handle is None: + raise KeyError(key) + return metadata.Metadata(handle=md_handle).value
+ +
[docs] def store_metadata(self, key, md): + """ + `store_metadata` stores an object for the given key in the current BinaryView. Objects stored using + `store_metadata` can be retrieved when the database is reopened. Objects stored are not arbitrary python + objects! The values stored must be able to be held in a Metadata object. See :py:class:`Metadata` + for more information. Python objects could obviously be serialized using pickle but this intentionally + a task left to the user since there is the potential security issues. + + :param string key: key value to associate the Metadata object with + :param Varies md: object to store. + :rtype: None + :Example: + + >>> bv.store_metadata("integer", 1337) + >>> bv.query_metadata("integer") + 1337L + >>> bv.store_metadata("list", [1,2,3]) + >>> bv.query_metadata("list") + [1L, 2L, 3L] + >>> bv.store_metadata("string", "my_data") + >>> bv.query_metadata("string") + 'my_data' + """ + if not isinstance(md, metadata.Metadata): + md = metadata.Metadata(md) + core.BNBinaryViewStoreMetadata(self.handle, key, md.handle)
+ +
[docs] def remove_metadata(self, key): + """ + `remove_metadata` removes the metadata associated with key from the current BinaryView. + + :param string key: key associated with metadata to remove from the BinaryView + :rtype: None + :Example: + + >>> bv.store_metadata("integer", 1337) + >>> bv.remove_metadata("integer") + """ + core.BNBinaryViewRemoveMetadata(self.handle, key)
+ + def __setattr__(self, name, value): + try: + object.__setattr__(self, name, value) + except AttributeError: + raise AttributeError("attribute '%s' is read only" % name) + +
[docs] def parse_expression(self, expression, here=0): + """ + Evaluates an string expression to an integer value. + + The parser uses the following rules: + - symbols are defined by the lexer as `[A-Za-z0-9_:<>][A-Za-z0-9_:$\-<>]+` or anything enclosed in either single or + double quotes + - Numbers are defaulted to hexadecimal thus `_printf + 10` is equivalent to `printf + 0x10` If decimal numbers required use the decimal prefix. + - Since numbers and symbols can be ambiguous its recommended that you prefix your numbers with the following: + - 0x - Hexadecimal + - 0n - Decimal + - 0 - Octal + - In the case of an ambiguous number/symbol (one with no prefix) for instance `12345` we will first attempt + to look up the string as a symbol, if a symbol is found its address is used, otherwise we attempt to convert + it to a hexadecimal number. + - The following operations are valid: +, -, *, /, %, (), &, |, ^, ~ + - In addition to the above operators there are _il-style_ dereference operators + - [<expression>] - read the _current address size_ at <expression> + - [<expression>].b - read the byte at <expression> + - [<expression>].w - read the word (2 bytes) at <expression> + - [<expression>].d - read the dword (4 bytes) at <expression> + - [<expression>].q - read the quadword (8 bytes) at <expression> + - The `$here` keyword can be used in calculations and is defined as the `here` parameter + + :param string expression: Arithmetic expression to be evaluated + :param int here: (optional) Base address for relative expressions, defaults to zero + :rtype: int + """ + offset = ctypes.c_ulonglong() + errors = ctypes.c_char_p() + if not core.BNParseExpression(self.handle, expression, offset, here, errors): + error_str = errors.value + core.BNFreeString(ctypes.cast(errors, ctypes.POINTER(ctypes.c_byte))) + raise ValueError(error_str) + return offset.value
+ +
[docs] def eval(self, expression, here=0): + """ + Evaluates an string expression to an integer value. This is a more concise alias for the `parse_expression` API + See `parse_expression` for details on usage. + """ + return self.parse_expression(expression, here)
+ + +
[docs]class BinaryReader(object): + """ + ``class BinaryReader`` is a convenience class for reading binary data. + + BinaryReader can be instantiated as follows and the rest of the document will start from this context :: + + >>> from binaryninja import * + >>> bv = BinaryViewType['Mach-O'].open("/bin/ls") + >>> br = BinaryReader(bv) + >>> hex(br.read32()) + '0xfeedfacfL' + >>> + + Or using the optional endian parameter :: + + >>> from binaryninja import * + >>> br = BinaryReader(bv, Endianness.BigEndian) + >>> hex(br.read32()) + '0xcffaedfeL' + >>> + """ +
[docs] def __init__(self, view, endian = None): + self.handle = core.BNCreateBinaryReader(view.handle) + if endian is None: + core.BNSetBinaryReaderEndianness(self.handle, view.endianness) + else: + core.BNSetBinaryReaderEndianness(self.handle, endian)
+ + def __del__(self): + core.BNFreeBinaryReader(self.handle) + + def __eq__(self, value): + if not isinstance(value, BinaryReader): + return False + return ctypes.addressof(self.handle.contents) == ctypes.addressof(value.handle.contents) + + def __ne__(self, value): + if not isinstance(value, BinaryReader): + return True + return ctypes.addressof(self.handle.contents) != ctypes.addressof(value.handle.contents) + + @property + def endianness(self): + """ + The Endianness to read data. (read/write) + + :getter: returns the endianness of the reader + :setter: sets the endianness of the reader (BigEndian or LittleEndian) + :type: Endianness + """ + return core.BNGetBinaryReaderEndianness(self.handle) + + @endianness.setter + def endianness(self, value): + core.BNSetBinaryReaderEndianness(self.handle, value) + + @property + def offset(self): + """ + The current read offset (read/write). + + :getter: returns the current internal offset + :setter: sets the internal offset + :type: int + """ + return core.BNGetReaderPosition(self.handle) + + @offset.setter + def offset(self, value): + core.BNSeekBinaryReader(self.handle, value) + + @property + def eof(self): + """ + Is end of file (read-only) + + :getter: returns boolean, true if end of file, false otherwise + :type: bool + """ + return core.BNIsEndOfFile(self.handle) + +
[docs] def read(self, length): + """ + ``read`` returns ``length`` bytes read from the current offset, adding ``length`` to offset. + + :param int length: number of bytes to read. + :return: ``length`` bytes from current offset + :rtype: str, or None on failure + :Example: + + >>> br.read(8) + '\\xcf\\xfa\\xed\\xfe\\x07\\x00\\x00\\x01' + >>> + """ + dest = ctypes.create_string_buffer(length) + if not core.BNReadData(self.handle, dest, length): + return None + return dest.raw
+ +
[docs] def read8(self): + """ + ``read8`` returns a one byte integer from offset incrementing the offset. + + :return: byte at offset. + :rtype: int, or None on failure + :Example: + + >>> br.seek(0x100000000) + >>> br.read8() + 207 + >>> + """ + result = ctypes.c_ubyte() + if not core.BNRead8(self.handle, result): + return None + return result.value
+ +
[docs] def read16(self): + """ + ``read16`` returns a two byte integer from offset incrementing the offset by two, using specified endianness. + + :return: a two byte integer at offset. + :rtype: int, or None on failure + :Example: + + >>> br.seek(0x100000000) + >>> hex(br.read16()) + '0xfacf' + >>> + """ + result = ctypes.c_ushort() + if not core.BNRead16(self.handle, result): + return None + return result.value
+ +
[docs] def read32(self): + """ + ``read32`` returns a four byte integer from offset incrementing the offset by four, using specified endianness. + + :return: a four byte integer at offset. + :rtype: int, or None on failure + :Example: + + >>> br.seek(0x100000000) + >>> hex(br.read32()) + '0xfeedfacfL' + >>> + """ + result = ctypes.c_uint() + if not core.BNRead32(self.handle, result): + return None + return result.value
+ +
[docs] def read64(self): + """ + ``read64`` returns an eight byte integer from offset incrementing the offset by eight, using specified endianness. + + :return: an eight byte integer at offset. + :rtype: int, or None on failure + :Example: + + >>> br.seek(0x100000000) + >>> hex(br.read64()) + '0x1000007feedfacfL' + >>> + """ + result = ctypes.c_ulonglong() + if not core.BNRead64(self.handle, result): + return None + return result.value
+ +
[docs] def read16le(self): + """ + ``read16le`` returns a two byte little endian integer from offset incrementing the offset by two. + + :return: a two byte integer at offset. + :rtype: int, or None on failure + :Exmaple: + + >>> br.seek(0x100000000) + >>> hex(br.read16le()) + '0xfacf' + >>> + """ + result = self.read(2) + if (result is None) or (len(result) != 2): + return None + return struct.unpack("<H", result)[0]
+ +
[docs] def read32le(self): + """ + ``read32le`` returns a four byte little endian integer from offset incrementing the offset by four. + + :return: a four byte integer at offset. + :rtype: int, or None on failure + :Example: + + >>> br.seek(0x100000000) + >>> hex(br.read32le()) + '0xfeedfacf' + >>> + """ + result = self.read(4) + if (result is None) or (len(result) != 4): + return None + return struct.unpack("<I", result)[0]
+ +
[docs] def read64le(self): + """ + ``read64le`` returns an eight byte little endian integer from offset incrementing the offset by eight. + + :return: a eight byte integer at offset. + :rtype: int, or None on failure + :Example: + + >>> br.seek(0x100000000) + >>> hex(br.read64le()) + '0x1000007feedfacf' + >>> + """ + result = self.read(8) + if (result is None) or (len(result) != 8): + return None + return struct.unpack("<Q", result)[0]
+ +
[docs] def read16be(self): + """ + ``read16be`` returns a two byte big endian integer from offset incrementing the offset by two. + + :return: a two byte integer at offset. + :rtype: int, or None on failure + :Example: + + >>> br.seek(0x100000000) + >>> hex(br.read16be()) + '0xcffa' + >>> + """ + result = self.read(2) + if (result is None) or (len(result) != 2): + return None + return struct.unpack(">H", result)[0]
+ +
[docs] def read32be(self): + """ + ``read32be`` returns a four byte big endian integer from offset incrementing the offset by four. + + :return: a four byte integer at offset. + :rtype: int, or None on failure + :Example: + + >>> br.seek(0x100000000) + >>> hex(br.read32be()) + '0xcffaedfe' + >>> + """ + result = self.read(4) + if (result is None) or (len(result) != 4): + return None + return struct.unpack(">I", result)[0]
+ +
[docs] def read64be(self): + """ + ``read64be`` returns an eight byte big endian integer from offset incrementing the offset by eight. + + :return: a eight byte integer at offset. + :rtype: int, or None on failure + :Example: + + >>> br.seek(0x100000000) + >>> hex(br.read64be()) + '0xcffaedfe07000001L' + """ + result = self.read(8) + if (result is None) or (len(result) != 8): + return None + return struct.unpack(">Q", result)[0]
+ +
[docs] def seek(self, offset): + """ + ``seek`` update internal offset to ``offset``. + + :param int offset: offset to set the internal offset to + :rtype: None + :Example: + + >>> hex(br.offset) + '0x100000008L' + >>> br.seek(0x100000000) + >>> hex(br.offset) + '0x100000000L' + >>> + """ + core.BNSeekBinaryReader(self.handle, offset)
+ +
[docs] def seek_relative(self, offset): + """ + ``seek_relative`` updates the internal offset by ``offset``. + + :param int offset: offset to add to the internal offset + :rtype: None + :Example: + + >>> hex(br.offset) + '0x100000008L' + >>> br.seek_relative(-8) + >>> hex(br.offset) + '0x100000000L' + >>> + """ + core.BNSeekBinaryReaderRelative(self.handle, offset)
+ + def __setattr__(self, name, value): + try: + object.__setattr__(self, name, value) + except AttributeError: + raise AttributeError("attribute '%s' is read only" % name)
+ + +
[docs]class BinaryWriter(object): + """ + ``class BinaryWriter`` is a convenience class for writing binary data. + + BinaryWriter can be instantiated as follows and the rest of the document will start from this context :: + + >>> from binaryninja import * + >>> bv = BinaryViewType['Mach-O'].open("/bin/ls") + >>> br = BinaryReader(bv) + >>> bw = BinaryWriter(bv) + >>> + + Or using the optional endian parameter :: + + >>> from binaryninja import * + >>> br = BinaryReader(bv, Endianness.BigEndian) + >>> bw = BinaryWriter(bv, Endianness.BigEndian) + >>> + """ +
[docs] def __init__(self, view, endian = None): + self.handle = core.BNCreateBinaryWriter(view.handle) + if endian is None: + core.BNSetBinaryWriterEndianness(self.handle, view.endianness) + else: + core.BNSetBinaryWriterEndianness(self.handle, endian)
+ + def __del__(self): + core.BNFreeBinaryWriter(self.handle) + + def __eq__(self, value): + if not isinstance(value, BinaryWriter): + return False + return ctypes.addressof(self.handle.contents) == ctypes.addressof(value.handle.contents) + + def __ne__(self, value): + if not isinstance(value, BinaryWriter): + return True + return ctypes.addressof(self.handle.contents) != ctypes.addressof(value.handle.contents) + + @property + def endianness(self): + """ + The Endianness to written data. (read/write) + + :getter: returns the endianness of the reader + :setter: sets the endianness of the reader (BigEndian or LittleEndian) + :type: Endianness + """ + return core.BNGetBinaryWriterEndianness(self.handle) + + @endianness.setter + def endianness(self, value): + core.BNSetBinaryWriterEndianness(self.handle, value) + + @property + def offset(self): + """ + The current write offset (read/write). + + :getter: returns the current internal offset + :setter: sets the internal offset + :type: int + """ + return core.BNGetWriterPosition(self.handle) + + @offset.setter + def offset(self, value): + core.BNSeekBinaryWriter(self.handle, value) + +
[docs] def write(self, value): + """ + ``write`` writes ``len(value)`` bytes to the internal offset, without regard to endianness. + + :param str value: bytes to be written at current offset + :return: boolean True on success, False on failure. + :rtype: bool + :Example: + + >>> bw.write("AAAA") + True + >>> br.read(4) + 'AAAA' + >>> + """ + value = str(value) + buf = ctypes.create_string_buffer(len(value)) + ctypes.memmove(buf, value, len(value)) + return core.BNWriteData(self.handle, buf, len(value))
+ +
[docs] def write8(self, value): + """ + ``write8`` lowest order byte from the integer ``value`` to the current offset. + + :param str value: bytes to be written at current offset + :return: boolean + :rtype: int + :Example: + + >>> bw.write8(0x42) + True + >>> br.read(1) + 'B' + >>> + """ + return core.BNWrite8(self.handle, value)
+ +
[docs] def write16(self, value): + """ + ``write16`` writes the lowest order two bytes from the integer ``value`` to the current offset, using internal endianness. + + :param int value: integer value to write. + :return: boolean True on success, False on failure. + :rtype: bool + """ + return core.BNWrite16(self.handle, value)
+ +
[docs] def write32(self, value): + """ + ``write32`` writes the lowest order four bytes from the integer ``value`` to the current offset, using internal endianness. + + :param int value: integer value to write. + :return: boolean True on success, False on failure. + :rtype: bool + """ + return core.BNWrite32(self.handle, value)
+ +
[docs] def write64(self, value): + """ + ``write64`` writes the lowest order eight bytes from the integer ``value`` to the current offset, using internal endianness. + + :param int value: integer value to write. + :return: boolean True on success, False on failure. + :rtype: bool + """ + return core.BNWrite64(self.handle, value)
+ +
[docs] def write16le(self, value): + """ + ``write16le`` writes the lowest order two bytes from the little endian integer ``value`` to the current offset. + + :param int value: integer value to write. + :return: boolean True on success, False on failure. + :rtype: bool + """ + value = struct.pack("<H", value) + return self.write(value)
+ +
[docs] def write32le(self, value): + """ + ``write32le`` writes the lowest order four bytes from the little endian integer ``value`` to the current offset. + + :param int value: integer value to write. + :return: boolean True on success, False on failure. + :rtype: bool + """ + value = struct.pack("<I", value) + return self.write(value)
+ +
[docs] def write64le(self, value): + """ + ``write64le`` writes the lowest order eight bytes from the little endian integer ``value`` to the current offset. + + :param int value: integer value to write. + :return: boolean True on success, False on failure. + :rtype: bool + """ + value = struct.pack("<Q", value) + return self.write(value)
+ +
[docs] def write16be(self, value): + """ + ``write16be`` writes the lowest order two bytes from the big endian integer ``value`` to the current offset. + + :param int value: integer value to write. + :return: boolean True on success, False on failure. + :rtype: bool + """ + value = struct.pack(">H", value) + return self.write(value)
+ +
[docs] def write32be(self, value): + """ + ``write32be`` writes the lowest order four bytes from the big endian integer ``value`` to the current offset. + + :param int value: integer value to write. + :return: boolean True on success, False on failure. + :rtype: bool + """ + value = struct.pack(">I", value) + return self.write(value)
+ +
[docs] def write64be(self, value): + """ + ``write64be`` writes the lowest order eight bytes from the big endian integer ``value`` to the current offset. + + :param int value: integer value to write. + :return: boolean True on success, False on failure. + :rtype: bool + """ + value = struct.pack(">Q", value) + return self.write(value)
+ +
[docs] def seek(self, offset): + """ + ``seek`` update internal offset to ``offset``. + + :param int offset: offset to set the internal offset to + :rtype: None + :Example: + + >>> hex(bw.offset) + '0x100000008L' + >>> bw.seek(0x100000000) + >>> hex(bw.offset) + '0x100000000L' + >>> + """ + core.BNSeekBinaryWriter(self.handle, offset)
+ +
[docs] def seek_relative(self, offset): + """ + ``seek_relative`` updates the internal offset by ``offset``. + + :param int offset: offset to add to the internal offset + :rtype: None + :Example: + + >>> hex(bw.offset) + '0x100000008L' + >>> bw.seek_relative(-8) + >>> hex(bw.offset) + '0x100000000L' + >>> + """ + core.BNSeekBinaryWriterRelative(self.handle, offset)
+ +
[docs]class StructuredDataValue(object): +
[docs] def __init__(self, type, address, value): + self._type = type + self._address = address + self._value = value
+ + @property + def type(self): + return self._type + + @property + def width(self): + return self._type.width + + @property + def address(self): + return self._address + + @property + def value(self): + return self._value + + @property + def int(self): + return int(self) + + @property + def str(self): + return str(self) + + def __int__(self): + if self._type.width == 1: + code = "B" + elif self._type.width == 2: + code = "H" + elif self._type.width == 4: + code = "I" + elif self._type.width == 8: + code = "Q" + else: + raise Exception("Could not convert to integer with width {}".format(self._type.width)) + + return struct.unpack(code, self._value)[0] + + def __str__(self): + decode_str = "{}B".format(self._type.width) + return ' '.join(["{:02x}".format(x) for x in struct.unpack(decode_str, self._value)]) + + def __repr__(self): + return "<StructuredDataValue type:{} value:{}>".format(str(self._type), str(self))
+ + +
[docs]class StructuredDataView(object): + """ + ``class StructuredDataView`` is a convenience class for reading structured binary data. + + StructuredDataView can be instantiated as follows: + + >>> from binaryninja import * + >>> bv = BinaryViewType['Mach-O'].open("/bin/ls") + >>> structure = "Elf64_Header" + >>> address = bv.start + >>> elf = StructuredDataView(bv, structure, address) + >>> + + Once instantiated, members can be accessed: + + >>> print("{:x}".format(elf.machine)) + 003e + >>> + + """ + _structure = None + _structure_name = None + _address = 0 + _bv = None + _members = OrderedDict() + +
[docs] def __init__(self, bv, structure_name, address): + self._bv = bv + self._structure_name = structure_name + self._address = address + + self._lookup_structure() + self._define_members()
+ + def _lookup_structure(self): + s = self._bv.types.get(self._structure_name, None) + if s is None: + raise Exception("Could not find structure with name: {}".format(self._structure_name)) + + if s.type_class != TypeClass.StructureTypeClass: + raise Exception("{} is not a StructureTypeClass, got: {}".format(self._structure_name, s._type_class)) + + self._structure = s.structure + + def _define_members(self): + for m in self._structure.members: + self._members[m.name] = m + + def __getattr__(self, key): + m = self._members.get(key, None) + if m is None: + return self.__getattribute__(key) + + return self[key] + + def __getitem__(self, key): + m = self._members.get(key, None) + if m is None: + return super(StructuredDataView, self).__getitem__(key) + + ty = m.type + offset = m.offset + width = ty.width + + value = self._bv.read(self._address + offset, width) + return StructuredDataValue(ty, self._address + offset, value) + + def __str__(self): + rv = "struct {name} 0x{addr:x} {{\n".format(name=self._structure_name, addr=self._address) + for k in self._members: + m = self._members[k] + + ty = m.type + offset = m.offset + + formatted_offset = "{:=+x}".format(offset) + formatted_type = "{:s} {:s}".format(str(ty), k) + + value = self[k] + if value.width in (1, 2, 4, 8): + formatted_value = str.zfill("{:x}".format(value.int), value.width * 2) + else: + formatted_value = str(value) + + rv += "\t{:>6s} {:40s} = {:30s}\n".format(formatted_offset, formatted_type, formatted_value) + + rv += "}\n" + + return rv + + def __repr__(self): + return "<StructuredDataView type:{} size:{:#x} address:{:#x}>".format(self._structure_name, + self._structure.width, self._address)
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/callingconvention.html b/personal/api-docs/_modules/binaryninja/callingconvention.html new file mode 100644 index 0000000..606044e --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/callingconvention.html @@ -0,0 +1,691 @@ + + + + + + + + + + + binaryninja.callingconvention — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.callingconvention

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+import traceback
+import ctypes
+
+# Binary Ninja components
+import binaryninja
+from binaryninja import _binaryninjacore as core
+from binaryninja import log
+from binaryninja.enums import VariableSourceType
+
+# 2-3 compatibility
+from binaryninja import range
+
+
+
[docs]class CallingConvention(object): + name = None + caller_saved_regs = [] + callee_saved_regs = [] + int_arg_regs = [] + float_arg_regs = [] + arg_regs_share_index = False + stack_reserved_for_arg_regs = False + stack_adjusted_on_return = False + int_return_reg = None + high_int_return_reg = None + float_return_reg = None + global_pointer_reg = None + implicitly_defined_regs = [] + + _registered_calling_conventions = [] + +
[docs] def __init__(self, arch=None, name=None, handle=None, confidence=binaryninja.types.max_confidence): + if handle is None: + if arch is None or name is None: + self.handle = None + raise ValueError("Must specify either handle or architecture and name") + self.arch = arch + self._pending_reg_lists = {} + self._cb = core.BNCustomCallingConvention() + self._cb.context = 0 + self._cb.getCallerSavedRegisters = self._cb.getCallerSavedRegisters.__class__(self._get_caller_saved_regs) + self._cb.getCalleeSavedRegisters = self._cb.getCalleeSavedRegisters.__class__(self._get_callee_saved_regs) + self._cb.getIntegerArgumentRegisters = self._cb.getIntegerArgumentRegisters.__class__(self._get_int_arg_regs) + self._cb.getFloatArgumentRegisters = self._cb.getFloatArgumentRegisters.__class__(self._get_float_arg_regs) + self._cb.freeRegisterList = self._cb.freeRegisterList.__class__(self._free_register_list) + self._cb.areArgumentRegistersSharedIndex = self._cb.areArgumentRegistersSharedIndex.__class__(self._arg_regs_share_index) + self._cb.isStackReservedForArgumentRegisters = self._cb.isStackReservedForArgumentRegisters.__class__(self._stack_reserved_for_arg_regs) + self._cb.isStackAdjustedOnReturn = self._cb.isStackAdjustedOnReturn.__class__(self._stack_adjusted_on_return) + self._cb.getIntegerReturnValueRegister = self._cb.getIntegerReturnValueRegister.__class__(self._get_int_return_reg) + self._cb.getHighIntegerReturnValueRegister = self._cb.getHighIntegerReturnValueRegister.__class__(self._get_high_int_return_reg) + self._cb.getFloatReturnValueRegister = self._cb.getFloatReturnValueRegister.__class__(self._get_float_return_reg) + self._cb.getGlobalPointerRegister = self._cb.getGlobalPointerRegister.__class__(self._get_global_pointer_reg) + self._cb.getImplicitlyDefinedRegisters = self._cb.getImplicitlyDefinedRegisters.__class__(self._get_implicitly_defined_regs) + self._cb.getIncomingRegisterValue = self._cb.getIncomingRegisterValue.__class__(self._get_incoming_reg_value) + self._cb.getIncomingFlagValue = self._cb.getIncomingFlagValue.__class__(self._get_incoming_flag_value) + self._cb.getIncomingVariableForParameterVariable = self._cb.getIncomingVariableForParameterVariable.__class__(self._get_incoming_var_for_parameter_var) + self._cb.getParameterVariableForIncomingVariable = self._cb.getParameterVariableForIncomingVariable.__class__(self._get_parameter_var_for_incoming_var) + self.handle = core.BNCreateCallingConvention(arch.handle, name, self._cb) + self.__class__._registered_calling_conventions.append(self) + else: + self.handle = handle + self.arch = binaryninja.architecture.CoreArchitecture._from_cache(core.BNGetCallingConventionArchitecture(self.handle)) + self.__dict__["name"] = core.BNGetCallingConventionName(self.handle) + self.__dict__["arg_regs_share_index"] = core.BNAreArgumentRegistersSharedIndex(self.handle) + self.__dict__["stack_reserved_for_arg_regs"] = core.BNIsStackReservedForArgumentRegisters(self.handle) + self.__dict__["stack_adjusted_on_return"] = core.BNIsStackAdjustedOnReturn(self.handle) + + count = ctypes.c_ulonglong() + regs = core.BNGetCallerSavedRegisters(self.handle, count) + result = [] + arch = self.arch + for i in range(0, count.value): + result.append(arch.get_reg_name(regs[i])) + core.BNFreeRegisterList(regs, count.value) + self.__dict__["caller_saved_regs"] = result + + count = ctypes.c_ulonglong() + regs = core.BNGetCalleeSavedRegisters(self.handle, count) + result = [] + arch = self.arch + for i in range(0, count.value): + result.append(arch.get_reg_name(regs[i])) + core.BNFreeRegisterList(regs, count.value) + self.__dict__["callee_saved_regs"] = result + + count = ctypes.c_ulonglong() + regs = core.BNGetIntegerArgumentRegisters(self.handle, count) + result = [] + arch = self.arch + for i in range(0, count.value): + result.append(arch.get_reg_name(regs[i])) + core.BNFreeRegisterList(regs, count.value) + self.__dict__["int_arg_regs"] = result + + count = ctypes.c_ulonglong() + regs = core.BNGetFloatArgumentRegisters(self.handle, count) + result = [] + arch = self.arch + for i in range(0, count.value): + result.append(arch.get_reg_name(regs[i])) + core.BNFreeRegisterList(regs, count.value) + self.__dict__["float_arg_regs"] = result + + reg = core.BNGetIntegerReturnValueRegister(self.handle) + if reg == 0xffffffff: + self.__dict__["int_return_reg"] = None + else: + self.__dict__["int_return_reg"] = self.arch.get_reg_name(reg) + + reg = core.BNGetHighIntegerReturnValueRegister(self.handle) + if reg == 0xffffffff: + self.__dict__["high_int_return_reg"] = None + else: + self.__dict__["high_int_return_reg"] = self.arch.get_reg_name(reg) + + reg = core.BNGetFloatReturnValueRegister(self.handle) + if reg == 0xffffffff: + self.__dict__["float_return_reg"] = None + else: + self.__dict__["float_return_reg"] = self.arch.get_reg_name(reg) + + reg = core.BNGetGlobalPointerRegister(self.handle) + if reg == 0xffffffff: + self.__dict__["global_pointer_reg"] = None + else: + self.__dict__["global_pointer_reg"] = self.arch.get_reg_name(reg) + + count = ctypes.c_ulonglong() + regs = core.BNGetImplicitlyDefinedRegisters(self.handle, count) + result = [] + arch = self.arch + for i in range(0, count.value): + result.append(arch.get_reg_name(regs[i])) + core.BNFreeRegisterList(regs, count.value) + self.__dict__["implicitly_defined_regs"] = result + + self.confidence = confidence
+ + def __del__(self): + if self.handle is not None: + core.BNFreeCallingConvention(self.handle) + + def __eq__(self, value): + if not isinstance(value, CallingConvention): + return False + return ctypes.addressof(self.handle.contents) == ctypes.addressof(value.handle.contents) + + def __ne__(self, value): + if not isinstance(value, CallingConvention): + return True + return ctypes.addressof(self.handle.contents) != ctypes.addressof(value.handle.contents) + + def _get_caller_saved_regs(self, ctxt, count): + try: + regs = self.__class__.caller_saved_regs + count[0] = len(regs) + reg_buf = (ctypes.c_uint * len(regs))() + for i in range(0, len(regs)): + reg_buf[i] = self.arch.regs[regs[i]].index + result = ctypes.cast(reg_buf, ctypes.c_void_p) + self._pending_reg_lists[result.value] = (result, reg_buf) + return result.value + except: + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _get_callee_saved_regs(self, ctxt, count): + try: + regs = self.__class__.callee_saved_regs + count[0] = len(regs) + reg_buf = (ctypes.c_uint * len(regs))() + for i in range(0, len(regs)): + reg_buf[i] = self.arch.regs[regs[i]].index + result = ctypes.cast(reg_buf, ctypes.c_void_p) + self._pending_reg_lists[result.value] = (result, reg_buf) + return result.value + except: + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _get_int_arg_regs(self, ctxt, count): + try: + regs = self.__class__.int_arg_regs + count[0] = len(regs) + reg_buf = (ctypes.c_uint * len(regs))() + for i in range(0, len(regs)): + reg_buf[i] = self.arch.regs[regs[i]].index + result = ctypes.cast(reg_buf, ctypes.c_void_p) + self._pending_reg_lists[result.value] = (result, reg_buf) + return result.value + except: + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _get_float_arg_regs(self, ctxt, count): + try: + regs = self.__class__.float_arg_regs + count[0] = len(regs) + reg_buf = (ctypes.c_uint * len(regs))() + for i in range(0, len(regs)): + reg_buf[i] = self.arch.regs[regs[i]].index + result = ctypes.cast(reg_buf, ctypes.c_void_p) + self._pending_reg_lists[result.value] = (result, reg_buf) + return result.value + except: + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _free_register_list(self, ctxt, regs): + try: + buf = ctypes.cast(regs, ctypes.c_void_p) + if buf.value not in self._pending_reg_lists: + raise ValueError("freeing register list that wasn't allocated") + del self._pending_reg_lists[buf.value] + except: + log.log_error(traceback.format_exc()) + + def _arg_regs_share_index(self, ctxt): + try: + return self.__class__.arg_regs_share_index + except: + log.log_error(traceback.format_exc()) + return False + + def _stack_reserved_for_arg_regs(self, ctxt): + try: + return self.__class__.stack_reserved_for_arg_regs + except: + log.log_error(traceback.format_exc()) + return False + + def _stack_adjusted_on_return(self, ctxt): + try: + return self.__class__.stack_adjusted_on_return + except: + log.log_error(traceback.format_exc()) + return False + + def _get_int_return_reg(self, ctxt): + try: + return self.arch.regs[self.__class__.int_return_reg].index + except: + log.log_error(traceback.format_exc()) + return False + + def _get_high_int_return_reg(self, ctxt): + try: + if self.__class__.high_int_return_reg is None: + return 0xffffffff + return self.arch.regs[self.__class__.high_int_return_reg].index + except: + log.log_error(traceback.format_exc()) + return False + + def _get_float_return_reg(self, ctxt): + try: + if self.__class__.float_return_reg is None: + return 0xffffffff + return self.arch.regs[self.__class__.float_int_return_reg].index + except: + log.log_error(traceback.format_exc()) + return False + + def _get_global_pointer_reg(self, ctxt): + try: + if self.__class__.global_pointer_reg is None: + return 0xffffffff + return self.arch.regs[self.__class__.global_pointer_reg].index + except: + log.log_error(traceback.format_exc()) + return False + + def _get_implicitly_defined_regs(self, ctxt, count): + try: + regs = self.__class__.implicitly_defined_regs + count[0] = len(regs) + reg_buf = (ctypes.c_uint * len(regs))() + for i in range(0, len(regs)): + reg_buf[i] = self.arch.regs[regs[i]].index + result = ctypes.cast(reg_buf, ctypes.c_void_p) + self._pending_reg_lists[result.value] = (result, reg_buf) + return result.value + except: + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _get_incoming_reg_value(self, ctxt, reg, func, result): + try: + func_obj = binaryninja.function.Function(handle = core.BNNewFunctionReference(func)) + reg_name = self.arch.get_reg_name(reg) + api_obj = self.perform_get_incoming_reg_value(reg_name, func_obj)._to_api_object() + except: + log.log_error(traceback.format_exc()) + api_obj = binaryninja.function.RegisterValue()._to_api_object() + result[0].state = api_obj.state + result[0].value = api_obj.value + + def _get_incoming_flag_value(self, ctxt, reg, func, result): + try: + func_obj = binaryninja.function.Function(handle = core.BNNewFunctionReference(func)) + reg_name = self.arch.get_reg_name(reg) + api_obj = self.perform_get_incoming_flag_value(reg_name, func_obj)._to_api_object() + except: + log.log_error(traceback.format_exc()) + api_obj = binaryninja.function.RegisterValue()._to_api_object() + result[0].state = api_obj.state + result[0].value = api_obj.value + + def _get_incoming_var_for_parameter_var(self, ctxt, in_var, func, result): + try: + if func is None: + func_obj = None + else: + func_obj = binaryninja.function.Function(handle = core.BNNewFunctionReference(func)) + in_var_obj = binaryninja.function.Variable(func_obj, in_var[0].type, in_var[0].index, in_var[0].storage) + out_var = self.perform_get_incoming_var_for_parameter_var(in_var_obj, func_obj) + result[0].type = out_var.source_type + result[0].index = out_var.index + result[0].storage = out_var.storage + except: + log.log_error(traceback.format_exc()) + result[0].type = in_var[0].type + result[0].index = in_var[0].index + result[0].storage = in_var[0].storage + + def _get_parameter_var_for_incoming_var(self, ctxt, in_var, func, result): + try: + if func is None: + func_obj = None + else: + func_obj = binaryninja.function.Function(handle = core.BNNewFunctionReference(func)) + in_var_obj = binaryninja.function.Variable(func_obj, in_var[0].type, in_var[0].index, in_var[0].storage) + out_var = self.perform_get_parameter_var_for_incoming_var(in_var_obj, func_obj) + result[0].type = out_var.source_type + result[0].index = out_var.index + result[0].storage = out_var.storage + except: + log.log_error(traceback.format_exc()) + result[0].type = in_var[0].type + result[0].index = in_var[0].index + result[0].storage = in_var[0].storage + + def __repr__(self): + return "<calling convention: %s %s>" % (self.arch.name, self.name) + + def __str__(self): + return self.name + +
[docs] def perform_get_incoming_reg_value(self, reg, func): + reg_stack = self.arch.get_reg_stack_for_reg(reg) + if reg_stack is not None: + if reg == self.arch.reg_stacks[reg_stack].stack_top_reg: + return binaryninja.function.RegisterValue.constant(0) + return binaryninja.function.RegisterValue()
+ +
[docs] def perform_get_incoming_flag_value(self, reg, func): + return binaryninja.function.RegisterValue()
+ +
[docs] def perform_get_incoming_var_for_parameter_var(self, in_var, func): + in_buf = core.BNVariable() + in_buf.type = in_var.source_type + in_buf.index = in_var.index + in_buf.storage = in_var.storage + out_var = core.BNGetDefaultIncomingVariableForParameterVariable(self.handle, in_buf) + name = None + if (func is not None) and (out_var.type == VariableSourceType.RegisterVariableSourceType): + name = func.arch.get_reg_name(out_var.storage) + return binaryninja.function.Variable(func, out_var.type, out_var.index, out_var.storage, name)
+ +
[docs] def perform_get_parameter_var_for_incoming_var(self, in_var, func): + in_buf = core.BNVariable() + in_buf.type = in_var.source_type + in_buf.index = in_var.index + in_buf.storage = in_var.storage + out_var = core.BNGetDefaultParameterVariableForIncomingVariable(self.handle, in_buf) + return binaryninja.function.Variable(func, out_var.type, out_var.index, out_var.storage)
+ +
[docs] def with_confidence(self, confidence): + return CallingConvention(self.arch, handle = core.BNNewCallingConventionReference(self.handle), + confidence = confidence)
+ +
[docs] def get_incoming_reg_value(self, reg, func): + reg_num = self.arch.get_reg_index(reg) + func_handle = None + if func is not None: + func_handle = func.handle + return binaryninja.function.RegisterValue(self.arch, core.BNGetIncomingRegisterValue(self.handle, reg_num, func_handle))
+ +
[docs] def get_incoming_flag_value(self, flag, func): + reg_num = self.arch.get_flag_index(flag) + func_handle = None + if func is not None: + func_handle = func.handle + return binaryninja.function.RegisterValue(self.arch, core.BNGetIncomingFlagValue(self.handle, reg_num, func_handle))
+ +
[docs] def get_incoming_var_for_parameter_var(self, in_var, func): + in_buf = core.BNVariable() + in_buf.type = in_var.source_type + in_buf.index = in_var.index + in_buf.storage = in_var.storage + if func is None: + func_obj = None + else: + func_obj = func.handle + out_var = core.BNGetIncomingVariableForParameterVariable(self.handle, in_buf, func_obj) + name = None + if (func is not None) and (out_var.type == VariableSourceType.RegisterVariableSourceType): + name = func.arch.get_reg_name(out_var.storage) + return binaryninja.function.Variable(func, out_var.type, out_var.index, out_var.storage, name)
+ +
[docs] def get_parameter_var_for_incoming_var(self, in_var, func): + in_buf = core.BNVariable() + in_buf.type = in_var.source_type + in_buf.index = in_var.index + in_buf.storage = in_var.storage + if func is None: + func_obj = None + else: + func_obj = func.handle + out_var = core.BNGetParameterVariableForIncomingVariable(self.handle, in_buf, func_obj) + return binaryninja.function.Variable(func, out_var.type, out_var.index, out_var.storage)
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/databuffer.html b/personal/api-docs/_modules/binaryninja/databuffer.html new file mode 100644 index 0000000..85eb65e --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/databuffer.html @@ -0,0 +1,397 @@ + + + + + + + + + + + binaryninja.databuffer — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.databuffer

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+import ctypes
+
+# Binary Ninja components
+from binaryninja import _binaryninjacore as core
+
+# 2-3 compatibility
+from binaryninja import pyNativeStr
+from binaryninja import long
+
+
+
[docs]class DataBuffer(object): +
[docs] def __init__(self, contents="", handle=None): + if handle is not None: + self.handle = core.handle_of_type(handle, core.BNDataBuffer) + elif isinstance(contents, int) or isinstance(contents, long): + self.handle = core.BNCreateDataBuffer(None, contents) + elif isinstance(contents, DataBuffer): + self.handle = core.BNDuplicateDataBuffer(contents.handle) + else: + self.handle = core.BNCreateDataBuffer(contents, len(contents))
+ + def __del__(self): + core.BNFreeDataBuffer(self.handle) + + def __len__(self): + return int(core.BNGetDataBufferLength(self.handle)) + + def __getitem__(self, i): + if isinstance(i, tuple): + result = "" + source = bytes(self) + for s in i: + result += source[s] + return result + elif isinstance(i, slice): + if i.step is not None: + i = i.indices(len(self)) + start = i[0] + stop = i[1] + if stop <= start: + return "" + buf = ctypes.create_string_buffer(stop - start) + ctypes.memmove(buf, core.BNGetDataBufferContentsAt(self.handle, start), stop - start) + return buf.raw + else: + return bytes(self)[i] + elif i < 0: + if i >= -len(self): + return chr(core.BNGetDataBufferByte(self.handle, int(len(self) + i))) + raise IndexError("index out of range") + elif i < len(self): + return chr(core.BNGetDataBufferByte(self.handle, int(i))) + else: + raise IndexError("index out of range") + + def __setitem__(self, i, value): + if isinstance(i, slice): + if i.step is not None: + raise IndexError("step not supported on assignment") + i = i.indices(len(self)) + start = i[0] + stop = i[1] + if stop < start: + stop = start + if len(value) != (stop - start): + data = bytes(self) + data = data[0:start] + value + data[stop:] + core.BNSetDataBufferContents(self.handle, data, len(data)) + else: + value = str(value) + buf = ctypes.create_string_buffer(value) + ctypes.memmove(core.BNGetDataBufferContentsAt(self.handle, start), buf, len(value)) + elif i < 0: + if i >= -len(self): + if len(value) != 1: + raise ValueError("expected single byte for assignment") + value = str(value) + buf = ctypes.create_string_buffer(value) + ctypes.memmove(core.BNGetDataBufferContentsAt(self.handle, int(len(self) + i)), buf, 1) + else: + raise IndexError("index out of range") + elif i < len(self): + if len(value) != 1: + raise ValueError("expected single byte for assignment") + value = str(value) + buf = ctypes.create_string_buffer(value) + ctypes.memmove(core.BNGetDataBufferContentsAt(self.handle, int(i)), buf, 1) + else: + raise IndexError("index out of range") + + def __str__(self): + buf = ctypes.create_string_buffer(len(self)) + ctypes.memmove(buf, core.BNGetDataBufferContents(self.handle), len(self)) + return pyNativeStr(buf.raw) + + def __bytes__(self): + buf = ctypes.create_string_buffer(len(self)) + ctypes.memmove(buf, core.BNGetDataBufferContents(self.handle), len(self)) + return buf.raw + +
[docs] def escape(self): + return core.BNDataBufferToEscapedString(self.handle)
+ +
[docs] def unescape(self): + return DataBuffer(handle=core.BNDecodeEscapedString(bytes(self)))
+ +
[docs] def base64_encode(self): + return core.BNDataBufferToBase64(self.handle)
+ +
[docs] def base64_decode(self): + return DataBuffer(handle = core.BNDecodeBase64(bytes(self)))
+ +
[docs] def zlib_compress(self): + buf = core.BNZlibCompress(self.handle) + if buf is None: + return None + return DataBuffer(handle = buf)
+ +
[docs] def zlib_decompress(self): + buf = core.BNZlibDecompress(self.handle) + if buf is None: + return None + return DataBuffer(handle = buf)
+ + +
[docs]def escape_string(text): + return DataBuffer(text).escape()
+ + +
[docs]def unescape_string(text): + return DataBuffer(text).unescape()
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/datarender.html b/personal/api-docs/_modules/binaryninja/datarender.html new file mode 100644 index 0000000..decf1fc --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/datarender.html @@ -0,0 +1,412 @@ + + + + + + + + + + + binaryninja.datarender — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.datarender

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+
+import traceback
+import ctypes
+
+import binaryninja
+from binaryninja import _binaryninjacore as core
+from binaryninja.filemetadata import FileMetadata
+from binaryninja.binaryview import BinaryView
+from binaryninja.function import (DisassemblyTextLine, InstructionTextToken)
+from binaryninja.enums import InstructionTextTokenType, TypeClass, HighlightStandardColor
+from binaryninja.log import log_error
+from binaryninja.types import Type
+from binaryninja import highlight
+
+
[docs]class DataRenderer(object): + _registered_renderers = [] + + """ + DataRenderer objects tell the Linear View how to render specific types. + + The `perform_is_valid_for_data` method returns a boolean to indicate if your derived class + is able to render the type, given the `addr` and `context`. The `context` is a list of Type + objects which represents the chain of nested objects that is being displayed. + + The `perform_get_lines_for_data` method returns a list of `DisassemblyTextLine` objects each one + representing a single line of Linear View output. The `prefix` variable is a list of `InstructionTextToken`'s + which have already been generated by other `DataRenderer`'s. + + After defining the `DataRenderer` subclass you must then register it with the core. This is done by calling + either `register_type_specific` or `register_generic`. A "generic" type renderer is able to be overridden by + a "type specific" renderer. For instance there is a generic struct render which renders any struct that hasn't + been explicitly overridden by a "type specific" renderer. + + In the below example we create a data renderer that overrides the default display for `struct BAR`. + + class BarDataRenderer(DataRenderer): + def __init__(self): + DataRenderer.__init__(self) + + def perform_is_valid_for_data(self, ctxt, view, addr, type, context): + return DataRenderer.is_type_of_struct_name(type, "BAR", context) + + def perform_get_lines_for_data(self, ctxt, view, addr, type, prefix, width, context): + prefix.append(InstructionTextToken(InstructionTextTokenType.TextToken, "I'm in ur BAR")) + return [DisassemblyTextLine(prefix, addr)] + + def __del__(self): + pass + + BarDataRenderer().register_type_specific() + """ +
[docs] def __init__(self, context=None): + self._cb = core.BNCustomDataRenderer() + self._cb.context = context + self._cb.freeObject = self._cb.freeObject.__class__(self._free_object) + self._cb.isValidForData = self._cb.isValidForData.__class__(self._is_valid_for_data) + self._cb.getLinesForData = self._cb.getLinesForData.__class__(self._get_lines_for_data) + self.handle = core.BNCreateDataRenderer(self._cb)
+ +
[docs] @classmethod + def is_type_of_struct_name(cls, type, name, context): + return (type.type_class == TypeClass.StructureTypeClass and len(context) > 0 + and context[0].type_class == TypeClass.NamedTypeReferenceClass and + context[0].named_type_reference.name == name)
+ +
[docs] def register_type_specific(self): + core.BNRegisterTypeSpecificDataRenderer(core.BNGetDataRendererContainer(), self.handle) + self.__class__._registered_renderers.append(self)
+ +
[docs] def register_generic(self): + core.BNRegisterGenericDataRenderer(core.BNGetDataRendererContainer(), self.handle) + self.__class__._registered_renderers.append(self)
+ + def _free_object(self, ctxt): + try: + self.perform_free_object(ctxt) + except: + log_error(traceback.format_exc()) + + def _is_valid_for_data(self, ctxt, view, addr, type, context, ctxCount): + try: + file_metadata = FileMetadata(handle=core.BNGetFileForView(view)) + view = BinaryView(file_metadata=file_metadata, handle=core.BNNewViewReference(view)) + type = Type(handle=core.BNNewTypeReference(type)) + pycontext = [] + for i in range(0, ctxCount): + pycontext.append(Type(core.BNNewTypeReference(context[i]))) + return self.perform_is_valid_for_data(ctxt, view, addr, type, pycontext) + except: + log_error(traceback.format_exc()) + return False + + def _get_lines_for_data(self, ctxt, view, addr, type, prefix, prefixCount, width, count, typeCtx, ctxCount): + try: + file_metadata = FileMetadata(handle=core.BNGetFileForView(view)) + view = BinaryView(file_metadata=file_metadata, handle=core.BNNewViewReference(view)) + type = Type(handle=core.BNNewTypeReference(type)) + + prefixTokens = InstructionTextToken.get_instruction_lines(prefix, prefixCount) + pycontext = [] + for i in range(ctxCount): + pycontext.append(Type(core.BNNewTypeReference(typeCtx[i]))) + + result = self.perform_get_lines_for_data(ctxt, view, addr, type, prefixTokens, width, pycontext) + + count[0] = len(result) + line_buf = (core.BNDisassemblyTextLine * len(result))() + for i in range(len(result)): + line = result[i] + color = line.highlight + if not isinstance(color, HighlightStandardColor) and not isinstance(color, highlight.HighlightColor): + raise ValueError("Specified color is not one of HighlightStandardColor, highlight.HighlightColor") + if isinstance(color, HighlightStandardColor): + color = highlight.HighlightColor(color) + line_buf[i].highlight = color._get_core_struct() + if line.address is None: + if len(line.tokens) > 0: + line_buf[i].addr = line.tokens[0].address + else: + line_buf[i].addr = 0 + else: + line_buf[i].addr = line.address + if line.il_instruction is not None: + line_buf[i].instrIndex = line.il_instruction.instr_index + else: + line_buf[i].instrIndex = 0xffffffffffffffff + + line_buf[i].count = len(line.tokens) + line_buf[i].tokens = InstructionTextToken.get_instruction_lines(line.tokens) + + return ctypes.cast(line_buf, ctypes.c_void_p).value + except: + log_error(traceback.format_exc()) + return None + +
[docs] def perform_free_object(self, ctxt): + pass
+ +
[docs] def perform_is_valid_for_data(self, ctxt, view, addr, type, context): + return False
+ +
[docs] def perform_get_lines_for_data(self, ctxt, view, addr, type, prefix, width, context): + return []
+ + def __del__(self): + pass
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/demangle.html b/personal/api-docs/_modules/binaryninja/demangle.html new file mode 100644 index 0000000..6d0b8ff --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/demangle.html @@ -0,0 +1,333 @@ + + + + + + + + + + + binaryninja.demangle — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.demangle

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+import ctypes
+
+# Binary Ninja components
+from binaryninja import _binaryninjacore as core
+from binaryninja import types
+
+# 2-3 compatibility
+from binaryninja import range
+from binaryninja import pyNativeStr
+
+
+
[docs]def get_qualified_name(names): + """ + ``get_qualified_name`` gets a qualified name for the provided name list. + + :param list(str) names: name list to qualify + :return: a qualified name + :rtype: str + :Example: + + >>> type, name = demangle_ms(Architecture["x86_64"], "?testf@Foobar@@SA?AW4foo@1@W421@@Z") + >>> get_qualified_name(name) + 'Foobar::testf' + >>> + """ + return "::".join(names)
+ + +
[docs]def demangle_ms(arch, mangled_name): + """ + ``demangle_ms`` demangles a mangled Microsoft Visual Studio C++ name to a Type object. + + :param Architecture arch: Architecture for the symbol. Required for pointer and integer sizes. + :param str mangled_name: a mangled Microsoft Visual Studio C++ name + :return: returns tuple of (Type, demangled_name) or (None, mangled_name) on error + :rtype: Tuple + :Example: + + >>> demangle_ms(Architecture["x86_64"], "?testf@Foobar@@SA?AW4foo@1@W421@@Z") + (<type: public: static enum Foobar::foo __cdecl (enum Foobar::foo)>, ['Foobar', 'testf']) + >>> + """ + handle = ctypes.POINTER(core.BNType)() + outName = ctypes.POINTER(ctypes.c_char_p)() + outSize = ctypes.c_ulonglong() + names = [] + if core.BNDemangleMS(arch.handle, mangled_name, ctypes.byref(handle), ctypes.byref(outName), ctypes.byref(outSize)): + for i in range(outSize.value): + names.append(pyNativeStr(outName[i])) + core.BNFreeDemangledName(ctypes.byref(outName), outSize.value) + return (types.Type(handle), names) + return (None, mangled_name)
+ + +
[docs]def demangle_gnu3(arch, mangled_name): + handle = ctypes.POINTER(core.BNType)() + outName = ctypes.POINTER(ctypes.c_char_p)() + outSize = ctypes.c_ulonglong() + names = [] + if core.BNDemangleGNU3(arch.handle, mangled_name, ctypes.byref(handle), ctypes.byref(outName), ctypes.byref(outSize)): + for i in range(outSize.value): + names.append(pyNativeStr(outName[i])) + core.BNFreeDemangledName(ctypes.byref(outName), outSize.value) + if not handle: + return (None, names) + return (types.Type(handle), names) + return (None, mangled_name)
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/downloadprovider.html b/personal/api-docs/_modules/binaryninja/downloadprovider.html new file mode 100644 index 0000000..ec649b1 --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/downloadprovider.html @@ -0,0 +1,528 @@ + + + + + + + + + + + binaryninja.downloadprovider — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.downloadprovider

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+
+import abc
+import ctypes
+import sys
+import traceback
+
+# Binary Ninja Components
+import binaryninja._binaryninjacore as core
+
+import binaryninja
+from binaryninja.settings import Settings
+from binaryninja import with_metaclass
+from binaryninja import startup
+from binaryninja import log
+
+# 2-3 compatibility
+from binaryninja import pyNativeStr
+from binaryninja import range
+
+
+
[docs]class DownloadInstance(object): + _registered_instances = [] +
[docs] def __init__(self, provider, handle = None): + if handle is None: + self._cb = core.BNDownloadInstanceCallbacks() + self._cb.context = 0 + self._cb.destroyInstance = self._cb.destroyInstance.__class__(self._destroy_instance) + self._cb.performRequest = self._cb.performRequest.__class__(self._perform_request) + self.handle = core.BNInitDownloadInstance(provider.handle, self._cb) + self.__class__._registered_instances.append(self) + else: + self.handle = core.handle_of_type(handle, core.BNDownloadInstance) + self._must_free = handle is not None
+ + def __del__(self): + if self._must_free: + core.BNFreeDownloadInstance(self.handle) + + def _destroy_instance(self, ctxt): + try: + if self in self.__class__._registered_instances: + self.__class__._registered_instances.remove(self) + self.perform_destroy_instance() + except: + log.log_error(traceback.format_exc()) + + def _perform_request(self, ctxt, url): + try: + return self.perform_request(url) + except: + log.log_error(traceback.format_exc()) + return -1 + +
[docs] @abc.abstractmethod + def perform_destroy_instance(self): + raise NotImplementedError
+ + @abc.abstractmethod + def perform_request(self, ctxt, url): + raise NotImplementedError + +
[docs] def perform_request(self, url, callbacks): + return core.BNPerformDownloadRequest(self.handle, url, callbacks)
+ + +class _DownloadProviderMetaclass(type): + @property + def list(self): + """List all DownloadProvider types (read-only)""" + binaryninja._init_plugins() + count = ctypes.c_ulonglong() + types = core.BNGetDownloadProviderList(count) + result = [] + for i in range(0, count.value): + result.append(DownloadProvider(types[i])) + core.BNFreeDownloadProviderList(types) + return result + + def __iter__(self): + binaryninja._init_plugins() + count = ctypes.c_ulonglong() + types = core.BNGetDownloadProviderList(count) + try: + for i in range(0, count.value): + yield DownloadProvider(types[i]) + finally: + core.BNFreeDownloadProviderList(types) + + def __getitem__(self, value): + binaryninja._init_plugins() + provider = core.BNGetDownloadProviderByName(str(value)) + if provider is None: + raise KeyError("'%s' is not a valid download provider" % str(value)) + return DownloadProvider(provider) + + def __setattr__(self, name, value): + try: + type.__setattr__(self, name, value) + except AttributeError: + raise AttributeError("attribute '%s' is read only" % name) + + +
[docs]class DownloadProvider(with_metaclass(_DownloadProviderMetaclass, object)): + name = None + instance_class = None + _registered_providers = [] + +
[docs] def __init__(self, handle = None): + if handle is not None: + self.handle = core.handle_of_type(handle, core.BNDownloadProvider) + self.__dict__["name"] = core.BNGetDownloadProviderName(handle)
+ +
[docs] def register(self): + self._cb = core.BNDownloadProviderCallbacks() + self._cb.context = 0 + self._cb.createInstance = self._cb.createInstance.__class__(self._create_instance) + self.handle = core.BNRegisterDownloadProvider(self.__class__.name, self._cb) + self.__class__._registered_providers.append(self)
+ + def _create_instance(self, ctxt): + try: + result = self.__class__.instance_class(self) + if result is None: + return None + return ctypes.cast(core.BNNewDownloadInstanceReference(result.handle), ctypes.c_void_p).value + except: + log.log_error(traceback.format_exc()) + return None + +
[docs] def create_instance(self): + result = core.BNCreateDownloadProviderInstance(self.handle) + if result is None: + return None + return DownloadInstance(self, handle = result)
+ + +if (sys.platform != "win32") and (sys.version_info >= (2, 7, 9)): + try: + from urllib.request import urlopen, build_opener, install_opener, ProxyHandler + from urllib.error import URLError + except ImportError: + from urllib2 import urlopen, build_opener, install_opener, ProxyHandler, URLError + + class PythonDownloadInstance(DownloadInstance): + def __init__(self, provider): + super(PythonDownloadInstance, self).__init__(provider) + + @abc.abstractmethod + def perform_destroy_instance(self): + pass + + @abc.abstractmethod + def perform_request(self, url): + try: + proxy_setting = Settings().get_string('downloadClient.httpsProxy') + if proxy_setting: + opener = build_opener(ProxyHandler({'https': proxy_setting})) + install_opener(opener) + + r = urlopen(pyNativeStr(url)) + total_size = int(r.headers.get('content-length', 0)) + bytes_sent = 0 + while True: + data = r.read(4096) + if not data: + break + raw_bytes = (ctypes.c_ubyte * len(data)).from_buffer_copy(data) + bytes_wrote = core.BNWriteDataForDownloadInstance(self.handle, raw_bytes, len(raw_bytes)) + if bytes_wrote != len(raw_bytes): + core.BNSetErrorForDownloadInstance(self.handle, "Bytes written mismatch!") + return -1 + bytes_sent = bytes_sent + bytes_wrote + continue_download = core.BNNotifyProgressForDownloadInstance(self.handle, bytes_sent, total_size) + if continue_download is False: + core.BNSetErrorForDownloadInstance(self.handle, "Download aborted!") + return -1 + + if not bytes_sent: + core.BNSetErrorForDownloadInstance(self.handle, "Received no data!") + return -1 + + except URLError as e: + core.BNSetErrorForDownloadInstance(self.handle, e.__class__.__name__) + return -1 + except: + core.BNSetErrorForDownloadInstance(self.handle, "Unknown Exception!") + log.log_error(traceback.format_exc()) + return -1 + + return 0 + + class PythonDownloadProvider(DownloadProvider): + name = "PythonDownloadProvider" + instance_class = PythonDownloadInstance + + PythonDownloadProvider().register() +else: + try: + import requests + if sys.platform != "win32": + from requests import pyopenssl +
[docs] class PythonDownloadInstance(DownloadInstance): +
[docs] def __init__(self, provider): + super(PythonDownloadInstance, self).__init__(provider)
+ +
[docs] @abc.abstractmethod + def perform_destroy_instance(self): + pass
+ +
[docs] @abc.abstractmethod + def perform_request(self, url): + try: + proxy_setting = Settings().get_string('downloadClient.httpsProxy') + if proxy_setting: + proxies = {"https": proxy_setting} + else: + proxies = None + + r = requests.get(pyNativeStr(url), proxies=proxies) + if not r.ok: + core.BNSetErrorForDownloadInstance(self.handle, "Received error from server") + return -1 + data = r.content + if len(data) == 0: + core.BNSetErrorForDownloadInstance(self.handle, "No data received from server!") + return -1 + raw_bytes = (ctypes.c_ubyte * len(data)).from_buffer_copy(data) + bytes_wrote = core.BNWriteDataForDownloadInstance(self.handle, raw_bytes, len(raw_bytes)) + if bytes_wrote != len(raw_bytes): + core.BNSetErrorForDownloadInstance(self.handle, "Bytes written mismatch!") + return -1 + continue_download = core.BNNotifyProgressForDownloadInstance(self.handle, bytes_wrote, bytes_wrote) + if continue_download is False: + core.BNSetErrorForDownloadInstance(self.handle, "Download aborted!") + return -1 + except requests.RequestException as e: + core.BNSetErrorForDownloadInstance(self.handle, e.__class__.__name__) + return -1 + except: + core.BNSetErrorForDownloadInstance(self.handle, "Unknown Exception!") + log.log_error(traceback.format_exc()) + return -1 + + return 0
+ +
[docs] class PythonDownloadProvider(DownloadProvider): + name = "PythonDownloadProvider" + instance_class = PythonDownloadInstance
+ + PythonDownloadProvider().register() + except ImportError: + if sys.platform == "win32": + log.log_error("The pip requests package is required for network connectivity!") + log.log_error("Please install the requests package into the selected Python environment:") + log.log_error(" python -m pip install requests") + else: + log.log_error("On Python versions below 2.7.9, the pip requests[security] package is required for network connectivity!") + log.log_error("On an Ubuntu 14.04 install, the following three commands are sufficient to enable networking for the current user:") + log.log_error(" sudo apt install python-pip") + log.log_error(" python -m pip install pip --upgrade --user") + log.log_error(" python -m pip install requests[security] --upgrade --user") + +
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/enums.html b/personal/api-docs/_modules/binaryninja/enums.html new file mode 100644 index 0000000..1089e47 --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/enums.html @@ -0,0 +1,1104 @@ + + + + + + + + + + + binaryninja.enums — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.enums

+import enum
+
+
[docs]class ActionType(enum.IntEnum): + TemporaryAction = 0 + DataModificationAction = 1 + AnalysisAction = 2 + DataModificationAndAnalysisAction = 3
+ + +
[docs]class AnalysisSkipReason(enum.IntEnum): + NoSkipReason = 0 + AlwaysSkipReason = 1 + ExceedFunctionSizeSkipReason = 2 + ExceedFunctionAnalysisTimeSkipReason = 3 + ExceedFunctionUpdateCountSkipReason = 4 + NewAutoFunctionAnalysisSuppressedReason = 5
+ + +
[docs]class AnalysisState(enum.IntEnum): + IdleState = 0 + DisassembleState = 1 + AnalyzeState = 2 + ExtendedAnalyzeState = 3
+ + +
[docs]class BranchType(enum.IntEnum): + UnconditionalBranch = 0 + FalseBranch = 1 + TrueBranch = 2 + CallDestination = 3 + FunctionReturn = 4 + SystemCall = 5 + IndirectBranch = 6 + UnresolvedBranch = 127
+ + +
[docs]class CallingConventionName(enum.IntEnum): + NoCallingConvention = 0 + CdeclCallingConvention = 1 + PascalCallingConvention = 2 + ThisCallCallingConvention = 3 + STDCallCallingConvention = 4 + FastcallCallingConvention = 5 + CLRCallCallingConvention = 6 + EabiCallCallingConvention = 7 + VectorCallCallingConvention = 8
+ + +
[docs]class DisassemblyOption(enum.IntEnum): + ShowAddress = 0 + ShowOpcode = 1 + ExpandLongOpcode = 2 + ShowVariablesAtTopOfGraph = 3 + ShowVariableTypesWhenAssigned = 4 + ShowDefaultRegisterTypes = 5 + ShowCallParameterNames = 6 + ShowRegisterHighlight = 7 + GroupLinearDisassemblyFunctions = 64 + ShowFlagUsage = 128
+ + +
[docs]class Endianness(enum.IntEnum): + LittleEndian = 0 + BigEndian = 1
+ + +
[docs]class FindFlag(enum.IntEnum): + FindCaseSensitive = 0 + FindCaseInsensitive = 1
+ + +
[docs]class FlagRole(enum.IntEnum): + SpecialFlagRole = 0 + ZeroFlagRole = 1 + PositiveSignFlagRole = 2 + NegativeSignFlagRole = 3 + CarryFlagRole = 4 + OverflowFlagRole = 5 + HalfCarryFlagRole = 6 + EvenParityFlagRole = 7 + OddParityFlagRole = 8 + OrderedFlagRole = 9 + UnorderedFlagRole = 10
+ + +
[docs]class FormInputFieldType(enum.IntEnum): + LabelFormField = 0 + SeparatorFormField = 1 + TextLineFormField = 2 + MultilineTextFormField = 3 + IntegerFormField = 4 + AddressFormField = 5 + ChoiceFormField = 6 + OpenFileNameFormField = 7 + SaveFileNameFormField = 8 + DirectoryNameFormField = 9
+ + +
[docs]class FunctionAnalysisSkipOverride(enum.IntEnum): + DefaultFunctionAnalysisSkip = 0 + NeverSkipFunctionAnalysis = 1 + AlwaysSkipFunctionAnalysis = 2
+ + +
[docs]class FunctionGraphType(enum.IntEnum): + NormalFunctionGraph = 0 + LowLevelILFunctionGraph = 1 + LiftedILFunctionGraph = 2 + LowLevelILSSAFormFunctionGraph = 3 + MediumLevelILFunctionGraph = 4 + MediumLevelILSSAFormFunctionGraph = 5 + MappedMediumLevelILFunctionGraph = 6 + MappedMediumLevelILSSAFormFunctionGraph = 7
+ + +
[docs]class HighlightColorStyle(enum.IntEnum): + StandardHighlightColor = 0 + MixedHighlightColor = 1 + CustomHighlightColor = 2
+ + +
[docs]class HighlightStandardColor(enum.IntEnum): + NoHighlightColor = 0 + BlueHighlightColor = 1 + GreenHighlightColor = 2 + CyanHighlightColor = 3 + RedHighlightColor = 4 + MagentaHighlightColor = 5 + YellowHighlightColor = 6 + OrangeHighlightColor = 7 + WhiteHighlightColor = 8 + BlackHighlightColor = 9
+ + +
[docs]class ILBranchDependence(enum.IntEnum): + NotBranchDependent = 0 + TrueBranchDependent = 1 + FalseBranchDependent = 2
+ + +
[docs]class ImplicitRegisterExtend(enum.IntEnum): + NoExtend = 0 + ZeroExtendToFullWidth = 1 + SignExtendToFullWidth = 2
+ + +
[docs]class InstructionTextTokenContext(enum.IntEnum): + NoTokenContext = 0 + LocalVariableTokenContext = 1 + DataVariableTokenContext = 2 + FunctionReturnTokenContext = 3
+ + +
[docs]class InstructionTextTokenType(enum.IntEnum): + TextToken = 0 + InstructionToken = 1 + OperandSeparatorToken = 2 + RegisterToken = 3 + IntegerToken = 4 + PossibleAddressToken = 5 + BeginMemoryOperandToken = 6 + EndMemoryOperandToken = 7 + FloatingPointToken = 8 + AnnotationToken = 9 + CodeRelativeAddressToken = 10 + ArgumentNameToken = 11 + HexDumpByteValueToken = 12 + HexDumpSkippedByteToken = 13 + HexDumpInvalidByteToken = 14 + HexDumpTextToken = 15 + OpcodeToken = 16 + StringToken = 17 + CharacterConstantToken = 18 + KeywordToken = 19 + TypeNameToken = 20 + FieldNameToken = 21 + NameSpaceToken = 22 + NameSpaceSeparatorToken = 23 + CodeSymbolToken = 64 + DataSymbolToken = 65 + LocalVariableToken = 66 + ImportToken = 67 + AddressDisplayToken = 68 + IndirectImportToken = 69 + ExternalSymbolToken = 70
+ + +
[docs]class IntegerDisplayType(enum.IntEnum): + DefaultIntegerDisplayType = 0 + BinaryDisplayType = 1 + SignedOctalDisplayType = 2 + UnsignedOctalDisplayType = 3 + SignedDecimalDisplayType = 4 + UnsignedDecimalDisplayType = 5 + SignedHexadecimalDisplayType = 6 + UnsignedHexadecimalDisplayType = 7 + CharacterConstantDisplayType = 8 + PointerDisplayType = 9
+ + +
[docs]class LinearDisassemblyLineType(enum.IntEnum): + BlankLineType = 0 + CodeDisassemblyLineType = 1 + DataVariableLineType = 2 + HexDumpLineType = 3 + FunctionHeaderLineType = 4 + FunctionHeaderStartLineType = 5 + FunctionHeaderEndLineType = 6 + FunctionContinuationLineType = 7 + LocalVariableLineType = 8 + LocalVariableListEndLineType = 9 + FunctionEndLineType = 10 + NoteStartLineType = 11 + NoteLineType = 12 + NoteEndLineType = 13 + SectionStartLineType = 14 + SectionEndLineType = 15 + SectionSeparatorLineType = 16 + NonContiguousSeparatorLineType = 17
+ + +
[docs]class LogLevel(enum.IntEnum): + DebugLog = 0 + InfoLog = 1 + WarningLog = 2 + ErrorLog = 3 + AlertLog = 4
+ + +
[docs]class LowLevelILFlagCondition(enum.IntEnum): + LLFC_E = 0 + LLFC_NE = 1 + LLFC_SLT = 2 + LLFC_ULT = 3 + LLFC_SLE = 4 + LLFC_ULE = 5 + LLFC_SGE = 6 + LLFC_UGE = 7 + LLFC_SGT = 8 + LLFC_UGT = 9 + LLFC_NEG = 10 + LLFC_POS = 11 + LLFC_O = 12 + LLFC_NO = 13 + LLFC_FE = 14 + LLFC_FNE = 15 + LLFC_FLT = 16 + LLFC_FLE = 17 + LLFC_FGE = 18 + LLFC_FGT = 19 + LLFC_FO = 20 + LLFC_FUO = 21
+ + +
[docs]class LowLevelILOperation(enum.IntEnum): + LLIL_NOP = 0 + LLIL_SET_REG = 1 + LLIL_SET_REG_SPLIT = 2 + LLIL_SET_FLAG = 3 + LLIL_SET_REG_STACK_REL = 4 + LLIL_REG_STACK_PUSH = 5 + LLIL_LOAD = 6 + LLIL_STORE = 7 + LLIL_PUSH = 8 + LLIL_POP = 9 + LLIL_REG = 10 + LLIL_REG_SPLIT = 11 + LLIL_REG_STACK_REL = 12 + LLIL_REG_STACK_POP = 13 + LLIL_REG_STACK_FREE_REG = 14 + LLIL_REG_STACK_FREE_REL = 15 + LLIL_CONST = 16 + LLIL_CONST_PTR = 17 + LLIL_EXTERN_PTR = 18 + LLIL_FLOAT_CONST = 19 + LLIL_FLAG = 20 + LLIL_FLAG_BIT = 21 + LLIL_ADD = 22 + LLIL_ADC = 23 + LLIL_SUB = 24 + LLIL_SBB = 25 + LLIL_AND = 26 + LLIL_OR = 27 + LLIL_XOR = 28 + LLIL_LSL = 29 + LLIL_LSR = 30 + LLIL_ASR = 31 + LLIL_ROL = 32 + LLIL_RLC = 33 + LLIL_ROR = 34 + LLIL_RRC = 35 + LLIL_MUL = 36 + LLIL_MULU_DP = 37 + LLIL_MULS_DP = 38 + LLIL_DIVU = 39 + LLIL_DIVU_DP = 40 + LLIL_DIVS = 41 + LLIL_DIVS_DP = 42 + LLIL_MODU = 43 + LLIL_MODU_DP = 44 + LLIL_MODS = 45 + LLIL_MODS_DP = 46 + LLIL_NEG = 47 + LLIL_NOT = 48 + LLIL_SX = 49 + LLIL_ZX = 50 + LLIL_LOW_PART = 51 + LLIL_JUMP = 52 + LLIL_JUMP_TO = 53 + LLIL_CALL = 54 + LLIL_CALL_STACK_ADJUST = 55 + LLIL_TAILCALL = 56 + LLIL_RET = 57 + LLIL_NORET = 58 + LLIL_IF = 59 + LLIL_GOTO = 60 + LLIL_FLAG_COND = 61 + LLIL_FLAG_GROUP = 62 + LLIL_CMP_E = 63 + LLIL_CMP_NE = 64 + LLIL_CMP_SLT = 65 + LLIL_CMP_ULT = 66 + LLIL_CMP_SLE = 67 + LLIL_CMP_ULE = 68 + LLIL_CMP_SGE = 69 + LLIL_CMP_UGE = 70 + LLIL_CMP_SGT = 71 + LLIL_CMP_UGT = 72 + LLIL_TEST_BIT = 73 + LLIL_BOOL_TO_INT = 74 + LLIL_ADD_OVERFLOW = 75 + LLIL_SYSCALL = 76 + LLIL_BP = 77 + LLIL_TRAP = 78 + LLIL_INTRINSIC = 79 + LLIL_UNDEF = 80 + LLIL_UNIMPL = 81 + LLIL_UNIMPL_MEM = 82 + LLIL_FADD = 83 + LLIL_FSUB = 84 + LLIL_FMUL = 85 + LLIL_FDIV = 86 + LLIL_FSQRT = 87 + LLIL_FNEG = 88 + LLIL_FABS = 89 + LLIL_FLOAT_TO_INT = 90 + LLIL_INT_TO_FLOAT = 91 + LLIL_FLOAT_CONV = 92 + LLIL_ROUND_TO_INT = 93 + LLIL_FLOOR = 94 + LLIL_CEIL = 95 + LLIL_FTRUNC = 96 + LLIL_FCMP_E = 97 + LLIL_FCMP_NE = 98 + LLIL_FCMP_LT = 99 + LLIL_FCMP_LE = 100 + LLIL_FCMP_GE = 101 + LLIL_FCMP_GT = 102 + LLIL_FCMP_O = 103 + LLIL_FCMP_UO = 104 + LLIL_SET_REG_SSA = 105 + LLIL_SET_REG_SSA_PARTIAL = 106 + LLIL_SET_REG_SPLIT_SSA = 107 + LLIL_SET_REG_STACK_REL_SSA = 108 + LLIL_SET_REG_STACK_ABS_SSA = 109 + LLIL_REG_SPLIT_DEST_SSA = 110 + LLIL_REG_STACK_DEST_SSA = 111 + LLIL_REG_SSA = 112 + LLIL_REG_SSA_PARTIAL = 113 + LLIL_REG_SPLIT_SSA = 114 + LLIL_REG_STACK_REL_SSA = 115 + LLIL_REG_STACK_ABS_SSA = 116 + LLIL_REG_STACK_FREE_REL_SSA = 117 + LLIL_REG_STACK_FREE_ABS_SSA = 118 + LLIL_SET_FLAG_SSA = 119 + LLIL_FLAG_SSA = 120 + LLIL_FLAG_BIT_SSA = 121 + LLIL_CALL_SSA = 122 + LLIL_SYSCALL_SSA = 123 + LLIL_TAILCALL_SSA = 124 + LLIL_CALL_PARAM = 125 + LLIL_CALL_STACK_SSA = 126 + LLIL_CALL_OUTPUT_SSA = 127 + LLIL_LOAD_SSA = 128 + LLIL_STORE_SSA = 129 + LLIL_INTRINSIC_SSA = 130 + LLIL_REG_PHI = 131 + LLIL_REG_STACK_PHI = 132 + LLIL_FLAG_PHI = 133 + LLIL_MEM_PHI = 134
+ + +
[docs]class MediumLevelILOperation(enum.IntEnum): + MLIL_NOP = 0 + MLIL_SET_VAR = 1 + MLIL_SET_VAR_FIELD = 2 + MLIL_SET_VAR_SPLIT = 3 + MLIL_LOAD = 4 + MLIL_LOAD_STRUCT = 5 + MLIL_STORE = 6 + MLIL_STORE_STRUCT = 7 + MLIL_VAR = 8 + MLIL_VAR_FIELD = 9 + MLIL_VAR_SPLIT = 10 + MLIL_ADDRESS_OF = 11 + MLIL_ADDRESS_OF_FIELD = 12 + MLIL_CONST = 13 + MLIL_CONST_PTR = 14 + MLIL_EXTERN_PTR = 15 + MLIL_FLOAT_CONST = 16 + MLIL_IMPORT = 17 + MLIL_ADD = 18 + MLIL_ADC = 19 + MLIL_SUB = 20 + MLIL_SBB = 21 + MLIL_AND = 22 + MLIL_OR = 23 + MLIL_XOR = 24 + MLIL_LSL = 25 + MLIL_LSR = 26 + MLIL_ASR = 27 + MLIL_ROL = 28 + MLIL_RLC = 29 + MLIL_ROR = 30 + MLIL_RRC = 31 + MLIL_MUL = 32 + MLIL_MULU_DP = 33 + MLIL_MULS_DP = 34 + MLIL_DIVU = 35 + MLIL_DIVU_DP = 36 + MLIL_DIVS = 37 + MLIL_DIVS_DP = 38 + MLIL_MODU = 39 + MLIL_MODU_DP = 40 + MLIL_MODS = 41 + MLIL_MODS_DP = 42 + MLIL_NEG = 43 + MLIL_NOT = 44 + MLIL_SX = 45 + MLIL_ZX = 46 + MLIL_LOW_PART = 47 + MLIL_JUMP = 48 + MLIL_JUMP_TO = 49 + MLIL_RET_HINT = 50 + MLIL_CALL = 51 + MLIL_CALL_UNTYPED = 52 + MLIL_CALL_OUTPUT = 53 + MLIL_CALL_PARAM = 54 + MLIL_RET = 55 + MLIL_NORET = 56 + MLIL_IF = 57 + MLIL_GOTO = 58 + MLIL_CMP_E = 59 + MLIL_CMP_NE = 60 + MLIL_CMP_SLT = 61 + MLIL_CMP_ULT = 62 + MLIL_CMP_SLE = 63 + MLIL_CMP_ULE = 64 + MLIL_CMP_SGE = 65 + MLIL_CMP_UGE = 66 + MLIL_CMP_SGT = 67 + MLIL_CMP_UGT = 68 + MLIL_TEST_BIT = 69 + MLIL_BOOL_TO_INT = 70 + MLIL_ADD_OVERFLOW = 71 + MLIL_SYSCALL = 72 + MLIL_SYSCALL_UNTYPED = 73 + MLIL_TAILCALL = 74 + MLIL_TAILCALL_UNTYPED = 75 + MLIL_INTRINSIC = 76 + MLIL_FREE_VAR_SLOT = 77 + MLIL_BP = 78 + MLIL_TRAP = 79 + MLIL_UNDEF = 80 + MLIL_UNIMPL = 81 + MLIL_UNIMPL_MEM = 82 + MLIL_FADD = 83 + MLIL_FSUB = 84 + MLIL_FMUL = 85 + MLIL_FDIV = 86 + MLIL_FSQRT = 87 + MLIL_FNEG = 88 + MLIL_FABS = 89 + MLIL_FLOAT_TO_INT = 90 + MLIL_INT_TO_FLOAT = 91 + MLIL_FLOAT_CONV = 92 + MLIL_ROUND_TO_INT = 93 + MLIL_FLOOR = 94 + MLIL_CEIL = 95 + MLIL_FTRUNC = 96 + MLIL_FCMP_E = 97 + MLIL_FCMP_NE = 98 + MLIL_FCMP_LT = 99 + MLIL_FCMP_LE = 100 + MLIL_FCMP_GE = 101 + MLIL_FCMP_GT = 102 + MLIL_FCMP_O = 103 + MLIL_FCMP_UO = 104 + MLIL_SET_VAR_SSA = 105 + MLIL_SET_VAR_SSA_FIELD = 106 + MLIL_SET_VAR_SPLIT_SSA = 107 + MLIL_SET_VAR_ALIASED = 108 + MLIL_SET_VAR_ALIASED_FIELD = 109 + MLIL_VAR_SSA = 110 + MLIL_VAR_SSA_FIELD = 111 + MLIL_VAR_ALIASED = 112 + MLIL_VAR_ALIASED_FIELD = 113 + MLIL_VAR_SPLIT_SSA = 114 + MLIL_CALL_SSA = 115 + MLIL_CALL_UNTYPED_SSA = 116 + MLIL_SYSCALL_SSA = 117 + MLIL_SYSCALL_UNTYPED_SSA = 118 + MLIL_TAILCALL_SSA = 119 + MLIL_TAILCALL_UNTYPED_SSA = 120 + MLIL_CALL_PARAM_SSA = 121 + MLIL_CALL_OUTPUT_SSA = 122 + MLIL_LOAD_SSA = 123 + MLIL_LOAD_STRUCT_SSA = 124 + MLIL_STORE_SSA = 125 + MLIL_STORE_STRUCT_SSA = 126 + MLIL_INTRINSIC_SSA = 127 + MLIL_FREE_VAR_SLOT_SSA = 128 + MLIL_VAR_PHI = 129 + MLIL_MEM_PHI = 130
+ + +
[docs]class MemberAccess(enum.IntEnum): + NoAccess = 0 + PrivateAccess = 1 + ProtectedAccess = 2 + PublicAccess = 3
+ + +
[docs]class MemberScope(enum.IntEnum): + NoScope = 0 + StaticScope = 1 + VirtualScope = 2 + ThunkScope = 3 + FriendScope = 4
+ + +
[docs]class MessageBoxButtonResult(enum.IntEnum): + NoButton = 0 + YesButton = 1 + OKButton = 2 + CancelButton = 3
+ + +
[docs]class MessageBoxButtonSet(enum.IntEnum): + OKButtonSet = 0 + YesNoButtonSet = 1 + YesNoCancelButtonSet = 2
+ + +
[docs]class MessageBoxIcon(enum.IntEnum): + InformationIcon = 0 + QuestionIcon = 1 + WarningIcon = 2 + ErrorIcon = 3
+ + +
[docs]class MetadataType(enum.IntEnum): + InvalidDataType = 0 + BooleanDataType = 1 + StringDataType = 2 + UnsignedIntegerDataType = 3 + SignedIntegerDataType = 4 + DoubleDataType = 5 + RawDataType = 6 + KeyValueDataType = 7 + ArrayDataType = 8
+ + +
[docs]class ModificationStatus(enum.IntEnum): + Original = 0 + Changed = 1 + Inserted = 2
+ + +
[docs]class NameType(enum.IntEnum): + NoNameType = 0 + ConstructorNameType = 1 + DestructorNameType = 2 + OperatorNewNameType = 3 + OperatorDeleteNameType = 4 + OperatorAssignNameType = 5 + OperatorRightShiftNameType = 6 + OperatorLeftShiftNameType = 7 + OperatorNotNameType = 8 + OperatorEqualNameType = 9 + OperatorNotEqualNameType = 10 + OperatorArrayNameType = 11 + OperatorArrowNameType = 12 + OperatorStarNameType = 13 + OperatorIncrementNameType = 14 + OperatorDecrementNameType = 15 + OperatorMinusNameType = 16 + OperatorPlusNameType = 17 + OperatorBitAndNameType = 18 + OperatorArrowStarNameType = 19 + OperatorDivideNameType = 20 + OperatorModulusNameType = 21 + OperatorLessThanNameType = 22 + OperatorLessThanEqualNameType = 23 + OperatorGreaterThanNameType = 24 + OperatorGreaterThanEqualNameType = 25 + OperatorCommaNameType = 26 + OperatorParenthesesNameType = 27 + OperatorTildeNameType = 28 + OperatorXorNameType = 29 + OperatorBitOrNameType = 30 + OperatorLogicalAndNameType = 31 + OperatorLogicalOrNameType = 32 + OperatorStarEqualNameType = 33 + OperatorPlusEqualNameType = 34 + OperatorMinusEqualNameType = 35 + OperatorDivideEqualNameType = 36 + OperatorModulusEqualNameType = 37 + OperatorRightShiftEqualNameType = 38 + OperatorLeftShiftEqualNameType = 39 + OperatorAndEqualNameType = 40 + OperatorOrEqualNameType = 41 + OperatorXorEqualNameType = 42 + VFTableNameType = 43 + VBTableNameType = 44 + VCallNameType = 45 + TypeofNameType = 46 + LocalStaticGuardNameType = 47 + StringNameType = 48 + VBaseDestructorNameType = 49 + VectorDeletingDestructorNameType = 50 + DefaultConstructorClosureNameType = 51 + ScalarDeletingDestructorNameType = 52 + VectorConstructorIteratorNameType = 53 + VectorDestructorIteratorNameType = 54 + VectorVBaseConstructorIteratoreNameType = 55 + VirtualDisplacementMapNameType = 56 + EHVectorConstructorIteratorNameType = 57 + EHVectorDestructorIteratorNameType = 58 + EHVectorVBaseConstructorIteratorNameType = 59 + CopyConstructorClosureNameType = 60 + UDTReturningNameType = 61 + LocalVFTableNameType = 62 + LocalVFTableConstructorClosureNameType = 63 + OperatorNewArrayNameType = 64 + OperatorDeleteArrayNameType = 65 + PlacementDeleteClosureNameType = 66 + PlacementDeleteClosureArrayNameType = 67 + OperatorReturnTypeNameType = 68 + RttiTypeDescriptor = 69 + RttiBaseClassDescriptor = 70 + RttiBaseClassArray = 71 + RttiClassHeirarchyDescriptor = 72 + RttiCompleteObjectLocator = 73 + OperatorUnaryMinusNameType = 74 + OperatorUnaryPlusNameType = 75 + OperatorUnaryBitAndNameType = 76 + OperatorUnaryStarNameType = 77
+ + +
[docs]class NamedTypeReferenceClass(enum.IntEnum): + UnknownNamedTypeClass = 0 + TypedefNamedTypeClass = 1 + ClassNamedTypeClass = 2 + StructNamedTypeClass = 3 + UnionNamedTypeClass = 4 + EnumNamedTypeClass = 5
+ + +
[docs]class PluginCommandType(enum.IntEnum): + DefaultPluginCommand = 0 + AddressPluginCommand = 1 + RangePluginCommand = 2 + FunctionPluginCommand = 3 + LowLevelILFunctionPluginCommand = 4 + LowLevelILInstructionPluginCommand = 5 + MediumLevelILFunctionPluginCommand = 6 + MediumLevelILInstructionPluginCommand = 7
+ + +
[docs]class PluginLoadOrder(enum.IntEnum): + EarlyPluginLoadOrder = 0 + NormalPluginLoadOrder = 1 + LatePluginLoadOrder = 2
+ + +
[docs]class PluginOrigin(enum.IntEnum): + OfficialPluginOrigin = 0 + CommunityPluginOrigin = 1 + OtherPluginOrigin = 2
+ + +
[docs]class PluginType(enum.IntEnum): + CorePluginType = 0 + UiPluginType = 1 + ArchitecturePluginType = 2 + BinaryViewPluginType = 3
+ + +
[docs]class PluginUpdateStatus(enum.IntEnum): + UpToDatePluginStatus = 0 + UpdatesAvailablePluginStatus = 1
+ + +
[docs]class PointerSuffix(enum.IntEnum): + Ptr64Suffix = 0 + UnalignedSuffix = 1 + RestrictSuffix = 2 + ReferenceSuffix = 3 + LvalueSuffix = 4
+ + +
[docs]class ReferenceType(enum.IntEnum): + PointerReferenceType = 0 + ReferenceReferenceType = 1 + RValueReferenceType = 2 + NoReference = 3
+ + +
[docs]class RegisterValueType(enum.IntEnum): + UndeterminedValue = 0 + EntryValue = 1 + ConstantValue = 2 + ConstantPointerValue = 3 + ExternalPointerValue = 4 + StackFrameOffset = 5 + ReturnAddressValue = 6 + ImportedAddressValue = 7 + SignedRangeValue = 8 + UnsignedRangeValue = 9 + LookupTableValue = 10 + InSetOfValues = 11 + NotInSetOfValues = 12
+ + +
[docs]class RelocationType(enum.IntEnum): + ELFGlobalRelocationType = 0 + ELFCopyRelocationType = 1 + ELFJumpSlotRelocationType = 2 + StandardRelocationType = 3 + IgnoredRelocation = 4
+ + +
[docs]class ReportType(enum.IntEnum): + PlainTextReportType = 0 + MarkdownReportType = 1 + HTMLReportType = 2 + FlowGraphReportType = 3
+ + +
[docs]class ScriptingProviderExecuteResult(enum.IntEnum): + InvalidScriptInput = 0 + IncompleteScriptInput = 1 + SuccessfulScriptExecution = 2 + ScriptExecutionCancelled = 3
+ + +
[docs]class ScriptingProviderInputReadyState(enum.IntEnum): + NotReadyForInput = 0 + ReadyForScriptExecution = 1 + ReadyForScriptProgramInput = 2
+ + +
[docs]class SectionSemantics(enum.IntEnum): + DefaultSectionSemantics = 0 + ReadOnlyCodeSectionSemantics = 1 + ReadOnlyDataSectionSemantics = 2 + ReadWriteDataSectionSemantics = 3 + ExternalSectionSemantics = 4
+ + +
[docs]class SegmentFlag(enum.IntEnum): + SegmentExecutable = 1 + SegmentWritable = 2 + SegmentReadable = 4 + SegmentContainsData = 8 + SegmentContainsCode = 16 + SegmentDenyWrite = 32 + SegmentDenyExecute = 64
+ + +
[docs]class SettingsScope(enum.IntEnum): + SettingsInvalidScope = 0 + SettingsAutoScope = 1 + SettingsDefaultScope = 2 + SettingsUserScope = 3 + SettingsWorkspaceScope = 4 + SettingsContextScope = 5
+ + +
[docs]class StringType(enum.IntEnum): + AsciiString = 0 + Utf16String = 1 + Utf32String = 2 + Utf8String = 3
+ + +
[docs]class StructureType(enum.IntEnum): + ClassStructureType = 0 + StructStructureType = 1 + UnionStructureType = 2
+ + +
[docs]class SymbolBinding(enum.IntEnum): + NoBinding = 0 + LocalBinding = 1 + GlobalBinding = 2 + WeakBinding = 3
+ + +
[docs]class SymbolType(enum.IntEnum): + FunctionSymbol = 0 + ImportAddressSymbol = 1 + ImportedFunctionSymbol = 2 + DataSymbol = 3 + ImportedDataSymbol = 4 + ExternalSymbol = 5
+ + +
[docs]class TransformType(enum.IntEnum): + BinaryCodecTransform = 0 + TextCodecTransform = 1 + UnicodeCodecTransform = 2 + DecodeTransform = 3 + BinaryEncodeTransform = 4 + TextEncodeTransform = 5 + EncryptTransform = 6 + InvertingTransform = 7 + HashTransform = 8
+ + +
[docs]class TypeClass(enum.IntEnum): + VoidTypeClass = 0 + BoolTypeClass = 1 + IntegerTypeClass = 2 + FloatTypeClass = 3 + StructureTypeClass = 4 + EnumerationTypeClass = 5 + PointerTypeClass = 6 + ArrayTypeClass = 7 + FunctionTypeClass = 8 + VarArgsTypeClass = 9 + ValueTypeClass = 10 + NamedTypeReferenceClass = 11 + WideCharTypeClass = 12
+ + +
[docs]class UpdateResult(enum.IntEnum): + UpdateFailed = 0 + UpdateSuccess = 1 + AlreadyUpToDate = 2 + UpdateAvailable = 3
+ + +
[docs]class VariableSourceType(enum.IntEnum): + StackVariableSourceType = 0 + RegisterVariableSourceType = 1 + FlagVariableSourceType = 2
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/fileaccessor.html b/personal/api-docs/_modules/binaryninja/fileaccessor.html new file mode 100644 index 0000000..141519a --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/fileaccessor.html @@ -0,0 +1,332 @@ + + + + + + + + + + + binaryninja.fileaccessor — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.fileaccessor

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+import traceback
+import ctypes
+
+# Binary Ninja components
+from binaryninja import _binaryninjacore as core
+
+
[docs]class FileAccessor(object): +
[docs] def __init__(self): + self._cb = core.BNFileAccessor() + self._cb.context = 0 + self._cb.getLength = self._cb.getLength.__class__(self._get_length) + self._cb.read = self._cb.read.__class__(self._read) + self._cb.write = self._cb.write.__class__(self._write)
+ + def __len__(self): + return self.get_length() + + def _get_length(self, ctxt): + try: + return self.get_length() + except: + log.log_error(traceback.format_exc()) + return 0 + + def _read(self, ctxt, dest, offset, length): + try: + data = self.read(offset, length) + if data is None: + return 0 + if len(data) > length: + data = data[0:length] + ctypes.memmove(dest, data, len(data)) + return len(data) + except: + log.log_error(traceback.format_exc()) + return 0 + + def _write(self, ctxt, offset, src, length): + try: + data = ctypes.create_string_buffer(length) + ctypes.memmove(data, src, length) + return self.write(offset, data.raw) + except: + log.log_error(traceback.format_exc()) + return 0
+ + +
[docs]class CoreFileAccessor(FileAccessor): +
[docs] def __init__(self, accessor): + self._cb.context = accessor.context + self._cb.getLength = accessor.getLength + self._cb.read = accessor.read + self._cb.write = accessor.write
+ +
[docs] def get_length(self): + return self._cb.getLength(self._cb.context)
+ +
[docs] def read(self, offset, length): + data = ctypes.create_string_buffer(length) + length = self._cb.read(self._cb.context, data, offset, length) + return data.raw[0:length]
+ +
[docs] def write(self, offset, value): + value = str(value) + data = ctypes.create_string_buffer(value) + return self._cb.write(self._cb.context, offset, data, len(value))
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/filemetadata.html b/personal/api-docs/_modules/binaryninja/filemetadata.html new file mode 100644 index 0000000..a038ab0 --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/filemetadata.html @@ -0,0 +1,605 @@ + + + + + + + + + + + binaryninja.filemetadata — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.filemetadata

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+from __future__ import absolute_import
+import traceback
+import ctypes
+
+# Binary Ninja Components
+import binaryninja
+from binaryninja import _binaryninjacore as core
+from binaryninja import associateddatastore #required for _FileMetadataAssociatedDataStore
+from binaryninja import log
+
+
+
+
+class _FileMetadataAssociatedDataStore(associateddatastore._AssociatedDataStore):
+	_defaults = {}
+
+
+
[docs]class FileMetadata(object): + """ + ``class FileMetadata`` represents the file being analyzed by Binary Ninja. It is responsible for opening, + closing, creating the database (.bndb) files, and is used to keep track of undoable actions. + """ + + _associated_data = {} + +
[docs] def __init__(self, filename = None, handle = None): + """ + Instantiates a new FileMetadata class. + + :param filename: The string path to the file to be opened. Defaults to None. + :param handle: A handle to the underlying C FileMetadata object. Defaults to None. + """ + if handle is not None: + self.handle = core.handle_of_type(handle, core.BNFileMetadata) + else: + binaryninja._init_plugins() + self.handle = core.BNCreateFileMetadata() + if filename is not None: + core.BNSetFilename(self.handle, str(filename)) + self.nav = None
+ + def __del__(self): + if self.navigation is not None: + core.BNSetFileMetadataNavigationHandler(self.handle, None) + core.BNFreeFileMetadata(self.handle) + + def __eq__(self, value): + if not isinstance(value, FileMetadata): + return False + return ctypes.addressof(self.handle.contents) == ctypes.addressof(value.handle.contents) + + def __ne__(self, value): + if not isinstance(value, FileMetadata): + return True + return ctypes.addressof(self.handle.contents) != ctypes.addressof(value.handle.contents) + + @classmethod + def _unregister(cls, f): + handle = ctypes.cast(f, ctypes.c_void_p) + if handle.value in cls._associated_data: + del cls._associated_data[handle.value] + +
[docs] @classmethod + def set_default_session_data(cls, name, value): + _FileMetadataAssociatedDataStore.set_default(name, value)
+ + @property + def original_filename(self): + """The original name of the binary opened if a bndb, otherwise reads or sets the current filename (read/write)""" + return core.BNGetOriginalFilename(self.handle) + + @original_filename.setter + def original_filename(self, value): + core.BNSetOriginalFilename(self.handle, str(value)) + + @property + def filename(self): + """The name of the open bndb or binary filename (read/write)""" + return core.BNGetFilename(self.handle) + + @filename.setter + def filename(self, value): + core.BNSetFilename(self.handle, str(value)) + + @property + def modified(self): + """Boolean result of whether the file is modified (Inverse of 'saved' property) (read/write)""" + return core.BNIsFileModified(self.handle) + + @modified.setter + def modified(self, value): + if value: + core.BNMarkFileModified(self.handle) + else: + core.BNMarkFileSaved(self.handle) + + @property + def analysis_changed(self): + """Boolean result of whether the auto-analysis results have changed (read-only)""" + return core.BNIsAnalysisChanged(self.handle) + + @property + def has_database(self): + """Whether the FileMetadata is backed by a database (read-only)""" + return core.BNIsBackedByDatabase(self.handle) + + @property + def view(self): + return core.BNGetCurrentView(self.handle) + + @view.setter + def view(self, value): + core.BNNavigate(self.handle, str(value), core.BNGetCurrentOffset(self.handle)) + + @property + def offset(self): + """The current offset into the file (read/write)""" + return core.BNGetCurrentOffset(self.handle) + + @offset.setter + def offset(self, value): + core.BNNavigate(self.handle, core.BNGetCurrentView(self.handle), value) + + @property + def raw(self): + """Gets the "Raw" BinaryView of the file""" + view = core.BNGetFileViewOfType(self.handle, "Raw") + if view is None: + return None + return binaryninja.binaryview.BinaryView(file_metadata = self, handle = view) + + @property + def saved(self): + """Boolean result of whether the file has been saved (Inverse of 'modified' property) (read/write)""" + return not core.BNIsFileModified(self.handle) + + @saved.setter + def saved(self, value): + if value: + core.BNMarkFileSaved(self.handle) + else: + core.BNMarkFileModified(self.handle) + + @property + def navigation(self): + return self.nav + + @navigation.setter + def navigation(self, value): + value._register(self.handle) + self.nav = value + + @property + def session_data(self): + """Dictionary object where plugins can store arbitrary data associated with the file""" + handle = ctypes.cast(self.handle, ctypes.c_void_p) + if handle.value not in FileMetadata._associated_data: + obj = _FileMetadataAssociatedDataStore() + FileMetadata._associated_data[handle.value] = obj + return obj + else: + return FileMetadata._associated_data[handle.value] + +
[docs] def close(self): + """ + Closes the underlying file handle. It is recommended that this is done in a + `finally` clause to avoid handle leaks. + """ + core.BNCloseFile(self.handle)
+ +
[docs] def begin_undo_actions(self): + """ + ``begin_undo_actions`` start recording actions taken so the can be undone at some point. + + :rtype: None + :Example: + + >>> bv.get_disassembly(0x100012f1) + 'xor eax, eax' + >>> bv.begin_undo_actions() + >>> bv.convert_to_nop(0x100012f1) + True + >>> bv.commit_undo_actions() + >>> bv.get_disassembly(0x100012f1) + 'nop' + >>> bv.undo() + >>> bv.get_disassembly(0x100012f1) + 'xor eax, eax' + >>> + """ + core.BNBeginUndoActions(self.handle)
+ +
[docs] def commit_undo_actions(self): + """ + ``commit_undo_actions`` commit the actions taken since the last commit to the undo database. + + :rtype: None + :Example: + + >>> bv.get_disassembly(0x100012f1) + 'xor eax, eax' + >>> bv.begin_undo_actions() + >>> bv.convert_to_nop(0x100012f1) + True + >>> bv.commit_undo_actions() + >>> bv.get_disassembly(0x100012f1) + 'nop' + >>> bv.undo() + >>> bv.get_disassembly(0x100012f1) + 'xor eax, eax' + >>> + """ + core.BNCommitUndoActions(self.handle)
+ +
[docs] def undo(self): + """ + ``undo`` undo the last commited action in the undo database. + + :rtype: None + :Example: + + >>> bv.get_disassembly(0x100012f1) + 'xor eax, eax' + >>> bv.begin_undo_actions() + >>> bv.convert_to_nop(0x100012f1) + True + >>> bv.commit_undo_actions() + >>> bv.get_disassembly(0x100012f1) + 'nop' + >>> bv.undo() + >>> bv.get_disassembly(0x100012f1) + 'xor eax, eax' + >>> bv.redo() + >>> bv.get_disassembly(0x100012f1) + 'nop' + >>> + """ + core.BNUndo(self.handle)
+ +
[docs] def redo(self): + """ + ``redo`` redo the last commited action in the undo database. + + :rtype: None + :Example: + + >>> bv.get_disassembly(0x100012f1) + 'xor eax, eax' + >>> bv.begin_undo_actions() + >>> bv.convert_to_nop(0x100012f1) + True + >>> bv.commit_undo_actions() + >>> bv.get_disassembly(0x100012f1) + 'nop' + >>> bv.undo() + >>> bv.get_disassembly(0x100012f1) + 'xor eax, eax' + >>> bv.redo() + >>> bv.get_disassembly(0x100012f1) + 'nop' + >>> + """ + core.BNRedo(self.handle)
+ +
[docs] def navigate(self, view, offset): + return core.BNNavigate(self.handle, str(view), offset)
+ +
[docs] def create_database(self, filename, progress_func = None): + if progress_func is None: + return core.BNCreateDatabase(self.raw.handle, str(filename)) + else: + return core.BNCreateDatabaseWithProgress(self.raw.handle, str(filename), None, + ctypes.CFUNCTYPE(None, ctypes.c_void_p, ctypes.c_ulonglong, ctypes.c_ulonglong)( + lambda ctxt, cur, total: progress_func(cur, total)))
+ +
[docs] def open_existing_database(self, filename, progress_func = None): + if progress_func is None: + view = core.BNOpenExistingDatabase(self.handle, str(filename)) + else: + view = core.BNOpenExistingDatabaseWithProgress(self.handle, str(filename), None, + ctypes.CFUNCTYPE(None, ctypes.c_void_p, ctypes.c_ulonglong, ctypes.c_ulonglong)( + lambda ctxt, cur, total: progress_func(cur, total))) + if view is None: + return None + return binaryninja.binaryview.BinaryView(file_metadata = self, handle = view)
+ +
[docs] def save_auto_snapshot(self, progress_func = None): + if progress_func is None: + return core.BNSaveAutoSnapshot(self.raw.handle) + else: + return core.BNSaveAutoSnapshotWithProgress(self.raw.handle, None, + ctypes.CFUNCTYPE(None, ctypes.c_void_p, ctypes.c_ulonglong, ctypes.c_ulonglong)( + lambda ctxt, cur, total: progress_func(cur, total)))
+ +
[docs] def get_view_of_type(self, name): + view = core.BNGetFileViewOfType(self.handle, str(name)) + if view is None: + view_type = core.BNGetBinaryViewTypeByName(str(name)) + if view_type is None: + return None + view = core.BNCreateBinaryViewOfType(view_type, self.raw.handle) + if view is None: + return None + return binaryninja.binaryview.BinaryView(file_metadata = self, handle = view)
+ + def __setattr__(self, name, value): + try: + object.__setattr__(self, name, value) + except AttributeError: + raise AttributeError("attribute '%s' is read only" % name)
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/flowgraph.html b/personal/api-docs/_modules/binaryninja/flowgraph.html new file mode 100644 index 0000000..cdf7a7b --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/flowgraph.html @@ -0,0 +1,862 @@ + + + + + + + + + + + binaryninja.flowgraph — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.flowgraph

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

Source code for binaryninja.function

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+from __future__ import absolute_import
+import threading
+import traceback
+import ctypes
+
+# Binary Ninja components
+import binaryninja
+from binaryninja import _binaryninjacore as core
+from binaryninja import associateddatastore  # Required in the main scope due to being an argument for _FunctionAssociatedDataStore
+from binaryninja import highlight
+from binaryninja import log
+from binaryninja import types
+from binaryninja.enums import (AnalysisSkipReason, FunctionGraphType, BranchType, SymbolType, InstructionTextTokenType,
+	HighlightStandardColor, HighlightColorStyle, RegisterValueType, ImplicitRegisterExtend,
+	DisassemblyOption, IntegerDisplayType, InstructionTextTokenContext, VariableSourceType,
+	FunctionAnalysisSkipOverride)
+
+# 2-3 compatibility
+from binaryninja import range
+
+
+
[docs]class LookupTableEntry(object): +
[docs] def __init__(self, from_values, to_value): + self.from_values = from_values + self.to_value = to_value
+ + def __repr__(self): + return "[%s] -> %#x" % (', '.join(["%#x" % i for i in self.from_values]), self.to_value)
+ + +
[docs]class RegisterValue(object): +
[docs] def __init__(self, arch = None, value = None, confidence = types.max_confidence): + self.is_constant = False + if value is None: + self.type = RegisterValueType.UndeterminedValue + else: + self.type = RegisterValueType(value.state) + if value.state == RegisterValueType.EntryValue: + self.arch = arch + if arch is not None: + self.reg = arch.get_reg_name(value.value) + else: + self.reg = value.value + elif (value.state == RegisterValueType.ConstantValue) or (value.state == RegisterValueType.ConstantPointerValue): + self.value = value.value + self.is_constant = True + elif value.state == RegisterValueType.StackFrameOffset: + self.offset = value.value + elif value.state == RegisterValueType.ImportedAddressValue: + self.value = value.value + self.confidence = confidence
+ + def __repr__(self): + if self.type == RegisterValueType.EntryValue: + return "<entry %s>" % self.reg + if self.type == RegisterValueType.ConstantValue: + return "<const %#x>" % self.value + if self.type == RegisterValueType.ConstantPointerValue: + return "<const ptr %#x>" % self.value + if self.type == RegisterValueType.StackFrameOffset: + return "<stack frame offset %#x>" % self.offset + if self.type == RegisterValueType.ReturnAddressValue: + return "<return address>" + if self.type == RegisterValueType.ImportedAddressValue: + return "<imported address from entry %#x>" % self.value + return "<undetermined>" + + def _to_api_object(self): + result = core.BNRegisterValue() + result.state = self.type + result.value = 0 + if self.type == RegisterValueType.EntryValue: + if self.arch is not None: + result.value = self.arch.get_reg_index(self.reg) + else: + result.value = self.reg + elif (self.type == RegisterValueType.ConstantValue) or (self.type == RegisterValueType.ConstantPointerValue): + result.value = self.value + elif self.type == RegisterValueType.StackFrameOffset: + result.value = self.offset + elif self.type == RegisterValueType.ImportedAddressValue: + result.value = self.value + return result + +
[docs] @classmethod + def undetermined(self): + return RegisterValue()
+ +
[docs] @classmethod + def entry_value(self, arch, reg): + result = RegisterValue() + result.type = RegisterValueType.EntryValue + result.arch = arch + result.reg = reg + return result
+ +
[docs] @classmethod + def constant(self, value): + result = RegisterValue() + result.type = RegisterValueType.ConstantValue + result.value = value + result.is_constant = True + return result
+ +
[docs] @classmethod + def constant_ptr(self, value): + result = RegisterValue() + result.type = RegisterValueType.ConstantPointerValue + result.value = value + result.is_constant = True + return result
+ +
[docs] @classmethod + def stack_frame_offset(self, offset): + result = RegisterValue() + result.type = RegisterValueType.StackFrameOffset + result.offset = offset + return result
+ +
[docs] @classmethod + def imported_address(self, value): + result = RegisterValue() + result.type = RegisterValueType.ImportedAddressValue + result.value = value + return result
+ +
[docs] @classmethod + def return_address(self): + result = RegisterValue() + result.type = RegisterValueType.ReturnAddressValue + return result
+ + +
[docs]class ValueRange(object): +
[docs] def __init__(self, start, end, step): + self.start = start + self.end = end + self.step = step
+ + def __repr__(self): + if self.step == 1: + return "<range: %#x to %#x>" % (self.start, self.end) + return "<range: %#x to %#x, step %#x>" % (self.start, self.end, self.step)
+ + +
[docs]class PossibleValueSet(object): +
[docs] def __init__(self, arch, value): + self.type = RegisterValueType(value.state) + if value.state == RegisterValueType.EntryValue: + self.reg = arch.get_reg_name(value.value) + elif value.state == RegisterValueType.ConstantValue: + self.value = value.value + elif value.state == RegisterValueType.ConstantPointerValue: + self.value = value.value + elif value.state == RegisterValueType.StackFrameOffset: + self.offset = value.value + elif value.state == RegisterValueType.SignedRangeValue: + self.offset = value.value + self.ranges = [] + for i in range(0, value.count): + start = value.ranges[i].start + end = value.ranges[i].end + step = value.ranges[i].step + if start & (1 << 63): + start |= ~((1 << 63) - 1) + if end & (1 << 63): + end |= ~((1 << 63) - 1) + self.ranges.append(ValueRange(start, end, step)) + elif value.state == RegisterValueType.UnsignedRangeValue: + self.offset = value.value + self.ranges = [] + for i in range(0, value.count): + start = value.ranges[i].start + end = value.ranges[i].end + step = value.ranges[i].step + self.ranges.append(ValueRange(start, end, step)) + elif value.state == RegisterValueType.LookupTableValue: + self.table = [] + self.mapping = {} + for i in range(0, value.count): + from_list = [] + for j in range(0, value.table[i].fromCount): + from_list.append(value.table[i].fromValues[j]) + self.mapping[value.table[i].fromValues[j]] = value.table[i].toValue + self.table.append(LookupTableEntry(from_list, value.table[i].toValue)) + elif (value.state == RegisterValueType.InSetOfValues) or (value.state == RegisterValueType.NotInSetOfValues): + self.values = set() + for i in range(0, value.count): + self.values.add(value.valueSet[i])
+ + def __repr__(self): + if self.type == RegisterValueType.EntryValue: + return "<entry %s>" % self.reg + if self.type == RegisterValueType.ConstantValue: + return "<const %#x>" % self.value + if self.type == RegisterValueType.ConstantPointerValue: + return "<const ptr %#x>" % self.value + if self.type == RegisterValueType.StackFrameOffset: + return "<stack frame offset %#x>" % self.offset + if self.type == RegisterValueType.SignedRangeValue: + return "<signed ranges: %s>" % repr(self.ranges) + if self.type == RegisterValueType.UnsignedRangeValue: + return "<unsigned ranges: %s>" % repr(self.ranges) + if self.type == RegisterValueType.LookupTableValue: + return "<table: %s>" % ', '.join([repr(i) for i in self.table]) + if self.type == RegisterValueType.InSetOfValues: + return "<in set(%s)>" % '[{}]'.format(', '.join(hex(i) for i in sorted(self.values))) + if self.type == RegisterValueType.NotInSetOfValues: + return "<not in set(%s)>" % '[{}]'.format(', '.join(hex(i) for i in sorted(self.values))) + if self.type == RegisterValueType.ReturnAddressValue: + return "<return address>" + return "<undetermined>"
+ + +
[docs]class StackVariableReference(object): +
[docs] def __init__(self, src_operand, t, name, var, ref_ofs, size): + self.source_operand = src_operand + self.type = t + self.name = name + self.var = var + self.referenced_offset = ref_ofs + self.size = size + if self.source_operand == 0xffffffff: + self.source_operand = None
+ + def __repr__(self): + if self.source_operand is None: + if self.referenced_offset != self.var.storage: + return "<ref to %s%+#x>" % (self.name, self.referenced_offset - self.var.storage) + return "<ref to %s>" % self.name + if self.referenced_offset != self.var.storage: + return "<operand %d ref to %s%+#x>" % (self.source_operand, self.name, self.var.storage) + return "<operand %d ref to %s>" % (self.source_operand, self.name)
+ + +
[docs]class Variable(object): +
[docs] def __init__(self, func, source_type, index, storage, name = None, var_type = None): + self.function = func + self.source_type = VariableSourceType(source_type) + self.index = index + self.storage = storage + + var = core.BNVariable() + var.type = source_type + var.index = index + var.storage = storage + self.identifier = core.BNToVariableIdentifier(var) + + if func is not None: + if name is None: + name = core.BNGetVariableName(func.handle, var) + if var_type is None: + var_type_conf = core.BNGetVariableType(func.handle, var) + if var_type_conf.type: + var_type = types.Type(var_type_conf.type, platform = func.platform, confidence = var_type_conf.confidence) + else: + var_type = None + + self.name = name + self.type = var_type
+ +
[docs] @classmethod + def from_identifier(self, func, identifier, name = None, var_type = None): + var = core.BNFromVariableIdentifier(identifier) + return Variable(func, VariableSourceType(var.type), var.index, var.storage, name, var_type)
+ + def __repr__(self): + if self.type is None: + return "<var %s>" % self.name + return "<var %s %s%s>" % (self.type.get_string_before_name(), self.name, self.type.get_string_after_name()) + + def __str__(self): + return self.name + + def __eq__(self, other): + if not isinstance(other, Variable): + return False + return (self.identifier, self.function) == (other.identifier, other.function) + + def __hash__(self): + return hash((self.identifier, self.function))
+ + +
[docs]class ConstantReference(object): +
[docs] def __init__(self, val, size, ptr, intermediate): + self.value = val + self.size = size + self.pointer = ptr + self.intermediate = intermediate
+ + def __repr__(self): + if self.pointer: + return "<constant pointer %#x>" % self.value + if self.size == 0: + return "<constant %#x>" % self.value + return "<constant %#x size %d>" % (self.value, self.size)
+ + +
[docs]class IndirectBranchInfo(object): +
[docs] def __init__(self, source_arch, source_addr, dest_arch, dest_addr, auto_defined): + self.source_arch = source_arch + self.source_addr = source_addr + self.dest_arch = dest_arch + self.dest_addr = dest_addr + self.auto_defined = auto_defined
+ + def __repr__(self): + return "<branch %s:%#x -> %s:%#x>" % (self.source_arch.name, self.source_addr, self.dest_arch.name, self.dest_addr)
+ + +
[docs]class ParameterVariables(object): +
[docs] def __init__(self, var_list, confidence = types.max_confidence): + self.vars = var_list + self.confidence = confidence
+ + def __repr__(self): + return repr(self.vars) + + def __iter__(self): + for var in self.vars: + yield var + + def __getitem__(self, idx): + return self.vars[idx] + + def __len__(self): + return len(self.vars) + +
[docs] def with_confidence(self, confidence): + return ParameterVariables(list(self.vars), confidence = confidence)
+ + +class _FunctionAssociatedDataStore(associateddatastore._AssociatedDataStore): + _defaults = {} + + +
[docs]class Function(object): + _associated_data = {} + +
[docs] def __init__(self, view = None, handle = None): + self._advanced_analysis_requests = 0 + if handle is None: + self.handle = None + raise NotImplementedError("creation of standalone 'Function' objects is not implemented") + self.handle = core.handle_of_type(handle, core.BNFunction) + if view is None: + self._view = binaryninja.binaryview.BinaryView(handle = core.BNGetFunctionData(self.handle)) + else: + self._view = view + self._arch = None + self._platform = None
+ + def __del__(self): + if self.handle is not None: + if self._advanced_analysis_requests > 0: + core.BNReleaseAdvancedFunctionAnalysisDataMultiple(self.handle, self._advanced_analysis_requests) + core.BNFreeFunction(self.handle) + + def __eq__(self, value): + if not isinstance(value, Function): + return False + return ctypes.addressof(self.handle.contents) == ctypes.addressof(value.handle.contents) + + def __ne__(self, value): + if not isinstance(value, Function): + return True + return ctypes.addressof(self.handle.contents) != ctypes.addressof(value.handle.contents) + + def __hash__(self): + return hash((self.start, self.arch.name, self.platform.name)) + + def __getitem__(self, i): + count = ctypes.c_ulonglong() + blocks = core.BNGetFunctionBasicBlockList(self.handle, count) + try: + if i < 0: + i = count.value + i + if i < 0 or i >= count.value: + raise IndexError("index out of range") + block = binaryninja.basicblock.BasicBlock(core.BNNewBasicBlockReference(blocks[i]), self._view) + return block + finally: + core.BNFreeBasicBlockList(blocks, count.value) + + def __iter__(self): + count = ctypes.c_ulonglong() + blocks = core.BNGetFunctionBasicBlockList(self.handle, count) + try: + for i in range(0, count.value): + yield binaryninja.basicblock.BasicBlock(core.BNNewBasicBlockReference(blocks[i]), self._view) + finally: + core.BNFreeBasicBlockList(blocks, count.value) + + def __setattr__(self, name, value): + try: + object.__setattr__(self, name, value) + except AttributeError: + raise AttributeError("attribute '%s' is read only" % name) + + def __repr__(self): + arch = self.arch + if arch: + return "<func: %s@%#x>" % (arch.name, self.start) + else: + return "<func: %#x>" % self.start + + @classmethod + def _unregister(cls, func): + handle = ctypes.cast(func, ctypes.c_void_p) + if handle.value in cls._associated_data: + del cls._associated_data[handle.value] + +
[docs] @classmethod + def set_default_session_data(cls, name, value): + _FunctionAssociatedDataStore.set_default(name, value)
+ + @property + def name(self): + """Symbol name for the function""" + return self.symbol.name + + @name.setter + def name(self, value): + if value is None: + if self.symbol is not None: + self.view.undefine_user_symbol(self.symbol) + else: + symbol = types.Symbol(SymbolType.FunctionSymbol, self.start, value) + self.view.define_user_symbol(symbol) + + @property + def view(self): + """Function view (read-only)""" + return self._view + + @property + def arch(self): + """Function architecture (read-only)""" + if self._arch: + return self._arch + else: + arch = core.BNGetFunctionArchitecture(self.handle) + if arch is None: + return None + self._arch = binaryninja.architecture.CoreArchitecture._from_cache(arch) + return self._arch + + @property + def platform(self): + """Function platform (read-only)""" + if self._platform: + return self._platform + else: + plat = core.BNGetFunctionPlatform(self.handle) + if plat is None: + return None + self._platform = binaryninja.platform.Platform(handle = plat) + return self._platform + + @property + def start(self): + """Function start (read-only)""" + return core.BNGetFunctionStart(self.handle) + + @property + def symbol(self): + """Function symbol(read-only)""" + sym = core.BNGetFunctionSymbol(self.handle) + if sym is None: + return None + return types.Symbol(None, None, None, handle = sym) + + @property + def auto(self): + """Whether function was automatically discovered (read-only)""" + return core.BNWasFunctionAutomaticallyDiscovered(self.handle) + + @property + def can_return(self): + """Whether function can return""" + result = core.BNCanFunctionReturn(self.handle) + return types.BoolWithConfidence(result.value, confidence = result.confidence) + + @can_return.setter + def can_return(self, value): + bc = core.BNBoolWithConfidence() + bc.value = bool(value) + if hasattr(value, 'confidence'): + bc.confidence = value.confidence + else: + bc.confidence = types.max_confidence + core.BNSetUserFunctionCanReturn(self.handle, bc) + + @property + def explicitly_defined_type(self): + """Whether function has explicitly defined types (read-only)""" + return core.BNFunctionHasExplicitlyDefinedType(self.handle) + + @property + def needs_update(self): + """Whether the function has analysis that needs to be updated (read-only)""" + return core.BNIsFunctionUpdateNeeded(self.handle) + + @property + def basic_blocks(self): + """List of basic blocks (read-only)""" + count = ctypes.c_ulonglong() + blocks = core.BNGetFunctionBasicBlockList(self.handle, count) + result = [] + for i in range(0, count.value): + result.append(binaryninja.basicblock.BasicBlock(core.BNNewBasicBlockReference(blocks[i]), self._view)) + core.BNFreeBasicBlockList(blocks, count.value) + return result + + @property + def comments(self): + """Dict of comments (read-only)""" + count = ctypes.c_ulonglong() + addrs = core.BNGetCommentedAddresses(self.handle, count) + result = {} + for i in range(0, count.value): + result[addrs[i]] = self.get_comment_at(addrs[i]) + core.BNFreeAddressList(addrs) + return result + + @property + def low_level_il(self): + """Deprecated property provided for compatibility. Use llil instead.""" + return binaryninja.lowlevelil.LowLevelILFunction(self.arch, core.BNGetFunctionLowLevelIL(self.handle), self) + + @property + def llil(self): + """returns LowLevelILFunction used to represent Function low level IL (read-only)""" + return binaryninja.lowlevelil.LowLevelILFunction(self.arch, core.BNGetFunctionLowLevelIL(self.handle), self) + + @property + def lifted_il(self): + """returns LowLevelILFunction used to represent lifted IL (read-only)""" + return binaryninja.lowlevelil.LowLevelILFunction(self.arch, core.BNGetFunctionLiftedIL(self.handle), self) + + @property + def medium_level_il(self): + """Deprecated property provided for compatibility. Use mlil instead.""" + return binaryninja.mediumlevelil.MediumLevelILFunction(self.arch, core.BNGetFunctionMediumLevelIL(self.handle), self) + + @property + def mlil(self): + """Function medium level IL (read-only)""" + return binaryninja.mediumlevelil.MediumLevelILFunction(self.arch, core.BNGetFunctionMediumLevelIL(self.handle), self) + + @property + def function_type(self): + """Function type object""" + return types.Type(core.BNGetFunctionType(self.handle), platform = self.platform) + + @function_type.setter + def function_type(self, value): + self.set_user_type(value) + + @property + def stack_layout(self): + """List of function stack variables (read-only)""" + count = ctypes.c_ulonglong() + v = core.BNGetStackLayout(self.handle, count) + result = [] + for i in range(0, count.value): + result.append(Variable(self, v[i].var.type, v[i].var.index, v[i].var.storage, v[i].name, + types.Type(handle = core.BNNewTypeReference(v[i].type), platform = self.platform, confidence = v[i].typeConfidence))) + result.sort(key = lambda x: x.identifier) + core.BNFreeVariableNameAndTypeList(v, count.value) + return result + + @property + def vars(self): + """List of function variables (read-only)""" + count = ctypes.c_ulonglong() + v = core.BNGetFunctionVariables(self.handle, count) + result = [] + for i in range(0, count.value): + result.append(Variable(self, v[i].var.type, v[i].var.index, v[i].var.storage, v[i].name, + types.Type(handle = core.BNNewTypeReference(v[i].type), platform = self.platform, confidence = v[i].typeConfidence))) + result.sort(key = lambda x: x.identifier) + core.BNFreeVariableNameAndTypeList(v, count.value) + return result + + @property + def indirect_branches(self): + """List of indirect branches (read-only)""" + count = ctypes.c_ulonglong() + branches = core.BNGetIndirectBranches(self.handle, count) + result = [] + for i in range(0, count.value): + result.append(IndirectBranchInfo(binaryninja.architecture.CoreArchitecture._from_cache(branches[i].sourceArch), branches[i].sourceAddr, binaryninja.architecture.CoreArchitecture._from_cache(branches[i].destArch), branches[i].destAddr, branches[i].autoDefined)) + core.BNFreeIndirectBranchList(branches) + return result + + @property + def session_data(self): + """Dictionary object where plugins can store arbitrary data associated with the function""" + handle = ctypes.cast(self.handle, ctypes.c_void_p) + if handle.value not in Function._associated_data: + obj = _FunctionAssociatedDataStore() + Function._associated_data[handle.value] = obj + return obj + else: + return Function._associated_data[handle.value] + + @property + def analysis_performance_info(self): + count = ctypes.c_ulonglong() + info = core.BNGetFunctionAnalysisPerformanceInfo(self.handle, count) + result = {} + for i in range(0, count.value): + result[info[i].name] = info[i].seconds + core.BNFreeAnalysisPerformanceInfo(info, count.value) + return result + + @property + def type_tokens(self): + """Text tokens for this function's prototype""" + return self.get_type_tokens()[0].tokens + + @property + def return_type(self): + """Return type of the function""" + result = core.BNGetFunctionReturnType(self.handle) + if not result.type: + return None + return types.Type(result.type, platform = self.platform, confidence = result.confidence) + + @return_type.setter + def return_type(self, value): + type_conf = core.BNTypeWithConfidence() + if value is None: + type_conf.type = None + type_conf.confidence = 0 + else: + type_conf.type = value.handle + type_conf.confidence = value.confidence + core.BNSetUserFunctionReturnType(self.handle, type_conf) + + @property + def return_regs(self): + """Registers that are used for the return value""" + result = core.BNGetFunctionReturnRegisters(self.handle) + reg_set = [] + for i in range(0, result.count): + reg_set.append(self.arch.get_reg_name(result.regs[i])) + regs = types.RegisterSet(reg_set, confidence = result.confidence) + core.BNFreeRegisterSet(result) + return regs + + @return_regs.setter + def return_regs(self, value): + regs = core.BNRegisterSetWithConfidence() + regs.regs = (ctypes.c_uint * len(value))() + regs.count = len(value) + for i in range(0, len(value)): + regs.regs[i] = self.arch.get_reg_index(value[i]) + if hasattr(value, 'confidence'): + regs.confidence = value.confidence + else: + regs.confidence = types.max_confidence + core.BNSetUserFunctionReturnRegisters(self.handle, regs) + + @property + def calling_convention(self): + """Calling convention used by the function""" + result = core.BNGetFunctionCallingConvention(self.handle) + if not result.convention: + return None + return binaryninja.callingconvention.CallingConvention(None, handle = result.convention, confidence = result.confidence) + + @calling_convention.setter + def calling_convention(self, value): + conv_conf = core.BNCallingConventionWithConfidence() + if value is None: + conv_conf.convention = None + conv_conf.confidence = 0 + else: + conv_conf.convention = value.handle + conv_conf.confidence = value.confidence + core.BNSetUserFunctionCallingConvention(self.handle, conv_conf) + + @property + def parameter_vars(self): + """List of variables for the incoming function parameters""" + result = core.BNGetFunctionParameterVariables(self.handle) + var_list = [] + for i in range(0, result.count): + var_list.append(Variable(self, result.vars[i].type, result.vars[i].index, result.vars[i].storage)) + confidence = result.confidence + core.BNFreeParameterVariables(result) + return ParameterVariables(var_list, confidence = confidence) + + @parameter_vars.setter + def parameter_vars(self, value): + if value is None: + var_list = [] + else: + var_list = list(value) + var_conf = core.BNParameterVariablesWithConfidence() + var_conf.vars = (core.BNVariable * len(var_list))() + var_conf.count = len(var_list) + for i in range(0, len(var_list)): + var_conf.vars[i].type = var_list[i].source_type + var_conf.vars[i].index = var_list[i].index + var_conf.vars[i].storage = var_list[i].storage + if value is None: + var_conf.confidence = 0 + elif hasattr(value, 'confidence'): + var_conf.confidence = value.confidence + else: + var_conf.confidence = types.max_confidence + core.BNSetUserFunctionParameterVariables(self.handle, var_conf) + + @property + def has_variable_arguments(self): + """Whether the function takes a variable number of arguments""" + result = core.BNFunctionHasVariableArguments(self.handle) + return types.BoolWithConfidence(result.value, confidence = result.confidence) + + @has_variable_arguments.setter + def has_variable_arguments(self, value): + bc = core.BNBoolWithConfidence() + bc.value = bool(value) + if hasattr(value, 'confidence'): + bc.confidence = value.confidence + else: + bc.confidence = types.max_confidence + core.BNSetUserFunctionHasVariableArguments(self.handle, bc) + + @property + def stack_adjustment(self): + """Number of bytes removed from the stack after return""" + result = core.BNGetFunctionStackAdjustment(self.handle) + return types.SizeWithConfidence(result.value, confidence = result.confidence) + + @stack_adjustment.setter + def stack_adjustment(self, value): + oc = core.BNOffsetWithConfidence() + oc.value = int(value) + if hasattr(value, 'confidence'): + oc.confidence = value.confidence + else: + oc.confidence = types.max_confidence + core.BNSetUserFunctionStackAdjustment(self.handle, oc) + + @property + def reg_stack_adjustments(self): + """Number of entries removed from each register stack after return""" + count = ctypes.c_ulonglong() + adjust = core.BNGetFunctionRegisterStackAdjustments(self.handle, count) + result = {} + for i in range(0, count.value): + name = self.arch.get_reg_stack_name(adjust[i].regStack) + value = types.RegisterStackAdjustmentWithConfidence(adjust[i].adjustment, + confidence = adjust[i].confidence) + result[name] = value + core.BNFreeRegisterStackAdjustments(adjust) + return result + + @reg_stack_adjustments.setter + def reg_stack_adjustments(self, value): + adjust = (core.BNRegisterStackAdjustment * len(value))() + i = 0 + for reg_stack in value.keys(): + adjust[i].regStack = self.arch.get_reg_stack_index(reg_stack) + if isinstance(value[reg_stack], types.RegisterStackAdjustmentWithConfidence): + adjust[i].adjustment = value[reg_stack].value + adjust[i].confidence = value[reg_stack].confidence + else: + adjust[i].adjustment = value[reg_stack] + adjust[i].confidence = types.max_confidence + i += 1 + core.BNSetUserFunctionRegisterStackAdjustments(self.handle, adjust, len(value)) + + @property + def clobbered_regs(self): + """Registers that are modified by this function""" + result = core.BNGetFunctionClobberedRegisters(self.handle) + reg_set = [] + for i in range(0, result.count): + reg_set.append(self.arch.get_reg_name(result.regs[i])) + regs = types.RegisterSet(reg_set, confidence = result.confidence) + core.BNFreeRegisterSet(result) + return regs + + @clobbered_regs.setter + def clobbered_regs(self, value): + regs = core.BNRegisterSetWithConfidence() + regs.regs = (ctypes.c_uint * len(value))() + regs.count = len(value) + for i in range(0, len(value)): + regs.regs[i] = self.arch.get_reg_index(value[i]) + if hasattr(value, 'confidence'): + regs.confidence = value.confidence + else: + regs.confidence = types.max_confidence + core.BNSetUserFunctionClobberedRegisters(self.handle, regs) + + @property + def global_pointer_value(self): + """Discovered value of the global pointer register, if the function uses one (read-only)""" + result = core.BNGetFunctionGlobalPointerValue(self.handle) + return RegisterValue(self.arch, result.value, confidence = result.confidence) + + @property + def comment(self): + """Gets the comment for the current function""" + return core.BNGetFunctionComment(self.handle) + + @comment.setter + def comment(self, comment): + """Sets a comment for the current function""" + return core.BNSetFunctionComment(self.handle, comment) + + @property + def llil_basic_blocks(self): + """A generator of all LowLevelILBasicBlock objects in the current function""" + for block in self.llil: + yield block + + @property + def mlil_basic_blocks(self): + """A generator of all MediumLevelILBasicBlock objects in the current function""" + for block in self.mlil: + yield block + + @property + def instructions(self): + """A generator of instruction tokens and their start addresses for the current function""" + for block in self.basic_blocks: + start = block.start + for i in block: + yield (i[0], start) + start += i[1] + + @property + def llil_instructions(self): + """Deprecated method provided for compatibility. Use llil.instructions instead. Was: A generator of llil instructions of the current function""" + return self.llil.instructions + + @property + def mlil_instructions(self): + """Deprecated method provided for compatibility. Use mlil.instructions instead. Was: A generator of mlil instructions of the current function""" + return self.mlil.instructions + + @property + def too_large(self): + """Whether the function is too large to automatically perform analysis (read-only)""" + return core.BNIsFunctionTooLarge(self.handle) + + @property + def analysis_skipped(self): + """Whether automatic analysis was skipped for this function""" + return core.BNIsFunctionAnalysisSkipped(self.handle) + + @property + def analysis_skip_reason(self): + """Function analysis skip reason""" + return AnalysisSkipReason(core.BNGetAnalysisSkipReason(self.handle)) + + @analysis_skipped.setter + def analysis_skipped(self, skip): + if skip: + core.BNSetFunctionAnalysisSkipOverride(self.handle, FunctionAnalysisSkipOverride.AlwaysSkipFunctionAnalysis) + else: + core.BNSetFunctionAnalysisSkipOverride(self.handle, FunctionAnalysisSkipOverride.NeverSkipFunctionAnalysis) + + @property + def analysis_skip_override(self): + """Override for skipping of automatic analysis""" + return FunctionAnalysisSkipOverride(core.BNGetFunctionAnalysisSkipOverride(self.handle)) + + @analysis_skip_override.setter + def analysis_skip_override(self, override): + core.BNSetFunctionAnalysisSkipOverride(self.handle, override) + + @property + def unresolved_stack_adjustment_graph(self): + """Flow graph of unresolved stack adjustments (read-only)""" + graph = core.BNGetUnresolvedStackAdjustmentGraph(self.handle) + if not graph: + return None + return binaryninja.flowgraph.CoreFlowGraph(graph) + +
[docs] def mark_recent_use(self): + core.BNMarkFunctionAsRecentlyUsed(self.handle)
+ +
[docs] def get_comment_at(self, addr): + return core.BNGetCommentForAddress(self.handle, addr)
+ +
[docs] def set_comment(self, addr, comment): + """Deprecated method provided for compatibility. Use set_comment_at instead.""" + core.BNSetCommentForAddress(self.handle, addr, comment)
+ +
[docs] def set_comment_at(self, addr, comment): + """ + ``set_comment_at`` sets a comment for the current function at the address specified + + :param addr int: virtual address within the current function to apply the comment to + :param comment str: string comment to apply + :rtype: None + :Example: + + >>> current_function.set_comment_at(here, "hi") + + """ + core.BNSetCommentForAddress(self.handle, addr, comment)
+ +
[docs] def get_low_level_il_at(self, addr, arch=None): + """ + ``get_low_level_il_at`` gets the LowLevelILInstruction corresponding to the given virtual address + + :param int addr: virtual address of the function to be queried + :param Architecture arch: (optional) Architecture for the given function + :rtype: LowLevelILInstruction + :Example: + + >>> func = bv.functions[0] + >>> func.get_low_level_il_at(func.start) + <il: push(rbp)> + """ + if arch is None: + arch = self.arch + + idx = core.BNGetLowLevelILForInstruction(self.handle, arch.handle, addr) + + if idx == len(self.llil): + return None + + return self.llil[idx]
+ +
[docs] def get_low_level_il_exits_at(self, addr, arch=None): + if arch is None: + arch = self.arch + count = ctypes.c_ulonglong() + exits = core.BNGetLowLevelILExitsForInstruction(self.handle, arch.handle, addr, count) + result = [] + for i in range(0, count.value): + result.append(exits[i]) + core.BNFreeILInstructionList(exits) + return result
+ +
[docs] def get_reg_value_at(self, addr, reg, arch=None): + """ + ``get_reg_value_at`` gets the value the provided string register address corresponding to the given virtual address + + :param int addr: virtual address of the instruction to query + :param str reg: string value of native register to query + :param Architecture arch: (optional) Architecture for the given function + :rtype: binaryninja.function.RegisterValue + :Example: + + >>> func.get_reg_value_at(0x400dbe, 'rdi') + <const 0x2> + """ + if arch is None: + arch = self.arch + reg = arch.get_reg_index(reg) + value = core.BNGetRegisterValueAtInstruction(self.handle, arch.handle, addr, reg) + result = RegisterValue(arch, value) + return result
+ +
[docs] def get_reg_value_after(self, addr, reg, arch=None): + """ + ``get_reg_value_after`` gets the value instruction address corresponding to the given virtual address + + :param int addr: virtual address of the instruction to query + :param str reg: string value of native register to query + :param Architecture arch: (optional) Architecture for the given function + :rtype: binaryninja.function.RegisterValue + :Example: + + >>> func.get_reg_value_after(0x400dbe, 'rdi') + <undetermined> + """ + if arch is None: + arch = self.arch + reg = arch.get_reg_index(reg) + value = core.BNGetRegisterValueAfterInstruction(self.handle, arch.handle, addr, reg) + result = RegisterValue(arch, value) + return result
+ +
[docs] def get_stack_contents_at(self, addr, offset, size, arch=None): + """ + ``get_stack_contents_at`` returns the RegisterValue for the item on the stack in the current function at the + given virtual address ``addr``, stack offset ``offset`` and size of ``size``. Optionally specifying the architecture. + + :param int addr: virtual address of the instruction to query + :param int offset: stack offset base of stack + :param int size: size of memory to query + :param Architecture arch: (optional) Architecture for the given function + :rtype: binaryninja.function.RegisterValue + + .. note:: Stack base is zero on entry into the function unless the architecture places the return address on the + stack as in (x86/x86_64) where the stack base will start at address_size + + :Example: + + >>> func.get_stack_contents_at(0x400fad, -16, 4) + <range: 0x8 to 0xffffffff> + """ + if arch is None: + arch = self.arch + value = core.BNGetStackContentsAtInstruction(self.handle, arch.handle, addr, offset, size) + result = RegisterValue(arch, value) + return result
+ +
[docs] def get_stack_contents_after(self, addr, offset, size, arch=None): + if arch is None: + arch = self.arch + value = core.BNGetStackContentsAfterInstruction(self.handle, arch.handle, addr, offset, size) + result = RegisterValue(arch, value) + return result
+ +
[docs] def get_parameter_at(self, addr, func_type, i, arch=None): + if arch is None: + arch = self.arch + if func_type is not None: + func_type = func_type.handle + value = core.BNGetParameterValueAtInstruction(self.handle, arch.handle, addr, func_type, i) + result = RegisterValue(arch, value) + return result
+ +
[docs] def get_parameter_at_low_level_il_instruction(self, instr, func_type, i): + if func_type is not None: + func_type = func_type.handle + value = core.BNGetParameterValueAtLowLevelILInstruction(self.handle, instr, func_type, i) + result = RegisterValue(self.arch, value) + return result
+ +
[docs] def get_regs_read_by(self, addr, arch=None): + if arch is None: + arch = self.arch + count = ctypes.c_ulonglong() + regs = core.BNGetRegistersReadByInstruction(self.handle, arch.handle, addr, count) + result = [] + for i in range(0, count.value): + result.append(arch.get_reg_name(regs[i])) + core.BNFreeRegisterList(regs) + return result
+ +
[docs] def get_regs_written_by(self, addr, arch=None): + if arch is None: + arch = self.arch + count = ctypes.c_ulonglong() + regs = core.BNGetRegistersWrittenByInstruction(self.handle, arch.handle, addr, count) + result = [] + for i in range(0, count.value): + result.append(arch.get_reg_name(regs[i])) + core.BNFreeRegisterList(regs) + return result
+ +
[docs] def get_stack_vars_referenced_by(self, addr, arch=None): + if arch is None: + arch = self.arch + count = ctypes.c_ulonglong() + refs = core.BNGetStackVariablesReferencedByInstruction(self.handle, arch.handle, addr, count) + result = [] + for i in range(0, count.value): + var_type = types.Type(core.BNNewTypeReference(refs[i].type), platform = self.platform, confidence = refs[i].typeConfidence) + result.append(StackVariableReference(refs[i].sourceOperand, var_type, + refs[i].name, Variable.from_identifier(self, refs[i].varIdentifier, refs[i].name, var_type), + refs[i].referencedOffset, refs[i].size)) + core.BNFreeStackVariableReferenceList(refs, count.value) + return result
+ +
[docs] def get_constants_referenced_by(self, addr, arch=None): + if arch is None: + arch = self.arch + count = ctypes.c_ulonglong() + refs = core.BNGetConstantsReferencedByInstruction(self.handle, arch.handle, addr, count) + result = [] + for i in range(0, count.value): + result.append(ConstantReference(refs[i].value, refs[i].size, refs[i].pointer, refs[i].intermediate)) + core.BNFreeConstantReferenceList(refs) + return result
+ +
[docs] def get_lifted_il_at(self, addr, arch=None): + if arch is None: + arch = self.arch + + idx = core.BNGetLiftedILForInstruction(self.handle, arch.handle, addr) + + if idx == len(self.lifted_il): + return None + + return self.lifted_il[idx]
+ +
[docs] def get_lifted_il_flag_uses_for_definition(self, i, flag): + flag = self.arch.get_flag_index(flag) + count = ctypes.c_ulonglong() + instrs = core.BNGetLiftedILFlagUsesForDefinition(self.handle, i, flag, count) + result = [] + for i in range(0, count.value): + result.append(instrs[i]) + core.BNFreeILInstructionList(instrs) + return result
+ +
[docs] def get_lifted_il_flag_definitions_for_use(self, i, flag): + flag = self.arch.get_flag_index(flag) + count = ctypes.c_ulonglong() + instrs = core.BNGetLiftedILFlagDefinitionsForUse(self.handle, i, flag, count) + result = [] + for i in range(0, count.value): + result.append(instrs[i]) + core.BNFreeILInstructionList(instrs) + return result
+ +
[docs] def get_flags_read_by_lifted_il_instruction(self, i): + count = ctypes.c_ulonglong() + flags = core.BNGetFlagsReadByLiftedILInstruction(self.handle, i, count) + result = [] + for i in range(0, count.value): + result.append(self.arch._flags_by_index[flags[i]]) + core.BNFreeRegisterList(flags) + return result
+ +
[docs] def get_flags_written_by_lifted_il_instruction(self, i): + count = ctypes.c_ulonglong() + flags = core.BNGetFlagsWrittenByLiftedILInstruction(self.handle, i, count) + result = [] + for i in range(0, count.value): + result.append(self.arch._flags_by_index[flags[i]]) + core.BNFreeRegisterList(flags) + return result
+ +
[docs] def create_graph(self, graph_type = FunctionGraphType.NormalFunctionGraph, settings = None): + if settings is not None: + settings_obj = settings.handle + else: + settings_obj = None + return binaryninja.flowgraph.CoreFlowGraph(core.BNCreateFunctionGraph(self.handle, graph_type, settings_obj))
+ +
[docs] def apply_imported_types(self, sym): + core.BNApplyImportedTypes(self.handle, sym.handle)
+ +
[docs] def apply_auto_discovered_type(self, func_type): + core.BNApplyAutoDiscoveredFunctionType(self.handle, func_type.handle)
+ +
[docs] def set_auto_indirect_branches(self, source, branches, source_arch=None): + if source_arch is None: + source_arch = self.arch + branch_list = (core.BNArchitectureAndAddress * len(branches))() + for i in range(len(branches)): + branch_list[i].arch = branches[i][0].handle + branch_list[i].address = branches[i][1] + core.BNSetAutoIndirectBranches(self.handle, source_arch.handle, source, branch_list, len(branches))
+ +
[docs] def set_user_indirect_branches(self, source, branches, source_arch=None): + if source_arch is None: + source_arch = self.arch + branch_list = (core.BNArchitectureAndAddress * len(branches))() + for i in range(len(branches)): + branch_list[i].arch = branches[i][0].handle + branch_list[i].address = branches[i][1] + core.BNSetUserIndirectBranches(self.handle, source_arch.handle, source, branch_list, len(branches))
+ +
[docs] def get_indirect_branches_at(self, addr, arch=None): + if arch is None: + arch = self.arch + count = ctypes.c_ulonglong() + branches = core.BNGetIndirectBranchesAt(self.handle, arch.handle, addr, count) + result = [] + for i in range(count.value): + result.append(IndirectBranchInfo(binaryninja.architecture.CoreArchitecture._from_cache(branches[i].sourceArch), branches[i].sourceAddr, binaryninja.architecture.CoreArchitecture._from_cache(branches[i].destArch), branches[i].destAddr, branches[i].autoDefined)) + core.BNFreeIndirectBranchList(branches) + return result
+ +
[docs] def get_block_annotations(self, addr, arch=None): + if arch is None: + arch = self.arch + count = ctypes.c_ulonglong(0) + lines = core.BNGetFunctionBlockAnnotations(self.handle, arch.handle, addr, count) + result = [] + for i in range(count.value): + result.append(InstructionTextToken.get_instruction_lines(lines[i].tokens, lines[i].count)) + core.BNFreeInstructionTextLines(lines, count.value) + return result
+ +
[docs] def set_auto_type(self, value): + core.BNSetFunctionAutoType(self.handle, value.handle)
+ +
[docs] def set_user_type(self, value): + core.BNSetFunctionUserType(self.handle, value.handle)
+ +
[docs] def set_auto_return_type(self, value): + type_conf = core.BNTypeWithConfidence() + if value is None: + type_conf.type = None + type_conf.confidence = 0 + else: + type_conf.type = value.handle + type_conf.confidence = value.confidence + core.BNSetAutoFunctionReturnType(self.handle, type_conf)
+ +
[docs] def set_auto_return_regs(self, value): + regs = core.BNRegisterSetWithConfidence() + regs.regs = (ctypes.c_uint * len(value))() + regs.count = len(value) + for i in range(0, len(value)): + regs.regs[i] = self.arch.get_reg_index(value[i]) + if hasattr(value, 'confidence'): + regs.confidence = value.confidence + else: + regs.confidence = types.max_confidence + core.BNSetAutoFunctionReturnRegisters(self.handle, regs)
+ +
[docs] def set_auto_calling_convention(self, value): + conv_conf = core.BNCallingConventionWithConfidence() + if value is None: + conv_conf.convention = None + conv_conf.confidence = 0 + else: + conv_conf.convention = value.handle + conv_conf.confidence = value.confidence + core.BNSetAutoFunctionCallingConvention(self.handle, conv_conf)
+ +
[docs] def set_auto_parameter_vars(self, value): + if value is None: + var_list = [] + else: + var_list = list(value) + var_conf = core.BNParameterVariablesWithConfidence() + var_conf.vars = (core.BNVariable * len(var_list))() + var_conf.count = len(var_list) + for i in range(0, len(var_list)): + var_conf.vars[i].type = var_list[i].source_type + var_conf.vars[i].index = var_list[i].index + var_conf.vars[i].storage = var_list[i].storage + if value is None: + var_conf.confidence = 0 + elif hasattr(value, 'confidence'): + var_conf.confidence = value.confidence + else: + var_conf.confidence = types.max_confidence + core.BNSetAutoFunctionParameterVariables(self.handle, var_conf)
+ +
[docs] def set_auto_has_variable_arguments(self, value): + bc = core.BNBoolWithConfidence() + bc.value = bool(value) + if hasattr(value, 'confidence'): + bc.confidence = value.confidence + else: + bc.confidence = types.max_confidence + core.BNSetAutoFunctionHasVariableArguments(self.handle, bc)
+ +
[docs] def set_auto_can_return(self, value): + bc = core.BNBoolWithConfidence() + bc.value = bool(value) + if hasattr(value, 'confidence'): + bc.confidence = value.confidence + else: + bc.confidence = types.max_confidence + core.BNSetAutoFunctionCanReturn(self.handle, bc)
+ +
[docs] def set_auto_stack_adjustment(self, value): + oc = core.BNOffsetWithConfidence() + oc.value = int(value) + if hasattr(value, 'confidence'): + oc.confidence = value.confidence + else: + oc.confidence = types.max_confidence + core.BNSetAutoFunctionStackAdjustment(self.handle, oc)
+ +
[docs] def set_auto_reg_stack_adjustments(self, value): + adjust = (core.BNRegisterStackAdjustment * len(value))() + i = 0 + for reg_stack in value.keys(): + adjust[i].regStack = self.arch.get_reg_stack_index(reg_stack) + if isinstance(value[reg_stack], types.RegisterStackAdjustmentWithConfidence): + adjust[i].adjustment = value[reg_stack].value + adjust[i].confidence = value[reg_stack].confidence + else: + adjust[i].adjustment = value[reg_stack] + adjust[i].confidence = types.max_confidence + i += 1 + core.BNSetAutoFunctionRegisterStackAdjustments(self.handle, adjust, len(value))
+ +
[docs] def set_auto_clobbered_regs(self, value): + regs = core.BNRegisterSetWithConfidence() + regs.regs = (ctypes.c_uint * len(value))() + regs.count = len(value) + for i in range(0, len(value)): + regs.regs[i] = self.arch.get_reg_index(value[i]) + if hasattr(value, 'confidence'): + regs.confidence = value.confidence + else: + regs.confidence = types.max_confidence + core.BNSetAutoFunctionClobberedRegisters(self.handle, regs)
+ +
[docs] def get_int_display_type(self, instr_addr, value, operand, arch=None): + if arch is None: + arch = self.arch + return IntegerDisplayType(core.BNGetIntegerConstantDisplayType(self.handle, arch.handle, instr_addr, value, operand))
+ +
[docs] def set_int_display_type(self, instr_addr, value, operand, display_type, arch=None): + """ + + :param int instr_addr: + :param int value: + :param int operand: + :param enums.IntegerDisplayType display_type: + :param Architecture arch: (optional) + """ + if arch is None: + arch = self.arch + if isinstance(display_type, str): + display_type = IntegerDisplayType[display_type] + core.BNSetIntegerConstantDisplayType(self.handle, arch.handle, instr_addr, value, operand, display_type)
+ +
[docs] def reanalyze(self): + """ + ``reanalyze`` causes this functions to be reanalyzed. This function does not wait for the analysis to finish. + + :rtype: None + """ + core.BNReanalyzeFunction(self.handle)
+ +
[docs] def request_advanced_analysis_data(self): + core.BNRequestAdvancedFunctionAnalysisData(self.handle) + self._advanced_analysis_requests += 1
+ +
[docs] def release_advanced_analysis_data(self): + core.BNReleaseAdvancedFunctionAnalysisData(self.handle) + self._advanced_analysis_requests -= 1
+ +
[docs] def get_basic_block_at(self, addr, arch=None): + """ + ``get_basic_block_at`` returns the BasicBlock of the optionally specified Architecture ``arch`` at the given + address ``addr``. + + :param int addr: Address of the BasicBlock to retrieve. + :param Architecture arch: (optional) Architecture of the basic block if different from the Function's self.arch + :Example: + >>> current_function.get_basic_block_at(current_function.start) + <block: x86_64@0x100000f30-0x100000f50> + """ + if arch is None: + arch = self.arch + block = core.BNGetFunctionBasicBlockAtAddress(self.handle, arch.handle, addr) + if not block: + return None + return binaryninja.basicblock.BasicBlock(block, self._view)
+ +
[docs] def get_instr_highlight(self, addr, arch=None): + """ + :Example: + >>> current_function.set_user_instr_highlight(here, highlight.HighlightColor(red=0xff, blue=0xff, green=0)) + >>> current_function.get_instr_highlight(here) + <color: #ff00ff> + """ + if arch is None: + arch = self.arch + color = core.BNGetInstructionHighlight(self.handle, arch.handle, addr) + if color.style == HighlightColorStyle.StandardHighlightColor: + return highlight.HighlightColor(color = color.color, alpha = color.alpha) + elif color.style == HighlightColorStyle.MixedHighlightColor: + return highlight.HighlightColor(color = color.color, mix_color = color.mixColor, mix = color.mix, alpha = color.alpha) + elif color.style == HighlightColorStyle.CustomHighlightColor: + return highlight.HighlightColor(red = color.r, green = color.g, blue = color.b, alpha = color.alpha) + return highlight.HighlightColor(color = HighlightStandardColor.NoHighlightColor)
+ +
[docs] def set_auto_instr_highlight(self, addr, color, arch=None): + """ + ``set_auto_instr_highlight`` highlights the instruction at the specified address with the supplied color + + ..warning:: Use only in analysis plugins. Do not use in regular plugins, as colors won't be saved to the database. + + :param int addr: virtual address of the instruction to be highlighted + :param HighlightStandardColor or highlight.HighlightColor color: Color value to use for highlighting + :param Architecture arch: (optional) Architecture of the instruction if different from self.arch + """ + if arch is None: + arch = self.arch + if not isinstance(color, HighlightStandardColor) and not isinstance(color, highlight.HighlightColor): + raise ValueError("Specified color is not one of HighlightStandardColor, highlight.HighlightColor") + if isinstance(color, HighlightStandardColor): + color = highlight.HighlightColor(color = color) + core.BNSetAutoInstructionHighlight(self.handle, arch.handle, addr, color._get_core_struct())
+ +
[docs] def set_user_instr_highlight(self, addr, color, arch=None): + """ + ``set_user_instr_highlight`` highlights the instruction at the specified address with the supplied color + + :param int addr: virtual address of the instruction to be highlighted + :param HighlightStandardColor or highlight.HighlightColor color: Color value to use for highlighting + :param Architecture arch: (optional) Architecture of the instruction if different from self.arch + :Example: + + >>> current_function.set_user_instr_highlight(here, HighlightStandardColor.BlueHighlightColor) + >>> current_function.set_user_instr_highlight(here, highlight.HighlightColor(red=0xff, blue=0xff, green=0)) + """ + if arch is None: + arch = self.arch + if not isinstance(color, HighlightStandardColor) and not isinstance(color, highlight.HighlightColor): + raise ValueError("Specified color is not one of HighlightStandardColor, highlight.HighlightColor") + if isinstance(color, HighlightStandardColor): + color = highlight.HighlightColor(color) + core.BNSetUserInstructionHighlight(self.handle, arch.handle, addr, color._get_core_struct())
+ +
[docs] def create_auto_stack_var(self, offset, var_type, name): + tc = core.BNTypeWithConfidence() + tc.type = var_type.handle + tc.confidence = var_type.confidence + core.BNCreateAutoStackVariable(self.handle, offset, tc, name)
+ +
[docs] def create_user_stack_var(self, offset, var_type, name): + tc = core.BNTypeWithConfidence() + tc.type = var_type.handle + tc.confidence = var_type.confidence + core.BNCreateUserStackVariable(self.handle, offset, tc, name)
+ +
[docs] def delete_auto_stack_var(self, offset): + core.BNDeleteAutoStackVariable(self.handle, offset)
+ +
[docs] def delete_user_stack_var(self, offset): + core.BNDeleteUserStackVariable(self.handle, offset)
+ +
[docs] def create_auto_var(self, var, var_type, name, ignore_disjoint_uses = False): + var_data = core.BNVariable() + var_data.type = var.source_type + var_data.index = var.index + var_data.storage = var.storage + tc = core.BNTypeWithConfidence() + tc.type = var_type.handle + tc.confidence = var_type.confidence + core.BNCreateAutoVariable(self.handle, var_data, tc, name, ignore_disjoint_uses)
+ +
[docs] def create_user_var(self, var, var_type, name, ignore_disjoint_uses = False): + var_data = core.BNVariable() + var_data.type = var.source_type + var_data.index = var.index + var_data.storage = var.storage + tc = core.BNTypeWithConfidence() + tc.type = var_type.handle + tc.confidence = var_type.confidence + core.BNCreateUserVariable(self.handle, var_data, tc, name, ignore_disjoint_uses)
+ +
[docs] def delete_auto_var(self, var): + var_data = core.BNVariable() + var_data.type = var.source_type + var_data.index = var.index + var_data.storage = var.storage + core.BNDeleteAutoVariable(self.handle, var_data)
+ +
[docs] def delete_user_var(self, var): + var_data = core.BNVariable() + var_data.type = var.source_type + var_data.index = var.index + var_data.storage = var.storage + core.BNDeleteUserVariable(self.handle, var_data)
+ +
[docs] def get_stack_var_at_frame_offset(self, offset, addr, arch=None): + if arch is None: + arch = self.arch + found_var = core.BNVariableNameAndType() + if not core.BNGetStackVariableAtFrameOffset(self.handle, arch.handle, addr, offset, found_var): + return None + result = Variable(self, found_var.var.type, found_var.var.index, found_var.var.storage, + found_var.name, types.Type(handle = core.BNNewTypeReference(found_var.type), platform = self.platform, + confidence = found_var.typeConfidence)) + core.BNFreeVariableNameAndType(found_var) + return result
+ +
[docs] def get_type_tokens(self, settings=None): + if settings is not None: + settings = settings.handle + count = ctypes.c_ulonglong() + lines = core.BNGetFunctionTypeTokens(self.handle, settings, count) + result = [] + for i in range(0, count.value): + addr = lines[i].addr + color = highlight.HighlightColor._from_core_struct(lines[i].highlight) + tokens = InstructionTextToken.get_instruction_lines(lines[i].tokens, lines[i].count) + result.append(DisassemblyTextLine(tokens, addr, color = color)) + core.BNFreeDisassemblyTextLines(lines, count.value) + return result
+ +
[docs] def get_reg_value_at_exit(self, reg): + result = core.BNGetFunctionRegisterValueAtExit(self.handle, self.arch.get_reg_index(reg)) + return RegisterValue(self.arch, result.value, confidence = result.confidence)
+ +
[docs] def set_auto_call_stack_adjustment(self, addr, adjust, arch=None): + if arch is None: + arch = self.arch + if not isinstance(adjust, types.SizeWithConfidence): + adjust = types.SizeWithConfidence(adjust) + core.BNSetAutoCallStackAdjustment(self.handle, arch.handle, addr, adjust.value, adjust.confidence)
+ +
[docs] def set_auto_call_reg_stack_adjustment(self, addr, adjust, arch=None): + if arch is None: + arch = self.arch + adjust_buf = (core.BNRegisterStackAdjustment * len(adjust))() + i = 0 + for reg_stack in adjust.keys(): + adjust_buf[i].regStack = arch.get_reg_stack_index(reg_stack) + value = adjust[reg_stack] + if not isinstance(value, types.RegisterStackAdjustmentWithConfidence): + value = types.RegisterStackAdjustmentWithConfidence(value) + adjust_buf[i].adjustment = value.value + adjust_buf[i].confidence = value.confidence + i += 1 + core.BNSetAutoCallRegisterStackAdjustment(self.handle, arch.handle, addr, adjust_buf, len(adjust))
+ +
[docs] def set_auto_call_reg_stack_adjustment_for_reg_stack(self, addr, reg_stack, adjust, arch=None): + if arch is None: + arch = self.arch + reg_stack = arch.get_reg_stack_index(reg_stack) + if not isinstance(adjust, types.RegisterStackAdjustmentWithConfidence): + adjust = types.RegisterStackAdjustmentWithConfidence(adjust) + core.BNSetAutoCallRegisterStackAdjustmentForRegisterStack(self.handle, arch.handle, addr, reg_stack, + adjust.value, adjust.confidence)
+ +
[docs] def set_call_stack_adjustment(self, addr, adjust, arch=None): + if arch is None: + arch = self.arch + if not isinstance(adjust, types.SizeWithConfidence): + adjust = types.SizeWithConfidence(adjust) + core.BNSetUserCallStackAdjustment(self.handle, arch.handle, addr, adjust.value, adjust.confidence)
+ +
[docs] def set_call_reg_stack_adjustment(self, addr, adjust, arch=None): + if arch is None: + arch = self.arch + adjust_buf = (core.BNRegisterStackAdjustment * len(adjust))() + i = 0 + for reg_stack in adjust.keys(): + adjust_buf[i].regStack = arch.get_reg_stack_index(reg_stack) + value = adjust[reg_stack] + if not isinstance(value, types.RegisterStackAdjustmentWithConfidence): + value = types.RegisterStackAdjustmentWithConfidence(value) + adjust_buf[i].adjustment = value.value + adjust_buf[i].confidence = value.confidence + i += 1 + core.BNSetUserCallRegisterStackAdjustment(self.handle, arch.handle, addr, adjust_buf, len(adjust))
+ +
[docs] def set_call_reg_stack_adjustment_for_reg_stack(self, addr, reg_stack, adjust, arch=None): + if arch is None: + arch = self.arch + reg_stack = arch.get_reg_stack_index(reg_stack) + if not isinstance(adjust, types.RegisterStackAdjustmentWithConfidence): + adjust = types.RegisterStackAdjustmentWithConfidence(adjust) + core.BNSetUserCallRegisterStackAdjustmentForRegisterStack(self.handle, arch.handle, addr, reg_stack, + adjust.value, adjust.confidence)
+ +
[docs] def get_call_stack_adjustment(self, addr, arch=None): + if arch is None: + arch = self.arch + result = core.BNGetCallStackAdjustment(self.handle, arch.handle, addr) + return types.SizeWithConfidence(result.value, confidence = result.confidence)
+ +
[docs] def get_call_reg_stack_adjustment(self, addr, arch=None): + if arch is None: + arch = self.arch + count = ctypes.c_ulonglong() + adjust = core.BNGetCallRegisterStackAdjustment(self.handle, arch.handle, addr, count) + result = {} + for i in range(0, count.value): + result[arch.get_reg_stack_name(adjust[i].regStack)] = types.RegisterStackAdjustmentWithConfidence( + adjust[i].adjustment, confidence = adjust[i].confidence) + core.BNFreeRegisterStackAdjustments(adjust) + return result
+ +
[docs] def get_call_reg_stack_adjustment_for_reg_stack(self, addr, reg_stack, arch=None): + if arch is None: + arch = self.arch + reg_stack = arch.get_reg_stack_index(reg_stack) + adjust = core.BNGetCallRegisterStackAdjustmentForRegisterStack(self.handle, arch.handle, addr, reg_stack) + result = types.RegisterStackAdjustmentWithConfidence(adjust.adjustment, confidence = adjust.confidence) + return result
+ +
[docs] def is_call_instruction(self, addr, arch=None): + if arch is None: + arch = self.arch + return core.BNIsCallInstruction(self.handle, arch.handle, addr)
+ +
[docs] def request_debug_report(self, name): + core.BNRequestFunctionDebugReport(self.handle, name) + self.view.update_analysis()
+ + +
[docs]class AdvancedFunctionAnalysisDataRequestor(object): +
[docs] def __init__(self, func = None): + self._function = func + if self._function is not None: + self._function.request_advanced_analysis_data()
+ + def __del__(self): + if self._function is not None: + self._function.release_advanced_analysis_data() + + @property + def function(self): + return self._function + + @function.setter + def function(self, func): + if self._function is not None: + self._function.release_advanced_analysis_data() + self._function = func + if self._function is not None: + self._function.request_advanced_analysis_data() + +
[docs] def close(self): + if self._function is not None: + self._function.release_advanced_analysis_data() + self._function = None
+ + +
[docs]class DisassemblyTextLine(object): +
[docs] def __init__(self, tokens, address = None, il_instr = None, color = None): + self.address = address + self.tokens = tokens + self.il_instruction = il_instr + if color is None: + self.highlight = highlight.HighlightColor() + else: + if not isinstance(color, HighlightStandardColor) and not isinstance(color, highlight.HighlightColor): + raise ValueError("Specified color is not one of HighlightStandardColor, highlight.HighlightColor") + if isinstance(color, HighlightStandardColor): + color = highlight.HighlightColor(color) + self.highlight = color
+ + def __str__(self): + result = "" + for token in self.tokens: + result += token.text + return result + + def __repr__(self): + if self.address is None: + return str(self) + return "<%#x: %s>" % (self.address, str(self))
+ + +
[docs]class DisassemblySettings(object): +
[docs] def __init__(self, handle = None): + if handle is None: + self.handle = core.BNCreateDisassemblySettings() + else: + self.handle = handle
+ + def __del__(self): + core.BNFreeDisassemblySettings(self.handle) + + @property + def width(self): + return core.BNGetDisassemblyWidth(self.handle) + + @width.setter + def width(self, value): + core.BNSetDisassemblyWidth(self.handle, value) + + @property + def max_symbol_width(self): + return core.BNGetDisassemblyMaximumSymbolWidth(self.handle) + + @max_symbol_width.setter + def max_symbol_width(self, value): + core.BNSetDisassemblyMaximumSymbolWidth(self.handle, value) + +
[docs] def is_option_set(self, option): + if isinstance(option, str): + option = DisassemblyOption[option] + return core.BNIsDisassemblySettingsOptionSet(self.handle, option)
+ +
[docs] def set_option(self, option, state = True): + if isinstance(option, str): + option = DisassemblyOption[option] + core.BNSetDisassemblySettingsOption(self.handle, option, state)
+ + +
[docs]class RegisterInfo(object): +
[docs] def __init__(self, full_width_reg, size, offset=0, extend=ImplicitRegisterExtend.NoExtend, index=None): + self.full_width_reg = full_width_reg + self.offset = offset + self.size = size + self.extend = extend + self.index = index
+ + def __repr__(self): + if self.extend == ImplicitRegisterExtend.ZeroExtendToFullWidth: + extend = ", zero extend" + elif self.extend == ImplicitRegisterExtend.SignExtendToFullWidth: + extend = ", sign extend" + else: + extend = "" + return "<reg: size %d, offset %d in %s%s>" % (self.size, self.offset, self.full_width_reg, extend)
+ + +
[docs]class RegisterStackInfo(object): +
[docs] def __init__(self, storage_regs, top_relative_regs, stack_top_reg, index=None): + self.storage_regs = storage_regs + self.top_relative_regs = top_relative_regs + self.stack_top_reg = stack_top_reg + self.index = index
+ + def __repr__(self): + return "<reg stack: %d regs, stack top in %s>" % (len(self.storage_regs), self.stack_top_reg)
+ + +
[docs]class IntrinsicInput(object): +
[docs] def __init__(self, type_obj, name=""): + self.name = name + self.type = type_obj
+ + def __repr__(self): + if len(self.name) == 0: + return "<input: %s>" % str(self.type) + return "<input: %s %s>" % (str(self.type), self.name)
+ + +
[docs]class IntrinsicInfo(object): +
[docs] def __init__(self, inputs, outputs, index=None): + self.inputs = inputs + self.outputs = outputs + self.index = index
+ + def __repr__(self): + return "<intrinsic: %s -> %s>" % (repr(self.inputs), repr(self.outputs))
+ + +
[docs]class InstructionBranch(object): +
[docs] def __init__(self, branch_type, target = 0, arch = None): + self.type = branch_type + self.target = target + self.arch = arch
+ + def __repr__(self): + branch_type = self.type + if self.arch is not None: + return "<%s: %s@%#x>" % (branch_type.name, self.arch.name, self.target) + return "<%s: %#x>" % (branch_type, self.target)
+ + +
[docs]class InstructionInfo(object): +
[docs] def __init__(self): + self.length = 0 + self.arch_transition_by_target_addr = False + self.branch_delay = False + self.branches = []
+ +
[docs] def add_branch(self, branch_type, target = 0, arch = None): + self.branches.append(InstructionBranch(branch_type, target, arch))
+ + def __repr__(self): + branch_delay = "" + if self.branch_delay: + branch_delay = ", delay slot" + return "<instr: %d bytes%s, %s>" % (self.length, branch_delay, repr(self.branches))
+ + +
[docs]class InstructionTextToken(object): + """ + ``class InstructionTextToken`` is used to tell the core about the various components in the disassembly views. + + ========================== ============================================ + InstructionTextTokenType Description + ========================== ============================================ + TextToken Text that doesn't fit into the other tokens + InstructionToken The instruction mnemonic + OperandSeparatorToken The comma or whatever else separates tokens + RegisterToken Registers + IntegerToken Integers + PossibleAddressToken Integers that are likely addresses + BeginMemoryOperandToken The start of memory operand + EndMemoryOperandToken The end of a memory operand + FloatingPointToken Floating point number + AnnotationToken **For internal use only** + CodeRelativeAddressToken **For internal use only** + StackVariableTypeToken **For internal use only** + DataVariableTypeToken **For internal use only** + FunctionReturnTypeToken **For internal use only** + FunctionAttributeToken **For internal use only** + ArgumentTypeToken **For internal use only** + ArgumentNameToken **For internal use only** + HexDumpByteValueToken **For internal use only** + HexDumpSkippedByteToken **For internal use only** + HexDumpInvalidByteToken **For internal use only** + HexDumpTextToken **For internal use only** + OpcodeToken **For internal use only** + StringToken **For internal use only** + CharacterConstantToken **For internal use only** + CodeSymbolToken **For internal use only** + DataSymbolToken **For internal use only** + StackVariableToken **For internal use only** + ImportToken **For internal use only** + AddressDisplayToken **For internal use only** + ========================== ============================================ + + """ +
[docs] def __init__(self, token_type, text, value = 0, size = 0, operand = 0xffffffff, + context = InstructionTextTokenContext.NoTokenContext, address = 0, confidence = types.max_confidence, typeNames=[]): + self.type = InstructionTextTokenType(token_type) + self.text = text + self.value = value + self.size = size + self.operand = operand + self.context = InstructionTextTokenContext(context) + self.confidence = confidence + self.address = address + self.typeNames = typeNames
+ +
[docs] @classmethod + def get_instruction_lines(cls, tokens, count=0): + """ Helper method for converting between core.BNInstructionTextToken and InstructionTextToken lists """ + if isinstance(tokens, list): + result = (core.BNInstructionTextToken * len(tokens))() + for j in range(len(tokens)): + result[j].type = tokens[j].type + result[j].text = tokens[j].text + result[j].value = tokens[j].value + result[j].size = tokens[j].size + result[j].operand = tokens[j].operand + result[j].context = tokens[j].context + result[j].confidence = tokens[j].confidence + result[j].address = tokens[j].address + result[j].nameCount = len(tokens[j].typeNames) + result[j].typeNames = (ctypes.c_char_p * len(tokens[j].typeNames))() + for i in range(len(tokens[j].typeNames)): + result[j].typeNames[i] = binaryninja.cstr(tokens[j].typeNames[i]) + return result + + result = [] + for j in range(count): + token_type = InstructionTextTokenType(tokens[j].type) + text = tokens[j].text + if not isinstance(text, str): + text = text.decode("charmap") + value = tokens[j].value + size = tokens[j].size + operand = tokens[j].operand + context = tokens[j].context + confidence = tokens[j].confidence + address = tokens[j].address + typeNames = [] + for i in range(tokens[j].namesCount): + if not isinstance(tokens[j].typeNames[i], str): + typeNames.append(tokens[j].typeNames[i].decode("charmap")) + else: + typeNames.append(tokens[j].typeNames[i]) + result.append(InstructionTextToken(token_type, text, value, size, operand, context, address, confidence, typeNames)) + return result
+ + def __str__(self): + return self.text + + def __repr__(self): + return repr(self.text)
+ + +
[docs]class DisassemblyTextRenderer(object): +
[docs] def __init__(self, func = None, settings = None, handle = None): + if handle is None: + if func is None: + raise ValueError("function required for disassembly") + settings_obj = None + if settings is not None: + settings_obj = settings.handle + if isinstance(func, Function): + self.handle = core.BNCreateDisassemblyTextRenderer(func.handle, settings_obj) + elif isinstance(func, binaryninja.lowlevelil.LowLevelILFunction): + self.handle = core.BNCreateLowLevelILDisassemblyTextRenderer(func.handle, settings_obj) + elif isinstance(func, binaryninja.mediumlevelil.MediumLevelILFunction): + self.handle = core.BNCreateMediumLevelILDisassemblyTextRenderer(func.handle, settings_obj) + else: + raise TypeError("invalid function object") + else: + self.handle = handle
+ + def __del__(self): + core.BNFreeDisassemblyTextRenderer(self.handle) + + @property + def function(self): + return Function(handle = core.BNGetDisassemblyTextRendererFunction(self.handle)) + + @property + def il_function(self): + llil = core.BNGetDisassemblyTextRendererLowLevelILFunction(self.handle) + if llil: + return binaryninja.lowlevelil.LowLevelILFunction(handle = llil) + mlil = core.BNGetDisassemblyTextRendererMediumLevelILFunction(self.handle) + if mlil: + return binaryninja.mediumlevelil.MediumLevelILFunction(handle = mlil) + return None + + @property + def basic_block(self): + result = core.BNGetDisassemblyTextRendererBasicBlock(self.handle) + if result: + return binaryninja.basicblock.BasicBlock(handle = result) + return None + + @basic_block.setter + def basic_block(self, block): + if block is not None: + core.BNSetDisassemblyTextRendererBasicBlock(self.handle, block.handle) + else: + core.BNSetDisassemblyTextRendererBasicBlock(self.handle, None) + + @property + def arch(self): + return binaryninja.architecture.CoreArchitecture(handle = core.BNGetDisassemblyTextRendererArchitecture(self.handle)) + + @arch.setter + def arch(self, arch): + core.BNSetDisassemblyTextRendererArchitecture(self.handle, arch.handle) + + @property + def settings(self): + return DisassemblySettings(handle = core.BNGetDisassemblyTextRendererSettings(self.handle)) + + @settings.setter + def settings(self, settings): + if settings is not None: + core.BNSetDisassemblyTextRendererSettings(self.handle, settings.handle) + core.BNSetDisassemblyTextRendererSettings(self.handle, None) + + @property + def il(self): + return core.BNIsILDisassemblyTextRenderer(self.handle) + + @property + def has_data_flow(self): + return core.BNDisassemblyTextRendererHasDataFlow(self.handle) + +
[docs] def get_instruction_annotations(self, addr): + count = ctypes.c_ulonglong() + tokens = core.BNGetDisassemblyTextRendererInstructionAnnotations(self.handle, addr, count) + result = InstructionTextToken.get_instruction_lines(tokens, count.value) + core.BNFreeInstructionText(tokens, count.value) + return result
+ +
[docs] def get_instruction_text(self, addr): + count = ctypes.c_ulonglong() + length = ctypes.c_ulonglong() + display_addr = ctypes.c_ulonglong() + tokens = ctypes.POINTER(core.BNInstructionTextToken)() + if not core.BNGetDisassemblyTextRendererInstructionText(self.handle, addr, length, tokens, count, display_addr): + return None, 0, 0 + result = InstructionTextToken.get_instruction_lines(tokens, count.value) + core.BNFreeInstructionText(tokens, count.value) + return result, length.value, display_addr.value
+ +
[docs] def get_disassembly_text(self, addr): + count = ctypes.c_ulonglong() + length = ctypes.c_ulonglong() + length.value = 0 + lines = ctypes.POINTER(core.BNDisassemblyTextLine)() + ok = core.BNGetDisassemblyTextRendererLines(self.handle, addr, length, lines, count) + if not ok: + return None, 0 + il_function = self.il_function + result = [] + for i in range(0, count.value): + addr = lines[i].addr + if (lines[i].instrIndex != 0xffffffffffffffff) and (il_function is not None): + il_instr = il_function[lines[i].instrIndex] + else: + il_instr = None + color = highlight.HighlightColor._from_core_struct(lines[i].highlight) + tokens = InstructionTextToken.get_instruction_lines(lines[i].tokens, lines[i].count) + result.append(DisassemblyTextLine(tokens, addr, il_instr, color)) + core.BNFreeDisassemblyTextLines(lines, count.value) + return (result, length.value)
+ +
[docs] def reset_deduplicated_comments(self): + core.BNResetDisassemblyTextRendererDeduplicatedComments(self.handle)
+ +
[docs] def add_symbol_token(self, tokens, addr, size, operand = None): + if operand is None: + operand = 0xffffffff + count = ctypes.c_ulonglong() + new_tokens = ctypes.POINTER(core.BNInstructionTextToken)() + if not core.BNGetDisassemblyTextRendererSymbolTokens(self.handle, addr, size, operand, new_tokens, count): + return False + result = binaryninja.function.InstructionTextToken.get_instruction_lines(new_tokens, count.value) + tokens += result + core.BNFreeInstructionText(new_tokens, count.value) + return True
+ +
[docs] def add_stack_var_reference_tokens(self, tokens, ref): + stack_ref = core.BNStackVariableReference() + if ref.source_operand is None: + stack_ref.sourceOperand = 0xffffffff + else: + stack_ref.sourceOperand = ref.source_operand + if ref.type is None: + stack_ref.type = None + stack_ref.typeConfidence = 0 + else: + stack_ref.type = ref.type.handle + stack_ref.typeConfidence = ref.type.confidence + stack_ref.name = ref.name + stack_ref.varIdentifier = ref.var.identifier + stack_ref.referencedOffset = ref.referenced_offset + stack_ref.size = ref.size + count = ctypes.c_ulonglong() + new_tokens = core.BNGetDisassemblyTextRendererStackVariableReferenceTokens(self.handle, stack_ref, count) + result = InstructionTextToken.get_instruction_lines(new_tokens, count.value) + tokens += result + core.BNFreeInstructionText(new_tokens, count.value)
+ +
[docs] @classmethod + def is_integer_token(self, token): + return core.BNIsIntegerToken(token)
+ +
[docs] def add_integer_token(self, tokens, int_token, addr, arch = None): + if arch is not None: + arch = arch.handle + in_token_obj = InstructionTextToken.get_instruction_lines([int_token]) + count = ctypes.c_ulonglong() + new_tokens = core.BNGetDisassemblyTextRendererIntegerTokens(self.handle, in_token_obj, arch, addr, count) + result = InstructionTextToken.get_instruction_lines(new_tokens, count.value) + tokens += result + core.BNFreeInstructionText(new_tokens, count.value)
+ +
[docs] def wrap_comment(self, lines, cur_line, comment, has_auto_annotations, leading_spaces = " "): + cur_line_obj = core.BNDisassemblyTextLine() + cur_line_obj.addr = cur_line.address + if cur_line.il_instruction is None: + cur_line_obj.instrIndex = 0xffffffffffffffff + else: + cur_line_obj.instrIndex = cur_line.il_instruction.instr_index + cur_line_obj.highlight = cur_line.highlight._get_core_struct() + cur_line_obj.tokens = InstructionTextToken.get_instruction_lines(cur_line.tokens) + cur_line_obj.count = len(cur_line.tokens) + count = ctypes.c_ulonglong() + new_lines = core.BNDisassemblyTextRendererWrapComment(self.handle, cur_line_obj, count, comment, + has_auto_annotations, leading_spaces) + il_function = self.il_function + for i in range(0, count.value): + addr = new_lines[i].addr + if (new_lines[i].instrIndex != 0xffffffffffffffff) and (il_function is not None): + il_instr = il_function[new_lines[i].instrIndex] + else: + il_instr = None + color = highlight.HighlightColor._from_core_struct(new_lines[i].highlight) + tokens = InstructionTextToken.get_instruction_lines(new_lines[i].tokens, new_lines[i].count) + lines.append(DisassemblyTextLine(tokens, addr, il_instr, color)) + core.BNFreeDisassemblyTextLines(new_lines, count.value)
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/functionrecognizer.html b/personal/api-docs/_modules/binaryninja/functionrecognizer.html new file mode 100644 index 0000000..cd83e8f --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/functionrecognizer.html @@ -0,0 +1,327 @@ + + + + + + + + + + + binaryninja.functionrecognizer — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.functionrecognizer

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+import traceback
+
+# Binary Ninja components
+from binaryninja import _binaryninjacore as core
+from binaryninja import function
+from binaryninja import filemetadata
+from binaryninja import binaryview
+from binaryninja import lowlevelil
+from binaryninja import log
+from binaryninja import mediumlevelil
+
+
+
[docs]class FunctionRecognizer(object): + + _instance = None + +
[docs] def __init__(self): + self._cb = core.BNFunctionRecognizer() + self._cb.context = 0 + self._cb.recognizeLowLevelIL = self._cb.recognizeLowLevelIL.__class__(self._recognize_low_level_il) + self._cb.recognizeMediumLevelIL = self._cb.recognizeMediumLevelIL.__class__(self._recognize_medium_level_il)
+ +
[docs] @classmethod + def register_global(cls): + if cls._instance is None: + cls._instance = cls() + core.BNRegisterGlobalFunctionRecognizer(cls._instance._cb)
+ +
[docs] @classmethod + def register_arch(cls, arch): + if cls._instance is None: + cls._instance = cls() + core.BNRegisterArchitectureFunctionRecognizer(arch.handle, cls._instance._cb)
+ + def _recognize_low_level_il(self, ctxt, data, func, il): + try: + file_metadata = filemetadata.FileMetadata(handle = core.BNGetFileForView(data)) + view = binaryview.BinaryView(file_metadata = file_metadata, handle = core.BNNewViewReference(data)) + func = function.Function(view, handle = core.BNNewFunctionReference(func)) + il = lowlevelil.LowLevelILFunction(func.arch, handle = core.BNNewLowLevelILFunctionReference(il)) + return self.recognize_low_level_il(view, func, il) + except: + log.log_error(traceback.format_exc()) + return False + +
[docs] def recognize_low_level_il(self, data, func, il): + return False
+ + def _recognize_medium_level_il(self, ctxt, data, func, il): + try: + file_metadata = filemetadata.FileMetadata(handle = core.BNGetFileForView(data)) + view = binaryview.BinaryView(file_metadata = file_metadata, handle = core.BNNewViewReference(data)) + func = function.Function(view, handle = core.BNNewFunctionReference(func)) + il = mediumlevelil.MediumLevelILFunction(func.arch, handle = core.BNNewMediumLevelILFunctionReference(il)) + return self.recognize_medium_level_il(view, func, il) + except: + log.log_error(traceback.format_exc()) + return False + +
[docs] def recognize_medium_level_il(self, data, func, il): + return False
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/highlight.html b/personal/api-docs/_modules/binaryninja/highlight.html new file mode 100644 index 0000000..b5d6846 --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/highlight.html @@ -0,0 +1,368 @@ + + + + + + + + + + + binaryninja.highlight — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.highlight

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+
+# Binary Ninja components
+from binaryninja import _binaryninjacore as core
+from binaryninja.enums import HighlightColorStyle, HighlightStandardColor
+
+
+
[docs]class HighlightColor(object): +
[docs] def __init__(self, color = None, mix_color = None, mix = None, red = None, green = None, blue = None, alpha = 255): + if (red is not None) and (green is not None) and (blue is not None): + self.style = HighlightColorStyle.CustomHighlightColor + self.red = red + self.green = green + self.blue = blue + elif (mix_color is not None) and (mix is not None): + self.style = HighlightColorStyle.MixedHighlightColor + if color is None: + self.color = HighlightStandardColor.NoHighlightColor + else: + self.color = color + self.mix_color = mix_color + self.mix = mix + else: + self.style = HighlightColorStyle.StandardHighlightColor + if color is None: + self.color = HighlightStandardColor.NoHighlightColor + else: + self.color = color + self.alpha = alpha
+ + def _standard_color_to_str(self, color): + if color == HighlightStandardColor.NoHighlightColor: + return "none" + if color == HighlightStandardColor.BlueHighlightColor: + return "blue" + if color == HighlightStandardColor.GreenHighlightColor: + return "green" + if color == HighlightStandardColor.CyanHighlightColor: + return "cyan" + if color == HighlightStandardColor.RedHighlightColor: + return "red" + if color == HighlightStandardColor.MagentaHighlightColor: + return "magenta" + if color == HighlightStandardColor.YellowHighlightColor: + return "yellow" + if color == HighlightStandardColor.OrangeHighlightColor: + return "orange" + if color == HighlightStandardColor.WhiteHighlightColor: + return "white" + if color == HighlightStandardColor.BlackHighlightColor: + return "black" + return "%d" % color + + def __repr__(self): + if self.style == HighlightColorStyle.StandardHighlightColor: + if self.alpha == 255: + return "<color: %s>" % self._standard_color_to_str(self.color) + return "<color: %s, alpha %d>" % (self._standard_color_to_str(self.color), self.alpha) + if self.style == HighlightColorStyle.MixedHighlightColor: + if self.alpha == 255: + return "<color: mix %s to %s factor %d>" % (self._standard_color_to_str(self.color), + self._standard_color_to_str(self.mix_color), self.mix) + return "<color: mix %s to %s factor %d, alpha %d>" % (self._standard_color_to_str(self.color), + self._standard_color_to_str(self.mix_color), self.mix, self.alpha) + if self.style == HighlightColorStyle.CustomHighlightColor: + if self.alpha == 255: + return "<color: #%.2x%.2x%.2x>" % (self.red, self.green, self.blue) + return "<color: #%.2x%.2x%.2x, alpha %d>" % (self.red, self.green, self.blue, self.alpha) + return "<color>" + + def _get_core_struct(self): + result = core.BNHighlightColor() + result.style = self.style + result.color = HighlightStandardColor.NoHighlightColor + result.mix_color = HighlightStandardColor.NoHighlightColor + result.mix = 0 + result.r = 0 + result.g = 0 + result.b = 0 + result.alpha = self.alpha + + if self.style == HighlightColorStyle.StandardHighlightColor: + result.color = self.color + elif self.style == HighlightColorStyle.MixedHighlightColor: + result.color = self.color + result.mixColor = self.mix_color + result.mix = self.mix + elif self.style == HighlightColorStyle.CustomHighlightColor: + result.r = self.red + result.g = self.green + result.b = self.blue + + return result + + @staticmethod + def _from_core_struct(color): + if color.style == HighlightColorStyle.StandardHighlightColor: + return HighlightColor(color=color.color, alpha=color.alpha) + elif color.style == HighlightColorStyle.MixedHighlightColor: + return HighlightColor(color=color.color, mix_color=color.mixColor, mix=color.mix, alpha=color.alpha) + elif color.style == HighlightColorStyle.CustomHighlightColor: + return HighlightColor(red=color.r, green=color.g, blue=color.b, alpha=color.alpha) + return HighlightColor(color=HighlightStandardColor.NoHighlightColor)
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/interaction.html b/personal/api-docs/_modules/binaryninja/interaction.html new file mode 100644 index 0000000..97f001e --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/interaction.html @@ -0,0 +1,1185 @@ + + + + + + + + + + + binaryninja.interaction — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.interaction

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+import ctypes
+import traceback
+
+# Binary Ninja components
+from binaryninja import _binaryninjacore as core
+from binaryninja.enums import FormInputFieldType, MessageBoxIcon, MessageBoxButtonSet, MessageBoxButtonResult, ReportType
+from binaryninja import binaryview
+from binaryninja import log
+from binaryninja import flowgraph
+
+# 2-3 compatibility
+from binaryninja import range
+
+
+
[docs]class LabelField(object): + """ + ``LabelField`` adds a text label to the display. + """ +
[docs] def __init__(self, text): + self.text = text
+ + def _fill_core_struct(self, value): + value.type = FormInputFieldType.LabelFormField + value.prompt = self.text + + def _fill_core_result(self, value): + pass + + def _get_result(self, value): + pass
+ + +
[docs]class SeparatorField(object): + """ + ``SeparatorField`` adds vertical separation to the display. + """ + def _fill_core_struct(self, value): + value.type = FormInputFieldType.SeparatorFormField + + def _fill_core_result(self, value): + pass + + def _get_result(self, value): + pass
+ + +
[docs]class TextLineField(object): + """ + ``TextLineField`` Adds prompt for text string input. Result is stored in self.result as a string on completion. + """ +
[docs] def __init__(self, prompt): + self.prompt = prompt + self.result = None
+ + def _fill_core_struct(self, value): + value.type = FormInputFieldType.TextLineFormField + value.prompt = self.prompt + + def _fill_core_result(self, value): + value.stringResult = core.BNAllocString(str(self.result)) + + def _get_result(self, value): + self.result = value.stringResult
+ + +
[docs]class MultilineTextField(object): + """ + ``MultilineTextField`` add multi-line text string input field. Result is stored in self.result + as a string. This option is not supported on the command-line. + """ +
[docs] def __init__(self, prompt): + self.prompt = prompt + self.result = None
+ + def _fill_core_struct(self, value): + value.type = FormInputFieldType.MultilineTextFormField + value.prompt = self.prompt + + def _fill_core_result(self, value): + value.stringResult = core.BNAllocString(str(self.result)) + + def _get_result(self, value): + self.result = value.stringResult
+ + +
[docs]class IntegerField(object): + """ + ``IntegerField`` add prompt for integer. Result is stored in self.result as an int. + """ +
[docs] def __init__(self, prompt): + self.prompt = prompt + self.result = None
+ + def _fill_core_struct(self, value): + value.type = FormInputFieldType.IntegerFormField + value.prompt = self.prompt + + def _fill_core_result(self, value): + value.intResult = self.result + + def _get_result(self, value): + self.result = value.intResult
+ + +
[docs]class AddressField(object): + """ + ``AddressField`` prompts the user for an address. By passing the optional view and current_address parameters + offsets can be used instead of just an address. The result is stored as in int in self.result. + + Note: This API currently functions differently on the command-line, as the view and current_address are + disregarded. Additionally where as in the UI the result defaults to hexadecimal on the command-line 0x must be + specified. + """ +
[docs] def __init__(self, prompt, view=None, current_address=0): + self.prompt = prompt + self.view = view + self.current_address = current_address + self.result = None
+ + def _fill_core_struct(self, value): + value.type = FormInputFieldType.AddressFormField + value.prompt = self.prompt + value.view = None + if self.view is not None: + value.view = self.view.handle + value.currentAddress = self.current_address + + def _fill_core_result(self, value): + value.addressResult = self.result + + def _get_result(self, value): + self.result = value.addressResult
+ + +
[docs]class ChoiceField(object): + """ + ``ChoiceField`` prompts the user to choose from the list of strings provided in ``choices``. Result is stored + in self.result as an index in to the choices array. + + :attr str prompt: prompt to be presented to the user + :attr list(str) choices: list of choices to choose from + + """ +
[docs] def __init__(self, prompt, choices): + self.prompt = prompt + self.choices = choices + self.result = None
+ + def _fill_core_struct(self, value): + value.type = FormInputFieldType.ChoiceFormField + value.prompt = self.prompt + choice_buf = (ctypes.c_char_p * len(self.choices))() + for i in range(0, len(self.choices)): + choice_buf[i] = self.choices[i].encode('charmap') + value.choices = choice_buf + value.count = len(self.choices) + + def _fill_core_result(self, value): + value.indexResult = self.result + + def _get_result(self, value): + self.result = value.indexResult
+ + +
[docs]class OpenFileNameField(object): + """ + ``OpenFileNameField`` prompts the user to specify a file name to open. Result is stored in self.result as a string. + """ +
[docs] def __init__(self, prompt, ext=""): + self.prompt = prompt + self.ext = ext + self.result = None
+ + def _fill_core_struct(self, value): + value.type = FormInputFieldType.OpenFileNameFormField + value.prompt = self.prompt + value.ext = self.ext + + def _fill_core_result(self, value): + value.stringResult = core.BNAllocString(str(self.result)) + + def _get_result(self, value): + self.result = value.stringResult
+ + +
[docs]class SaveFileNameField(object): + """ + ``SaveFileNameField`` prompts the user to specify a file name to save. Result is stored in self.result as a string. + """ +
[docs] def __init__(self, prompt, ext="", default_name=""): + self.prompt = prompt + self.ext = ext + self.default_name = default_name + self.result = None
+ + def _fill_core_struct(self, value): + value.type = FormInputFieldType.SaveFileNameFormField + value.prompt = self.prompt + value.ext = self.ext + value.defaultName = self.default_name + + def _fill_core_result(self, value): + value.stringResult = core.BNAllocString(str(self.result)) + + def _get_result(self, value): + self.result = value.stringResult
+ + +
[docs]class DirectoryNameField(object): + """ + ``DirectoryNameField`` prompts the user to specify a directory name to open. Result is stored in self.result as + a string. + """ +
[docs] def __init__(self, prompt, default_name=""): + self.prompt = prompt + self.default_name = default_name + self.result = None
+ + def _fill_core_struct(self, value): + value.type = FormInputFieldType.DirectoryNameFormField + value.prompt = self.prompt + value.defaultName = self.default_name + + def _fill_core_result(self, value): + value.stringResult = core.BNAllocString(str(self.result)) + + def _get_result(self, value): + self.result = value.stringResult
+ + +
[docs]class InteractionHandler(object): + _interaction_handler = None + +
[docs] def __init__(self): + self._cb = core.BNInteractionHandlerCallbacks() + self._cb.context = 0 + self._cb.showPlainTextReport = self._cb.showPlainTextReport.__class__(self._show_plain_text_report) + self._cb.showMarkdownReport = self._cb.showMarkdownReport.__class__(self._show_markdown_report) + self._cb.showHTMLReport = self._cb.showHTMLReport.__class__(self._show_html_report) + self._cb.showGraphReport = self._cb.showGraphReport.__class__(self._show_graph_report) + self._cb.showReportCollection = self._cb.showReportCollection.__class__(self._show_report_collection) + self._cb.getTextLineInput = self._cb.getTextLineInput.__class__(self._get_text_line_input) + self._cb.getIntegerInput = self._cb.getIntegerInput.__class__(self._get_int_input) + self._cb.getAddressInput = self._cb.getAddressInput.__class__(self._get_address_input) + self._cb.getChoiceInput = self._cb.getChoiceInput.__class__(self._get_choice_input) + self._cb.getOpenFileNameInput = self._cb.getOpenFileNameInput.__class__(self._get_open_filename_input) + self._cb.getSaveFileNameInput = self._cb.getSaveFileNameInput.__class__(self._get_save_filename_input) + self._cb.getDirectoryNameInput = self._cb.getDirectoryNameInput.__class__(self._get_directory_name_input) + self._cb.getFormInput = self._cb.getFormInput.__class__(self._get_form_input) + self._cb.showMessageBox = self._cb.showMessageBox.__class__(self._show_message_box)
+ +
[docs] def register(self): + self.__class__._interaction_handler = self + core.BNRegisterInteractionHandler(self._cb)
+ + def _show_plain_text_report(self, ctxt, view, title, contents): + try: + if view: + view = binaryview.BinaryView(handle = core.BNNewViewReference(view)) + else: + view = None + self.show_plain_text_report(view, title, contents) + except: + log.log_error(traceback.format_exc()) + + def _show_markdown_report(self, ctxt, view, title, contents, plaintext): + try: + if view: + view = binaryview.BinaryView(handle = core.BNNewViewReference(view)) + else: + view = None + self.show_markdown_report(view, title, contents, plaintext) + except: + log.log_error(traceback.format_exc()) + + def _show_html_report(self, ctxt, view, title, contents, plaintext): + try: + if view: + view = binaryview.BinaryView(handle = core.BNNewViewReference(view)) + else: + view = None + self.show_html_report(view, title, contents, plaintext) + except: + log.log_error(traceback.format_exc()) + + def _show_graph_report(self, ctxt, view, title, graph): + try: + if view: + view = binaryview.BinaryView(handle = core.BNNewViewReference(view)) + else: + view = None + self.show_graph_report(view, title, flowgraph.CoreFlowGraph(core.BNNewFlowGraphReference(graph))) + except: + log.log_error(traceback.format_exc()) + + def _show_report_collection(self, ctxt, title, reports): + try: + self.show_report_collection(title, ReportCollection(core.BNNewReportCollectionReference(reports))) + except: + log.log_error(traceback.format_exc()) + + def _get_text_line_input(self, ctxt, result, prompt, title): + try: + value = self.get_text_line_input(prompt, title) + if value is None: + return False + result[0] = core.BNAllocString(str(value)) + return True + except: + log.log_error(traceback.format_exc()) + + def _get_int_input(self, ctxt, result, prompt, title): + try: + value = self.get_int_input(prompt, title) + if value is None: + return False + result[0] = value + return True + except: + log.log_error(traceback.format_exc()) + + def _get_address_input(self, ctxt, result, prompt, title, view, current_address): + try: + if view: + view = binaryview.BinaryView(handle = core.BNNewViewReference(view)) + else: + view = None + value = self.get_address_input(prompt, title, view, current_address) + if value is None: + return False + result[0] = value + return True + except: + log.log_error(traceback.format_exc()) + + def _get_choice_input(self, ctxt, result, prompt, title, choice_buf, count): + try: + choices = [] + for i in range(0, count): + choices.append(choice_buf[i]) + value = self.get_choice_input(prompt, title, choices) + if value is None: + return False + result[0] = value + return True + except: + log.log_error(traceback.format_exc()) + + def _get_open_filename_input(self, ctxt, result, prompt, ext): + try: + value = self.get_open_filename_input(prompt, ext) + if value is None: + return False + result[0] = core.BNAllocString(str(value)) + return True + except: + log.log_error(traceback.format_exc()) + + def _get_save_filename_input(self, ctxt, result, prompt, ext, default_name): + try: + value = self.get_save_filename_input(prompt, ext, default_name) + if value is None: + return False + result[0] = core.BNAllocString(str(value)) + return True + except: + log.log_error(traceback.format_exc()) + + def _get_directory_name_input(self, ctxt, result, prompt, default_name): + try: + value = self.get_directory_name_input(prompt, default_name) + if value is None: + return False + result[0] = core.BNAllocString(str(value)) + return True + except: + log.log_error(traceback.format_exc()) + + def _get_form_input(self, ctxt, fields, count, title): + try: + field_objs = [] + for i in range(0, count): + if fields[i].type == FormInputFieldType.LabelFormField: + field_objs.append(LabelField(fields[i].prompt)) + elif fields[i].type == FormInputFieldType.SeparatorFormField: + field_objs.append(SeparatorField()) + elif fields[i].type == FormInputFieldType.TextLineFormField: + field_objs.append(TextLineField(fields[i].prompt)) + elif fields[i].type == FormInputFieldType.MultilineTextFormField: + field_objs.append(MultilineTextField(fields[i].prompt)) + elif fields[i].type == FormInputFieldType.IntegerFormField: + field_objs.append(IntegerField(fields[i].prompt)) + elif fields[i].type == FormInputFieldType.AddressFormField: + view = None + if fields[i].view: + view = binaryview.BinaryView(handle = core.BNNewViewReference(fields[i].view)) + field_objs.append(AddressField(fields[i].prompt, view, fields[i].currentAddress)) + elif fields[i].type == FormInputFieldType.ChoiceFormField: + choices = [] + for j in range(0, fields[i].count): + choices.append(fields[i].choices[j]) + field_objs.append(ChoiceField(fields[i].prompt, choices)) + elif fields[i].type == FormInputFieldType.OpenFileNameFormField: + field_objs.append(OpenFileNameField(fields[i].prompt, fields[i].ext)) + elif fields[i].type == FormInputFieldType.SaveFileNameFormField: + field_objs.append(SaveFileNameField(fields[i].prompt, fields[i].ext, fields[i].defaultName)) + elif fields[i].type == FormInputFieldType.DirectoryNameFormField: + field_objs.append(DirectoryNameField(fields[i].prompt, fields[i].defaultName)) + else: + field_objs.append(LabelField(fields[i].prompt)) + if not self.get_form_input(field_objs, title): + return False + for i in range(0, count): + field_objs[i]._fill_core_result(fields[i]) + return True + except: + log.log_error(traceback.format_exc()) + + def _show_message_box(self, ctxt, title, text, buttons, icon): + try: + return self.show_message_box(title, text, buttons, icon) + except: + log.log_error(traceback.format_exc()) + +
[docs] def show_plain_text_report(self, view, title, contents): + pass
+ +
[docs] def show_markdown_report(self, view, title, contents, plaintext): + self.show_html_report(view, title, markdown_to_html(contents), plaintext)
+ +
[docs] def show_html_report(self, view, title, contents, plaintext): + if len(plaintext) != 0: + self.show_plain_text_report(view, title, plaintext)
+ +
[docs] def show_graph_report(self, view, title, graph): + pass
+ +
[docs] def show_report_collection(self, title, reports): + pass
+ +
[docs] def get_text_line_input(self, prompt, title): + return None
+ +
[docs] def get_int_input(self, prompt, title): + while True: + text = self.get_text_line_input(prompt, title) + if len(text) == 0: + return False + try: + return int(text) + except: + continue
+ +
[docs] def get_address_input(self, prompt, title, view, current_address): + return get_int_input(prompt, title)
+ +
[docs] def get_choice_input(self, prompt, title, choices): + return None
+ +
[docs] def get_open_filename_input(self, prompt, ext): + return get_text_line_input(prompt, "Open File")
+ +
[docs] def get_save_filename_input(self, prompt, ext, default_name): + return get_text_line_input(prompt, "Save File")
+ +
[docs] def get_directory_name_input(self, prompt, default_name): + return get_text_line_input(prompt, "Select Directory")
+ +
[docs] def get_form_input(self, fields, title): + return False
+ +
[docs] def show_message_box(self, title, text, buttons, icon): + return MessageBoxButtonResult.CancelButton
+ + +
[docs]class PlainTextReport(object): +
[docs] def __init__(self, title, contents, view = None): + self.view = view + self.title = title + self.contents = contents
+ + def __repr__(self): + return "<plaintext report: %s>" % self.title + + def __str__(self): + return self.contents
+ + +
[docs]class MarkdownReport(object): +
[docs] def __init__(self, title, contents, plaintext = "", view = None): + self.view = view + self.title = title + self.contents = contents + self.plaintext = plaintext
+ + def __repr__(self): + return "<markdown report: %s>" % self.title + + def __str__(self): + return self.contents
+ + +
[docs]class HTMLReport(object): +
[docs] def __init__(self, title, contents, plaintext = "", view = None): + self.view = view + self.title = title + self.contents = contents + self.plaintext = plaintext
+ + def __repr__(self): + return "<html report: %s>" % self.title + + def __str__(self): + return self.contents
+ + +
[docs]class FlowGraphReport(object): +
[docs] def __init__(self, title, graph, view = None): + self.view = view + self.title = title + self.graph = graph
+ + def __repr__(self): + return "<graph report: %s>" % self.title
+ + +
[docs]class ReportCollection(object): +
[docs] def __init__(self, handle = None): + if handle is None: + self.handle = core.BNCreateReportCollection() + else: + self.handle = handle
+ + def __len__(self): + return core.BNGetReportCollectionCount(self.handle) + + def _report_from_index(self, i): + report_type = core.BNGetReportType(self.handle, i) + title = core.BNGetReportTitle(self.handle, i) + view = core.BNGetReportView(self.handle, i) + if view: + view = binaryview.BinaryView(handle = view) + else: + view = None + if report_type == ReportType.PlainTextReportType: + contents = core.BNGetReportContents(self.handle, i) + return PlainTextReport(title, contents, view) + elif report_type == ReportType.MarkdownReportType: + contents = core.BNGetReportContents(self.handle, i) + plaintext = core.BNGetReportPlainText(self.handle, i) + return MarkdownReport(title, contents, plaintext, view) + elif report_type == ReportType.HTMLReportType: + contents = core.BNGetReportContents(self.handle, i) + plaintext = core.BNGetReportPlainText(self.handle, i) + return HTMLReport(title, contents, plaintext, view) + elif report_type == ReportType.FlowGraphReportType: + graph = flowgraph.CoreFlowGraph(core.BNGetReportFlowGraph(self.handle, i)) + return FlowGraphReport(title, graph, view) + raise TypeError("invalid report type %s" % repr(report_type)) + + def __getitem__(self, i): + if isinstance(i, slice) or isinstance(i, tuple): + raise IndexError("expected integer report index") + if (i < 0) or (i >= len(self)): + raise IndexError("index out of range") + return self._report_from_index(i) + + def __iter__(self): + count = len(self) + for i in range(0, count): + yield self._report_from_index(i) + + def __repr__(self): + return "<reports: %s>" % repr(list(self)) + +
[docs] def append(self, report): + if report.view is None: + view = None + else: + view = report.view.handle + if isinstance(report, PlainTextReport): + core.BNAddPlainTextReportToCollection(self.handle, view, report.title, report.contents) + elif isinstance(report, MarkdownReport): + core.BNAddMarkdownReportToCollection(self.handle, view, report.title, report.contents, report.plaintext) + elif isinstance(report, HTMLReport): + core.BNAddHTMLReportToCollection(self.handle, view, report.title, report.contents, report.plaintext) + elif isinstance(report, FlowGraphReport): + core.BNAddGraphReportToCollection(self.handle, view, report.title, report.graph.handle) + else: + raise TypeError("expected report object")
+ + +
[docs]def markdown_to_html(contents): + """ + ``markdown_to_html`` converts the provided markdown to HTML. + + :param string contents: Markdown contents to convert to HTML. + :rtype: string + :Example: + >>> markdown_to_html("##Yay") + '<h2>Yay</h2>' + """ + return core.BNMarkdownToHTML(contents)
+ + +
[docs]def show_plain_text_report(title, contents): + """ + ``show_plain_text_report`` displays contents to the user in the UI or on the command-line. + + Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line + a simple text prompt is used. + + :param str title: title to display in the UI pop-up. + :param str contents: plaintext contents to display + :rtype: None + :Example: + >>> show_plain_text_report("title", "contents") + contents + """ + core.BNShowPlainTextReport(None, title, contents)
+ + +
[docs]def show_markdown_report(title, contents, plaintext=""): + """ + ``show_markdown_report`` displays the markdown contents in UI applications and plaintext in command-line + applications. This API doesn't support hyperlinking into the BinaryView, use the BinaryView.show_markdown_report + if hyperlinking is needed. + + Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line + a simple text prompt is used. + + :param str contents: markdown contents to display + :param str plaintext: Plain text version to display (used on the command-line) + :rtype: None + :Example: + >>> show_markdown_report("title", "##Contents", "Plain text contents") + Plain text contents + """ + core.BNShowMarkdownReport(None, title, contents, plaintext)
+ + +
[docs]def show_html_report(title, contents, plaintext=""): + """ + ``show_html_report`` displays the HTML contents in UI applications and plaintext in command-line + applications. This API doesn't support hyperlinking into the BinaryView, use the BinaryView.show_html_report + if hyperlinking is needed. + + Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line + a simple text prompt is used. + + :param str contents: HTML contents to display + :param str plaintext: Plain text version to display (used on the command-line) + :rtype: None + :Example: + >>> show_html_report("title", "<h1>Contents</h1>", "Plain text contents") + Plain text contents + """ + core.BNShowHTMLReport(None, title, contents, plaintext)
+ + +
[docs]def show_graph_report(title, graph): + """ + ``show_graph_report`` displays a flow graph in UI applications. + + Note: This API function will have no effect outside the UI. + + :param FlowGraph graph: Flow graph to display + :rtype: None + """ + func = graph.function + if func is None: + core.BNShowGraphReport(None, title, graph.handle) + else: + core.BNShowGraphReport(func.view.handle, title, graph.handle)
+ + +
[docs]def show_report_collection(title, reports): + """ + ``show_report_collection`` displays multiple reports in UI applications. + + Note: This API function will have no effect outside the UI. + + :param ReportCollection reports: Reports to display + :rtype: None + """ + core.BNShowReportCollection(title, reports.handle)
+ + +
[docs]def get_text_line_input(prompt, title): + """ + ``get_text_line_input`` prompts the user to input a string with the given prompt and title. + + Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line + a simple text prompt is used. + + :param str prompt: String to prompt with. + :param str title: Title of the window when executed in the UI. + :rtype: string containing the input without trailing newline character. + :Example: + >>> get_text_line_input("PROMPT>", "getinfo") + PROMPT> Input! + 'Input!' + """ + value = ctypes.c_char_p() + if not core.BNGetTextLineInput(value, prompt, title): + return None + result = value.value + core.BNFreeString(ctypes.cast(value, ctypes.POINTER(ctypes.c_byte))) + return result
+ + +
[docs]def get_int_input(prompt, title): + """ + ``get_int_input`` prompts the user to input a integer with the given prompt and title. + + Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line + a simple text prompt is used. + + :param str prompt: String to prompt with. + :param str title: Title of the window when executed in the UI. + :rtype: integer value input by the user. + :Example: + >>> get_int_input("PROMPT>", "getinfo") + PROMPT> 10 + 10 + """ + value = ctypes.c_longlong() + if not core.BNGetIntegerInput(value, prompt, title): + return None + return value.value
+ + +
[docs]def get_address_input(prompt, title): + """ + ``get_address_input`` prompts the user for an address with the given prompt and title. + + Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line + a simple text prompt is used. + + :param str prompt: String to prompt with. + :param str title: Title of the window when executed in the UI. + :rtype: integer value input by the user. + :Example: + >>> get_address_input("PROMPT>", "getinfo") + PROMPT> 10 + 10L + """ + value = ctypes.c_ulonglong() + if not core.BNGetAddressInput(value, prompt, title, None, 0): + return None + return value.value
+ + +
[docs]def get_choice_input(prompt, title, choices): + """ + ``get_choice_input`` prompts the user to select the one of the provided choices. + + Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line + a simple text prompt is used. The UI uses a combo box. + + :param str prompt: String to prompt with. + :param str title: Title of the window when executed in the UI. + :param list choices: A list of strings for the user to choose from. + :rtype: integer array index of the selected option + :Example: + >>> get_choice_input("PROMPT>", "choices", ["Yes", "No", "Maybe"]) + choices + 1) Yes + 2) No + 3) Maybe + PROMPT> 1 + 0L + """ + choice_buf = (ctypes.c_char_p * len(choices))() + for i in range(0, len(choices)): + choice_buf[i] = str(choices[i]).encode('charmap') + value = ctypes.c_ulonglong() + if not core.BNGetChoiceInput(value, prompt, title, choice_buf, len(choices)): + return None + return value.value
+ + +
[docs]def get_open_filename_input(prompt, ext=""): + """ + ``get_open_filename_input`` prompts the user for a file name to open. + + Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line + a simple text prompt is used. The UI uses the native window pop-up for file selection. + + :param str prompt: Prompt to display. + :param str ext: Optional, file extension + :Example: + >>> get_open_filename_input("filename:", "exe") + filename: foo.exe + 'foo.exe' + """ + value = ctypes.c_char_p() + if not core.BNGetOpenFileNameInput(value, prompt, ext): + return None + result = value.value + core.BNFreeString(ctypes.cast(value, ctypes.POINTER(ctypes.c_byte))) + return result
+ + +
[docs]def get_save_filename_input(prompt, ext="", default_name=""): + """ + ``get_save_filename_input`` prompts the user for a file name to save as, optionally providing a file extension and + default_name. + + Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line + a simple text prompt is used. The UI uses the native window pop-up for file selection. + + :param str prompt: Prompt to display. + :param str ext: Optional, file extension + :param str default_name: Optional, default file name. + :Example: + >>> get_save_filename_input("filename:", "exe", "foo.exe") + filename: foo.exe + 'foo.exe' + """ + value = ctypes.c_char_p() + if not core.BNGetSaveFileNameInput(value, prompt, ext, default_name): + return None + result = value.value + core.BNFreeString(ctypes.cast(value, ctypes.POINTER(ctypes.c_byte))) + return result
+ + +
[docs]def get_directory_name_input(prompt, default_name=""): + """ + ``get_directory_name_input`` prompts the user for a directory name to save as, optionally providing a default_name. + + Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line a simple text prompt is used. The UI uses the native window pop-up for file selection. + + :param str prompt: Prompt to display. + :param str default_name: Optional, default directory name. + :rtype: str + :Example: + >>> get_directory_name_input("prompt") + prompt dirname + 'dirname' + """ + value = ctypes.c_char_p() + if not core.BNGetDirectoryNameInput(value, prompt, default_name): + return None + result = value.value + core.BNFreeString(ctypes.cast(value, ctypes.POINTER(ctypes.c_byte))) + return result
+ + +
[docs]def get_form_input(fields, title): + """ + ``get_from_input`` Prompts the user for a set of inputs specified in ``fields`` with given title. + The fields parameter is a list which can contain the following types: + - str - an alias for LabelField + - None - an alias for SeparatorField + - LabelField - Text output + - SeparatorField - Vertical spacing + - TextLineField - Prompt for a string value + - MultilineTextField - Prompt for multi-line string value + - IntegerField - Prompt for an integer + - AddressField - Prompt for an address + - ChoiceField - Prompt for a choice from provided options + - OpenFileNameField - Prompt for file to open + - SaveFileNameField - Prompt for file to save to + - DirectoryNameField - Prompt for directory name + This API is flexible and works both in the UI via a pop-up dialog and on the command-line. + :params list fields: A list containing of the above specified classes, strings or None + :params str title: The title of the pop-up dialog. + :Example: + + >>> int_f = IntegerField("Specify Integer") + >>> tex_f = TextLineField("Specify name") + >>> choice_f = ChoiceField("Options", ["Yes", "No", "Maybe"]) + >>> get_form_input(["Get Data", None, int_f, tex_f, choice_f], "The options") + Get Data + + Specify Integer 1337 + Specify name Peter + The options + 1) Yes + 2) No + 3) Maybe + Options 1 + >>> True + >>> print(tex_f.result, int_f.result, choice_f.result) + Peter 1337 0 + """ + value = (core.BNFormInputField * len(fields))() + for i in range(0, len(fields)): + if isinstance(fields[i], str): + LabelField(fields[i])._fill_core_struct(value[i]) + elif fields[i] is None: + SeparatorField()._fill_core_struct(value[i]) + else: + fields[i]._fill_core_struct(value[i]) + if not core.BNGetFormInput(value, len(fields), title): + return False + for i in range(0, len(fields)): + if not (isinstance(fields[i], str) or (fields[i] is None)): + fields[i]._get_result(value[i]) + core.BNFreeFormInputResults(value, len(fields)) + return True
+ + +
[docs]def show_message_box(title, text, buttons=MessageBoxButtonSet.OKButtonSet, icon=MessageBoxIcon.InformationIcon): + """ + ``show_message_box`` Displays a configurable message box in the UI, or prompts on the console as appropriate + retrieves a list of all Symbol objects of the provided symbol type in the optionally + provided range. + + :param str title: Text title for the message box. + :param str text: Text for the main body of the message box. + :param MessageBoxButtonSet buttons: One of :py:class:`MessageBoxButtonSet` + :param MessageBoxIcon icon: One of :py:class:`MessageBoxIcon` + :return: Which button was selected + :rtype: MessageBoxButtonResult + """ + return core.BNShowMessageBox(title, text, buttons, icon)
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/lineardisassembly.html b/personal/api-docs/_modules/binaryninja/lineardisassembly.html new file mode 100644 index 0000000..d4ec779 --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/lineardisassembly.html @@ -0,0 +1,293 @@ + + + + + + + + + + + binaryninja.lineardisassembly — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.lineardisassembly

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+
+
[docs]class LinearDisassemblyPosition(object): + """ + ``class LinearDisassemblyPosition`` is a helper object containing the position of the current Linear Disassembly. + + .. note:: This object should not be instantiated directly. Rather call \ + :py:meth:`get_linear_disassembly_position_at` which instantiates this object. + """ +
[docs] def __init__(self, func, block, addr): + self.function = func + self.block = block + self.address = addr
+ + +
[docs]class LinearDisassemblyLine(object): +
[docs] def __init__(self, line_type, func, block, line_offset, contents): + self.type = line_type + self.function = func + self.block = block + self.line_offset = line_offset + self.contents = contents
+ + def __str__(self): + return str(self.contents) + + def __repr__(self): + return repr(self.contents)
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/log.html b/personal/api-docs/_modules/binaryninja/log.html new file mode 100644 index 0000000..8eb6137 --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/log.html @@ -0,0 +1,430 @@ + + + + + + + + + + + binaryninja.log — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.log

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+
+# Binary Ninja components
+from binaryninja import _binaryninjacore as core
+from binaryninja.enums import LogLevel
+
+
+_output_to_log = False
+
+
+
[docs]def redirect_output_to_log(): + global _output_to_log + _output_to_log = True
+ + +
[docs]def is_output_redirected_to_log(): + global _output_to_log + return _output_to_log
+ + +
[docs]def log(level, text): + """ + ``log`` writes messages to the log console for the given log level. + + ============ ======== ======================================================================= + LogLevelName LogLevel Description + ============ ======== ======================================================================= + DebugLog 0 Logs debuging information messages to the console. + InfoLog 1 Logs general information messages to the console. + WarningLog 2 Logs message to console with **Warning** icon. + ErrorLog 3 Logs message to console with **Error** icon, focusing the error console. + AlertLog 4 Logs message to pop up window. + ============ ======== ======================================================================= + + :param LogLevel level: Log level to use + :param str text: message to print + :rtype: None + """ + core.BNLog(level, '%s', text)
+ + +
[docs]def log_debug(text): + """ + ``log_debug`` Logs debugging information messages to the console. + + :param str text: message to print + :rtype: None + :Example: + + >>> log_to_stdout(LogLevel.DebugLog) + >>> log_debug("Hotdogs!") + Hotdogs! + """ + core.BNLogDebug('%s', text)
+ + +
[docs]def log_info(text): + """ + ``log_info`` Logs general information messages to the console. + + :param str text: message to print + :rtype: None + :Example: + + >>> log_info("Saucisson!") + Saucisson! + >>> + """ + core.BNLogInfo('%s', text)
+ + +
[docs]def log_warn(text): + """ + ``log_warn`` Logs message to console, if run through the GUI it logs with **Warning** icon. + + :param str text: message to print + :rtype: None + :Example: + + >>> log_to_stdout(LogLevel.DebugLog) + >>> log_info("Chilidogs!") + Chilidogs! + >>> + """ + core.BNLogWarn('%s', text)
+ + +
[docs]def log_error(text): + """ + ``log_error`` Logs message to console, if run through the GUI it logs with **Error** icon, focusing the error console. + + :param str text: message to print + :rtype: None + :Example: + + >>> log_to_stdout(LogLevel.DebugLog) + >>> log_error("Spanferkel!") + Spanferkel! + >>> + """ + core.BNLogError('%s', text)
+ + +
[docs]def log_alert(text): + """ + ``log_alert`` Logs message console and to a pop up window if run through the GUI. + + :param str text: message to print + :rtype: None + :Example: + + >>> log_to_stdout(LogLevel.DebugLog) + >>> log_alert("Kielbasa!") + Kielbasa! + >>> + """ + core.BNLogAlert('%s', text)
+ + +
[docs]def log_to_stdout(min_level=LogLevel.InfoLog): + """ + ``log_to_stdout`` redirects minimum log level to standard out. + + :param int min_level: minimum level to log to + :rtype: None + :Example: + + >>> log_debug("Hotdogs!") + >>> log_to_stdout(LogLevel.DebugLog) + >>> log_debug("Hotdogs!") + Hotdogs! + >>> + """ + core.BNLogToStdout(min_level)
+ + +
[docs]def log_to_stderr(min_level): + """ + ``log_to_stderr`` redirects minimum log level to standard error. + + :param int min_level: minimum level to log to + :rtype: None + """ + core.BNLogToStderr(min_level)
+ + +
[docs]def log_to_file(min_level, path, append = False): + """ + ``log_to_file`` redirects minimum log level to a file named ``path``, optionally appending rather than overwriting. + + :param int min_level: minimum level to log to + :param str path: path to log to + :param bool append: optional flag for specifying appending. True = append, False = overwrite. + :rtype: None + """ + core.BNLogToFile(min_level, str(path), append)
+ + +
[docs]def close_logs(): + """ + ``close_logs`` close all log files. + + :rtype: None + """ + core.BNCloseLogs()
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/lowlevelil.html b/personal/api-docs/_modules/binaryninja/lowlevelil.html new file mode 100644 index 0000000..f9c22e1 --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/lowlevelil.html @@ -0,0 +1,2689 @@ + + + + + + + + + + + binaryninja.lowlevelil — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.lowlevelil

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+import ctypes
+import struct
+
+# Binary Ninja components
+import binaryninja
+from binaryninja import _binaryninjacore as core
+from binaryninja.enums import LowLevelILOperation, LowLevelILFlagCondition, InstructionTextTokenType
+from binaryninja import basicblock #required for LowLevelILBasicBlock
+
+# 2-3 compatibility
+from binaryninja import range
+
+
+
[docs]class LowLevelILLabel(object): +
[docs] def __init__(self, handle = None): + if handle is None: + self.handle = (core.BNLowLevelILLabel * 1)() + core.BNLowLevelILInitLabel(self.handle) + else: + self.handle = handle
+ + +
[docs]class ILRegister(object): +
[docs] def __init__(self, arch, reg): + self.arch = arch + self.index = reg + self.temp = (self.index & 0x80000000) != 0 + if self.temp: + self.name = "temp%d" % (self.index & 0x7fffffff) + else: + self.name = self.arch.get_reg_name(self.index)
+ + @property + def info(self): + return self.arch.regs[self.name] + + def __str__(self): + return self.name + + def __repr__(self): + return self.name + + def __eq__(self, other): + return self.info == other.info
+ + +
[docs]class ILRegisterStack(object): +
[docs] def __init__(self, arch, reg_stack): + self.arch = arch + self.index = reg_stack + self.name = self.arch.get_reg_stack_name(self.index)
+ + @property + def info(self): + return self.arch.reg_stacks[self.name] + + def __str__(self): + return self.name + + def __repr__(self): + return self.name + + def __eq__(self, other): + return self.info == other.info
+ + +
[docs]class ILFlag(object): +
[docs] def __init__(self, arch, flag): + self.arch = arch + self.index = flag + self.temp = (self.index & 0x80000000) != 0 + if self.temp: + self.name = "cond:%d" % (self.index & 0x7fffffff) + else: + self.name = self.arch.get_flag_name(self.index)
+ + def __str__(self): + return self.name + + def __repr__(self): + return self.name
+ + +
[docs]class ILSemanticFlagClass(object): +
[docs] def __init__(self, arch, sem_class): + self.arch = arch + self.index = sem_class + self.name = self.arch.get_semantic_flag_class_name(self.index)
+ + def __str__(self): + return self.name + + def __repr__(self): + return self.name + + def __eq__(self, other): + return self.index == other.index
+ + +
[docs]class ILSemanticFlagGroup(object): +
[docs] def __init__(self, arch, sem_group): + self.arch = arch + self.index = sem_group + self.name = self.arch.get_semantic_flag_group_name(self.index)
+ + def __str__(self): + return self.name + + def __repr__(self): + return self.name + + def __eq__(self, other): + return self.index == other.index
+ + +
[docs]class ILIntrinsic(object): +
[docs] def __init__(self, arch, intrinsic): + self.arch = arch + self.index = intrinsic + self.name = self.arch.get_intrinsic_name(self.index) + if self.name in self.arch.intrinsics: + self.inputs = self.arch.intrinsics[self.name].inputs + self.outputs = self.arch.intrinsics[self.name].outputs
+ + def __str__(self): + return self.name + + def __repr__(self): + return self.name + + def __eq__(self, other): + return self.index == other.index
+ + +
[docs]class SSARegister(object): +
[docs] def __init__(self, reg, version): + self.reg = reg + self.version = version
+ + def __repr__(self): + return "<ssa %s version %d>" % (repr(self.reg), self.version)
+ + +
[docs]class SSARegisterStack(object): +
[docs] def __init__(self, reg_stack, version): + self.reg_stack = reg_stack + self.version = version
+ + def __repr__(self): + return "<ssa %s version %d>" % (repr(self.reg_stack), self.version)
+ + +
[docs]class SSAFlag(object): +
[docs] def __init__(self, flag, version): + self.flag = flag + self.version = version
+ + def __repr__(self): + return "<ssa %s version %d>" % (repr(self.flag), self.version)
+ + +
[docs]class SSARegisterOrFlag(object): +
[docs] def __init__(self, reg_or_flag, version): + self.reg_or_flag = reg_or_flag + self.version = version
+ + def __repr__(self): + return "<ssa %s version %d>" % (repr(self.reg_or_flag), self.version)
+ + +
[docs]class LowLevelILOperationAndSize(object): +
[docs] def __init__(self, operation, size): + self.operation = operation + self.size = size
+ + def __repr__(self): + if self.size == 0: + return "<%s>" % self.operation.name + return "<%s %d>" % (self.operation.name, self.size)
+ + +
[docs]class LowLevelILInstruction(object): + """ + ``class LowLevelILInstruction`` Low Level Intermediate Language Instructions are infinite length tree-based + instructions. Tree-based instructions use infix notation with the left hand operand being the destination operand. + Infix notation is thus more natural to read than other notations (e.g. x86 ``mov eax, 0`` vs. LLIL ``eax = 0``). + """ + + ILOperations = { + LowLevelILOperation.LLIL_NOP: [], + LowLevelILOperation.LLIL_SET_REG: [("dest", "reg"), ("src", "expr")], + LowLevelILOperation.LLIL_SET_REG_SPLIT: [("hi", "reg"), ("lo", "reg"), ("src", "expr")], + LowLevelILOperation.LLIL_SET_REG_STACK_REL: [("stack", "reg_stack"), ("dest", "expr"), ("src", "expr")], + LowLevelILOperation.LLIL_REG_STACK_PUSH: [("stack", "reg_stack"), ("src", "expr")], + LowLevelILOperation.LLIL_SET_FLAG: [("dest", "flag"), ("src", "expr")], + LowLevelILOperation.LLIL_LOAD: [("src", "expr")], + LowLevelILOperation.LLIL_STORE: [("dest", "expr"), ("src", "expr")], + LowLevelILOperation.LLIL_PUSH: [("src", "expr")], + LowLevelILOperation.LLIL_POP: [], + LowLevelILOperation.LLIL_REG: [("src", "reg")], + LowLevelILOperation.LLIL_REG_SPLIT: [("hi", "reg"), ("lo", "reg")], + LowLevelILOperation.LLIL_REG_STACK_REL: [("stack", "reg_stack"), ("src", "expr")], + LowLevelILOperation.LLIL_REG_STACK_POP: [("stack", "reg_stack")], + LowLevelILOperation.LLIL_REG_STACK_FREE_REG: [("dest", "reg")], + LowLevelILOperation.LLIL_REG_STACK_FREE_REL: [("stack", "reg_stack"), ("dest", "expr")], + LowLevelILOperation.LLIL_CONST: [("constant", "int")], + LowLevelILOperation.LLIL_CONST_PTR: [("constant", "int")], + LowLevelILOperation.LLIL_EXTERN_PTR: [("constant", "int"), ("offset", "int")], + LowLevelILOperation.LLIL_FLOAT_CONST: [("constant", "float")], + LowLevelILOperation.LLIL_FLAG: [("src", "flag")], + LowLevelILOperation.LLIL_FLAG_BIT: [("src", "flag"), ("bit", "int")], + LowLevelILOperation.LLIL_ADD: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_ADC: [("left", "expr"), ("right", "expr"), ("carry", "expr")], + LowLevelILOperation.LLIL_SUB: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_SBB: [("left", "expr"), ("right", "expr"), ("carry", "expr")], + LowLevelILOperation.LLIL_AND: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_OR: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_XOR: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_LSL: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_LSR: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_ASR: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_ROL: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_RLC: [("left", "expr"), ("right", "expr"), ("carry", "expr")], + LowLevelILOperation.LLIL_ROR: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_RRC: [("left", "expr"), ("right", "expr"), ("carry", "expr")], + LowLevelILOperation.LLIL_MUL: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_MULU_DP: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_MULS_DP: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_DIVU: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_DIVU_DP: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_DIVS: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_DIVS_DP: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_MODU: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_MODU_DP: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_MODS: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_MODS_DP: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_NEG: [("src", "expr")], + LowLevelILOperation.LLIL_NOT: [("src", "expr")], + LowLevelILOperation.LLIL_SX: [("src", "expr")], + LowLevelILOperation.LLIL_ZX: [("src", "expr")], + LowLevelILOperation.LLIL_LOW_PART: [("src", "expr")], + LowLevelILOperation.LLIL_JUMP: [("dest", "expr")], + LowLevelILOperation.LLIL_JUMP_TO: [("dest", "expr"), ("targets", "int_list")], + LowLevelILOperation.LLIL_CALL: [("dest", "expr")], + LowLevelILOperation.LLIL_CALL_STACK_ADJUST: [("dest", "expr"), ("stack_adjustment", "int"), ("reg_stack_adjustments", "reg_stack_adjust")], + LowLevelILOperation.LLIL_TAILCALL: [("dest", "expr")], + LowLevelILOperation.LLIL_RET: [("dest", "expr")], + LowLevelILOperation.LLIL_NORET: [], + LowLevelILOperation.LLIL_IF: [("condition", "expr"), ("true", "int"), ("false", "int")], + LowLevelILOperation.LLIL_GOTO: [("dest", "int")], + LowLevelILOperation.LLIL_FLAG_COND: [("condition", "cond"), ("semantic_class", "sem_class")], + LowLevelILOperation.LLIL_FLAG_GROUP: [("semantic_group", "sem_group")], + LowLevelILOperation.LLIL_CMP_E: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_CMP_NE: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_CMP_SLT: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_CMP_ULT: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_CMP_SLE: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_CMP_ULE: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_CMP_SGE: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_CMP_UGE: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_CMP_SGT: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_CMP_UGT: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_TEST_BIT: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_BOOL_TO_INT: [("src", "expr")], + LowLevelILOperation.LLIL_ADD_OVERFLOW: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_SYSCALL: [], + LowLevelILOperation.LLIL_INTRINSIC: [("output", "reg_or_flag_list"), ("intrinsic", "intrinsic"), ("param", "expr")], + LowLevelILOperation.LLIL_INTRINSIC_SSA: [("output", "reg_or_flag_ssa_list"), ("intrinsic", "intrinsic"), ("param", "expr")], + LowLevelILOperation.LLIL_BP: [], + LowLevelILOperation.LLIL_TRAP: [("vector", "int")], + LowLevelILOperation.LLIL_UNDEF: [], + LowLevelILOperation.LLIL_UNIMPL: [], + LowLevelILOperation.LLIL_UNIMPL_MEM: [("src", "expr")], + LowLevelILOperation.LLIL_FADD: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_FSUB: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_FMUL: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_FDIV: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_FSQRT: [("src", "expr")], + LowLevelILOperation.LLIL_FNEG: [("src", "expr")], + LowLevelILOperation.LLIL_FABS: [("src", "expr")], + LowLevelILOperation.LLIL_FLOAT_TO_INT: [("src", "expr")], + LowLevelILOperation.LLIL_INT_TO_FLOAT: [("src", "expr")], + LowLevelILOperation.LLIL_FLOAT_CONV: [("src", "expr")], + LowLevelILOperation.LLIL_ROUND_TO_INT: [("src", "expr")], + LowLevelILOperation.LLIL_FLOOR: [("src", "expr")], + LowLevelILOperation.LLIL_CEIL: [("src", "expr")], + LowLevelILOperation.LLIL_FTRUNC: [("src", "expr")], + LowLevelILOperation.LLIL_FCMP_E: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_FCMP_NE: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_FCMP_LT: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_FCMP_LE: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_FCMP_GE: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_FCMP_GT: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_FCMP_O: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_FCMP_UO: [("left", "expr"), ("right", "expr")], + LowLevelILOperation.LLIL_SET_REG_SSA: [("dest", "reg_ssa"), ("src", "expr")], + LowLevelILOperation.LLIL_SET_REG_SSA_PARTIAL: [("full_reg", "reg_ssa"), ("dest", "reg"), ("src", "expr")], + LowLevelILOperation.LLIL_SET_REG_SPLIT_SSA: [("hi", "expr"), ("lo", "expr"), ("src", "expr")], + LowLevelILOperation.LLIL_SET_REG_STACK_REL_SSA: [("stack", "expr"), ("dest", "expr"), ("top", "expr"), ("src", "expr")], + LowLevelILOperation.LLIL_SET_REG_STACK_ABS_SSA: [("stack", "expr"), ("dest", "reg"), ("src", "expr")], + LowLevelILOperation.LLIL_REG_SPLIT_DEST_SSA: [("dest", "reg_ssa")], + LowLevelILOperation.LLIL_REG_STACK_DEST_SSA: [("src", "reg_stack_ssa_dest_and_src")], + LowLevelILOperation.LLIL_REG_SSA: [("src", "reg_ssa")], + LowLevelILOperation.LLIL_REG_SSA_PARTIAL: [("full_reg", "reg_ssa"), ("src", "reg")], + LowLevelILOperation.LLIL_REG_SPLIT_SSA: [("hi", "reg_ssa"), ("lo", "reg_ssa")], + LowLevelILOperation.LLIL_REG_STACK_REL_SSA: [("stack", "reg_stack_ssa"), ("src", "expr"), ("top", "expr")], + LowLevelILOperation.LLIL_REG_STACK_ABS_SSA: [("stack", "reg_stack_ssa"), ("src", "reg")], + LowLevelILOperation.LLIL_REG_STACK_FREE_REL_SSA: [("stack", "expr"), ("dest", "expr"), ("top", "expr")], + LowLevelILOperation.LLIL_REG_STACK_FREE_ABS_SSA: [("stack", "expr"), ("dest", "reg")], + LowLevelILOperation.LLIL_SET_FLAG_SSA: [("dest", "flag_ssa"), ("src", "expr")], + LowLevelILOperation.LLIL_FLAG_SSA: [("src", "flag_ssa")], + LowLevelILOperation.LLIL_FLAG_BIT_SSA: [("src", "flag_ssa"), ("bit", "int")], + LowLevelILOperation.LLIL_CALL_SSA: [("output", "expr"), ("dest", "expr"), ("stack", "expr"), ("param", "expr")], + LowLevelILOperation.LLIL_SYSCALL_SSA: [("output", "expr"), ("stack", "expr"), ("param", "expr")], + LowLevelILOperation.LLIL_TAILCALL_SSA: [("output", "expr"), ("dest", "expr"), ("stack", "expr"), ("param", "expr")], + LowLevelILOperation.LLIL_CALL_OUTPUT_SSA: [("dest_memory", "int"), ("dest", "reg_ssa_list")], + LowLevelILOperation.LLIL_CALL_STACK_SSA: [("src", "reg_ssa"), ("src_memory", "int")], + LowLevelILOperation.LLIL_CALL_PARAM: [("src", "expr_list")], + LowLevelILOperation.LLIL_LOAD_SSA: [("src", "expr"), ("src_memory", "int")], + LowLevelILOperation.LLIL_STORE_SSA: [("dest", "expr"), ("dest_memory", "int"), ("src_memory", "int"), ("src", "expr")], + LowLevelILOperation.LLIL_REG_PHI: [("dest", "reg_ssa"), ("src", "reg_ssa_list")], + LowLevelILOperation.LLIL_REG_STACK_PHI: [("dest", "reg_stack_ssa"), ("src", "reg_stack_ssa_list")], + LowLevelILOperation.LLIL_FLAG_PHI: [("dest", "flag_ssa"), ("src", "flag_ssa_list")], + LowLevelILOperation.LLIL_MEM_PHI: [("dest_memory", "int"), ("src_memory", "int_list")] + } + +
[docs] def __init__(self, func, expr_index, instr_index=None): + instr = core.BNGetLowLevelILByIndex(func.handle, expr_index) + self.function = func + self.expr_index = expr_index + self.instr_index = instr_index + self.operation = LowLevelILOperation(instr.operation) + self.size = instr.size + self.address = instr.address + self.source_operand = instr.sourceOperand + if instr.flags == 0: + self.flags = None + else: + self.flags = func.arch.get_flag_write_type_name(instr.flags) + if self.source_operand == 0xffffffff: + self.source_operand = None + operands = LowLevelILInstruction.ILOperations[instr.operation] + self.operands = [] + i = 0 + for operand in operands: + name, operand_type = operand + if operand_type == "int": + value = instr.operands[i] + value = (value & ((1 << 63) - 1)) - (value & (1 << 63)) + elif operand_type == "float": + if instr.size == 4: + value = struct.unpack("f", struct.pack("I", instr.operands[i] & 0xffffffff))[0] + elif instr.size == 8: + value = struct.unpack("d", struct.pack("Q", instr.operands[i]))[0] + else: + value = instr.operands[i] + elif operand_type == "expr": + value = LowLevelILInstruction(func, instr.operands[i]) + elif operand_type == "reg": + value = ILRegister(func.arch, instr.operands[i]) + elif operand_type == "reg_stack": + value = ILRegisterStack(func.arch, instr.operands[i]) + elif operand_type == "intrinsic": + value = ILIntrinsic(func.arch, instr.operands[i]) + elif operand_type == "reg_ssa": + reg = ILRegister(func.arch, instr.operands[i]) + i += 1 + value = SSARegister(reg, instr.operands[i]) + elif operand_type == "reg_stack_ssa": + reg_stack = ILRegisterStack(func.arch, instr.operands[i]) + i += 1 + value = SSARegisterStack(reg_stack, instr.operands[i]) + elif operand_type == "reg_stack_ssa_dest_and_src": + reg_stack = ILRegisterStack(func.arch, instr.operands[i]) + i += 1 + value = SSARegisterStack(reg_stack, instr.operands[i]) + i += 1 + self.operands.append(value) + self.dest = value + value = SSARegisterStack(reg_stack, instr.operands[i]) + elif operand_type == "flag": + value = ILFlag(func.arch, instr.operands[i]) + elif operand_type == "flag_ssa": + flag = ILFlag(func.arch, instr.operands[i]) + i += 1 + value = SSAFlag(flag, instr.operands[i]) + elif operand_type == "sem_class": + if instr.operands[i] == 0: + value = None + else: + value = ILSemanticFlagClass(func.arch, instr.operands[i]) + elif operand_type == "sem_group": + value = ILSemanticFlagGroup(func.arch, instr.operands[i]) + elif operand_type == "cond": + value = LowLevelILFlagCondition(instr.operands[i]) + elif operand_type == "int_list": + count = ctypes.c_ulonglong() + operand_list = core.BNLowLevelILGetOperandList(func.handle, self.expr_index, i, count) + i += 1 + value = [] + for j in range(count.value): + value.append(operand_list[j]) + core.BNLowLevelILFreeOperandList(operand_list) + elif operand_type == "expr_list": + count = ctypes.c_ulonglong() + operand_list = core.BNLowLevelILGetOperandList(func.handle, self.expr_index, i, count) + i += 1 + value = [] + for j in range(count.value): + value.append(LowLevelILInstruction(func, operand_list[j])) + core.BNLowLevelILFreeOperandList(operand_list) + elif operand_type == "reg_or_flag_list": + count = ctypes.c_ulonglong() + operand_list = core.BNLowLevelILGetOperandList(func.handle, self.expr_index, i, count) + i += 1 + value = [] + for j in range(count.value): + if (operand_list[j] & (1 << 32)) != 0: + value.append(ILFlag(func.arch, operand_list[j] & 0xffffffff)) + else: + value.append(ILRegister(func.arch, operand_list[j] & 0xffffffff)) + core.BNLowLevelILFreeOperandList(operand_list) + elif operand_type == "reg_ssa_list": + count = ctypes.c_ulonglong() + operand_list = core.BNLowLevelILGetOperandList(func.handle, self.expr_index, i, count) + i += 1 + value = [] + for j in range(count.value // 2): + reg = operand_list[j * 2] + reg_version = operand_list[(j * 2) + 1] + value.append(SSARegister(ILRegister(func.arch, reg), reg_version)) + core.BNLowLevelILFreeOperandList(operand_list) + elif operand_type == "reg_stack_ssa_list": + count = ctypes.c_ulonglong() + operand_list = core.BNLowLevelILGetOperandList(func.handle, self.expr_index, i, count) + i += 1 + value = [] + for j in range(count.value // 2): + reg_stack = operand_list[j * 2] + reg_version = operand_list[(j * 2) + 1] + value.append(SSARegisterStack(ILRegisterStack(func.arch, reg_stack), reg_version)) + core.BNLowLevelILFreeOperandList(operand_list) + elif operand_type == "flag_ssa_list": + count = ctypes.c_ulonglong() + operand_list = core.BNLowLevelILGetOperandList(func.handle, self.expr_index, i, count) + i += 1 + value = [] + for j in range(count.value // 2): + flag = operand_list[j * 2] + flag_version = operand_list[(j * 2) + 1] + value.append(SSAFlag(ILFlag(func.arch, flag), flag_version)) + core.BNLowLevelILFreeOperandList(operand_list) + elif operand_type == "reg_or_flag_ssa_list": + count = ctypes.c_ulonglong() + operand_list = core.BNLowLevelILGetOperandList(func.handle, self.expr_index, i, count) + i += 1 + value = [] + for j in range(count.value // 2): + if (operand_list[j * 2] & (1 << 32)) != 0: + reg_or_flag = ILFlag(func.arch, operand_list[j * 2] & 0xffffffff) + else: + reg_or_flag = ILRegister(func.arch, operand_list[j * 2] & 0xffffffff) + reg_version = operand_list[(j * 2) + 1] + value.append(SSARegisterOrFlag(reg_or_flag, reg_version)) + core.BNLowLevelILFreeOperandList(operand_list) + elif operand_type == "reg_stack_adjust": + count = ctypes.c_ulonglong() + operand_list = core.BNLowLevelILGetOperandList(func.handle, self.expr_index, i, count) + i += 1 + value = {} + for j in range(count.value // 2): + reg_stack = operand_list[j * 2] + adjust = operand_list[(j * 2) + 1] + if adjust & 0x80000000: + adjust |= ~0x80000000 + value[func.arch.get_reg_stack_name(reg_stack)] = adjust + core.BNLowLevelILFreeOperandList(operand_list) + self.operands.append(value) + self.__dict__[name] = value + i += 1
+ + def __str__(self): + tokens = self.tokens + if tokens is None: + return "invalid" + result = "" + for token in tokens: + result += token.text + return result + + def __repr__(self): + return "<il: %s>" % str(self) + + @property + def tokens(self): + """LLIL tokens (read-only)""" + count = ctypes.c_ulonglong() + tokens = ctypes.POINTER(core.BNInstructionTextToken)() + if (self.instr_index is not None) and (self.function.source_function is not None): + if not core.BNGetLowLevelILInstructionText(self.function.handle, self.function.source_function.handle, + self.function.arch.handle, self.instr_index, tokens, count): + return None + else: + if not core.BNGetLowLevelILExprText(self.function.handle, self.function.arch.handle, + self.expr_index, tokens, count): + return None + result = binaryninja.function.InstructionTextToken.get_instruction_lines(tokens, count.value) + core.BNFreeInstructionText(tokens, count.value) + return result + + @property + def il_basic_block(self): + """IL basic block object containing this expression (read-only) (only available on finalized functions)""" + view = None + if self.function.source_function is not None: + view = self.function.source_function.view + return LowLevelILBasicBlock(view, core.BNGetLowLevelILBasicBlockForInstruction(self.function.handle, self.instr_index), self.function) + + @property + def ssa_form(self): + """SSA form of expression (read-only)""" + return LowLevelILInstruction(self.function.ssa_form, + core.BNGetLowLevelILSSAExprIndex(self.function.handle, self.expr_index)) + + @property + def non_ssa_form(self): + """Non-SSA form of expression (read-only)""" + return LowLevelILInstruction(self.function.non_ssa_form, + core.BNGetLowLevelILNonSSAExprIndex(self.function.handle, self.expr_index)) + + @property + def medium_level_il(self): + """Gets the medium level IL expression corresponding to this expression (may be None for eliminated instructions)""" + expr = self.function.get_medium_level_il_expr_index(self.expr_index) + if expr is None: + return None + return binaryninja.mediumlevelil.MediumLevelILInstruction(self.function.medium_level_il, expr) + + @property + def mlil(self): + return self.medium_level_il + + @property + def mapped_medium_level_il(self): + """Gets the mapped medium level IL expression corresponding to this expression""" + expr = self.function.get_mapped_medium_level_il_expr_index(self.expr_index) + if expr is None: + return None + return binaryninja.mediumlevelil.MediumLevelILInstruction(self.function.mapped_medium_level_il, expr) + + @property + def mmlil(self): + return self.mapped_medium_level_il + + @property + def value(self): + """Value of expression if constant or a known value (read-only)""" + value = core.BNGetLowLevelILExprValue(self.function.handle, self.expr_index) + result = binaryninja.function.RegisterValue(self.function.arch, value) + return result + + @property + def possible_values(self): + """Possible values of expression using path-sensitive static data flow analysis (read-only)""" + value = core.BNGetLowLevelILPossibleExprValues(self.function.handle, self.expr_index) + result = binaryninja.function.PossibleValueSet(self.function.arch, value) + core.BNFreePossibleValueSet(value) + return result + + @property + def prefix_operands(self): + """All operands in the expression tree in prefix order""" + result = [LowLevelILOperationAndSize(self.operation, self.size)] + for operand in self.operands: + if isinstance(operand, LowLevelILInstruction): + result += operand.prefix_operands + else: + result.append(operand) + return result + + @property + def postfix_operands(self): + """All operands in the expression tree in postfix order""" + result = [] + for operand in self.operands: + if isinstance(operand, LowLevelILInstruction): + result += operand.postfix_operands + else: + result.append(operand) + result.append(LowLevelILOperationAndSize(self.operation, self.size)) + return result + +
[docs] def get_reg_value(self, reg): + reg = self.function.arch.get_reg_index(reg) + value = core.BNGetLowLevelILRegisterValueAtInstruction(self.function.handle, reg, self.instr_index) + result = binaryninja.function.RegisterValue(self.function.arch, value) + return result
+ +
[docs] def get_reg_value_after(self, reg): + reg = self.function.arch.get_reg_index(reg) + value = core.BNGetLowLevelILRegisterValueAfterInstruction(self.function.handle, reg, self.instr_index) + result = binaryninja.function.RegisterValue(self.function.arch, value) + return result
+ +
[docs] def get_possible_reg_values(self, reg): + reg = self.function.arch.get_reg_index(reg) + value = core.BNGetLowLevelILPossibleRegisterValuesAtInstruction(self.function.handle, reg, self.instr_index) + result = binaryninja.function.PossibleValueSet(self.function.arch, value) + core.BNFreePossibleValueSet(value) + return result
+ +
[docs] def get_possible_reg_values_after(self, reg): + reg = self.function.arch.get_reg_index(reg) + value = core.BNGetLowLevelILPossibleRegisterValuesAfterInstruction(self.function.handle, reg, self.instr_index) + result = binaryninja.function.PossibleValueSet(self.function.arch, value) + core.BNFreePossibleValueSet(value) + return result
+ +
[docs] def get_flag_value(self, flag): + flag = self.function.arch.get_flag_index(flag) + value = core.BNGetLowLevelILFlagValueAtInstruction(self.function.handle, flag, self.instr_index) + result = binaryninja.function.RegisterValue(self.function.arch, value) + return result
+ +
[docs] def get_flag_value_after(self, flag): + flag = self.function.arch.get_flag_index(flag) + value = core.BNGetLowLevelILFlagValueAfterInstruction(self.function.handle, flag, self.instr_index) + result = binaryninja.function.RegisterValue(self.function.arch, value) + return result
+ +
[docs] def get_possible_flag_values(self, flag): + flag = self.function.arch.get_flag_index(flag) + value = core.BNGetLowLevelILPossibleFlagValuesAtInstruction(self.function.handle, flag, self.instr_index) + result = binaryninja.function.PossibleValueSet(self.function.arch, value) + core.BNFreePossibleValueSet(value) + return result
+ +
[docs] def get_possible_flag_values_after(self, flag): + flag = self.function.arch.get_flag_index(flag) + value = core.BNGetLowLevelILPossibleFlagValuesAfterInstruction(self.function.handle, flag, self.instr_index) + result = binaryninja.function.PossibleValueSet(self.function.arch, value) + core.BNFreePossibleValueSet(value) + return result
+ +
[docs] def get_stack_contents(self, offset, size): + value = core.BNGetLowLevelILStackContentsAtInstruction(self.function.handle, offset, size, self.instr_index) + result = binaryninja.function.RegisterValue(self.function.arch, value) + return result
+ +
[docs] def get_stack_contents_after(self, offset, size): + value = core.BNGetLowLevelILStackContentsAfterInstruction(self.function.handle, offset, size, self.instr_index) + result = binaryninja.function.RegisterValue(self.function.arch, value) + return result
+ +
[docs] def get_possible_stack_contents(self, offset, size): + value = core.BNGetLowLevelILPossibleStackContentsAtInstruction(self.function.handle, offset, size, self.instr_index) + result = binaryninja.function.PossibleValueSet(self.function.arch, value) + core.BNFreePossibleValueSet(value) + return result
+ +
[docs] def get_possible_stack_contents_after(self, offset, size): + value = core.BNGetLowLevelILPossibleStackContentsAfterInstruction(self.function.handle, offset, size, self.instr_index) + result = binaryninja.function.PossibleValueSet(self.function.arch, value) + core.BNFreePossibleValueSet(value) + return result
+ + def __setattr__(self, name, value): + try: + object.__setattr__(self, name, value) + except AttributeError: + raise AttributeError("attribute '%s' is read only" % name)
+ + +
[docs]class LowLevelILExpr(object): + """ + ``class LowLevelILExpr`` hold the index of IL Expressions. + + .. note:: This class shouldn't be instantiated directly. Rather the helper members of LowLevelILFunction should be \ + used instead. + """ +
[docs] def __init__(self, index): + self.index = index
+ + +
[docs]class LowLevelILFunction(object): + """ + ``class LowLevelILFunction`` contains the list of LowLevelILExpr objects that make up a binaryninja.function. LowLevelILExpr + objects can be added to the LowLevelILFunction by calling ``append`` and passing the result of the various class + methods which return LowLevelILExpr objects. + + + LowLevelILFlagCondition values used as parameters in the ``flag_condition`` method. + + ======================= ========== =============================== + LowLevelILFlagCondition Operator Description + ======================= ========== =============================== + LLFC_E == Equal + LLFC_NE != Not equal + LLFC_SLT s< Signed less than + LLFC_ULT u< Unsigned less than + LLFC_SLE s<= Signed less than or equal + LLFC_ULE u<= Unsigned less than or equal + LLFC_SGE s>= Signed greater than or equal + LLFC_UGE u>= Unsigned greater than or equal + LLFC_SGT s> Signed greater than + LLFC_UGT u> Unsigned greater than + LLFC_NEG - Negative + LLFC_POS + Positive + LLFC_O overflow Overflow + LLFC_NO !overflow No overflow + ======================= ========== =============================== + """ +
[docs] def __init__(self, arch = None, handle = None, source_func = None): + self.arch = arch + self.source_function = source_func + if handle is not None: + self.handle = core.handle_of_type(handle, core.BNLowLevelILFunction) + if self.source_function is None: + source_handle = core.BNGetLowLevelILOwnerFunction(self.handle) + if source_handle: + self.source_function = binaryninja.function.Function(handle = source_handle) + else: + self.source_function = None + if self.arch is None: + self.arch = self.source_function.arch + else: + if self.arch is None: + self.arch = self.source_function.arch + if self.source_function is None: + func_handle = None + else: + func_handle = self.source_function.handle + self.handle = core.BNCreateLowLevelILFunction(arch.handle, func_handle)
+ + def __del__(self): + if self.handle is not None: + core.BNFreeLowLevelILFunction(self.handle) + + def __eq__(self, value): + if not isinstance(value, LowLevelILFunction): + return False + return ctypes.addressof(self.handle.contents) == ctypes.addressof(value.handle.contents) + + def __ne__(self, value): + if not isinstance(value, LowLevelILFunction): + return True + return ctypes.addressof(self.handle.contents) != ctypes.addressof(value.handle.contents) + + @property + def current_address(self): + """Current IL Address (read/write)""" + return core.BNLowLevelILGetCurrentAddress(self.handle) + + @current_address.setter + def current_address(self, value): + core.BNLowLevelILSetCurrentAddress(self.handle, self.arch.handle, value) + +
[docs] def set_current_address(self, value, arch = None): + if arch is None: + arch = self.arch + core.BNLowLevelILSetCurrentAddress(self.handle, arch.handle, value)
+ +
[docs] def set_current_source_block(self, block): + core.BNLowLevelILSetCurrentSourceBlock(self.handle, block.handle)
+ + @property + def temp_reg_count(self): + """Number of temporary registers (read-only)""" + return core.BNGetLowLevelILTemporaryRegisterCount(self.handle) + + @property + def temp_flag_count(self): + """Number of temporary flags (read-only)""" + return core.BNGetLowLevelILTemporaryFlagCount(self.handle) + + @property + def basic_blocks(self): + """list of LowLevelILBasicBlock objects (read-only)""" + count = ctypes.c_ulonglong() + blocks = core.BNGetLowLevelILBasicBlockList(self.handle, count) + result = [] + view = None + if self.source_function is not None: + view = self.source_function.view + for i in range(0, count.value): + result.append(LowLevelILBasicBlock(view, core.BNNewBasicBlockReference(blocks[i]), self)) + core.BNFreeBasicBlockList(blocks, count.value) + return result + + @property + def instructions(self): + """A generator of llil instructions of the current llil function""" + for block in self.basic_blocks: + for i in block: + yield i + + @property + def ssa_form(self): + """Low level IL in SSA form (read-only)""" + result = core.BNGetLowLevelILSSAForm(self.handle) + if not result: + return None + return LowLevelILFunction(self.arch, result, self.source_function) + + @property + def non_ssa_form(self): + """Low level IL in non-SSA (default) form (read-only)""" + result = core.BNGetLowLevelILNonSSAForm(self.handle) + if not result: + return None + return LowLevelILFunction(self.arch, result, self.source_function) + + @property + def medium_level_il(self): + """Medium level IL for this low level IL.""" + result = core.BNGetMediumLevelILForLowLevelIL(self.handle) + if not result: + return None + return binaryninja.mediumlevelil.MediumLevelILFunction(self.arch, result, self.source_function) + + @property + def mlil(self): + return self.medium_level_il + + @property + def mapped_medium_level_il(self): + """Medium level IL with mappings between low level IL and medium level IL. Unused stores are not removed. + Typically, this should only be used to answer queries on assembly or low level IL where the query is + easier to perform on medium level IL.""" + result = core.BNGetMappedMediumLevelIL(self.handle) + if not result: + return None + return binaryninja.mediumlevelil.MediumLevelILFunction(self.arch, result, self.source_function) + + @property + def mmlil(self): + return self.mapped_medium_level_il + + def __setattr__(self, name, value): + try: + object.__setattr__(self, name, value) + except AttributeError: + raise AttributeError("attribute '%s' is read only" % name) + + def __len__(self): + return int(core.BNGetLowLevelILInstructionCount(self.handle)) + + def __getitem__(self, i): + if isinstance(i, slice) or isinstance(i, tuple): + raise IndexError("expected integer instruction index") + if isinstance(i, LowLevelILExpr): + return LowLevelILInstruction(self, i.index) + if (i < 0) or (i >= len(self)): + raise IndexError("index out of range") + return LowLevelILInstruction(self, core.BNGetLowLevelILIndexForInstruction(self.handle, i), i) + + def __setitem__(self, i, j): + raise IndexError("instruction modification not implemented") + + def __iter__(self): + count = ctypes.c_ulonglong() + blocks = core.BNGetLowLevelILBasicBlockList(self.handle, count) + view = None + if self.source_function is not None: + view = self.source_function.view + try: + for i in range(0, count.value): + yield LowLevelILBasicBlock(view, core.BNNewBasicBlockReference(blocks[i]), self) + finally: + core.BNFreeBasicBlockList(blocks, count.value) + +
[docs] def get_instruction_start(self, addr, arch = None): + if arch is None: + arch = self.arch + result = core.BNLowLevelILGetInstructionStart(self.handle, arch.handle, addr) + if result >= core.BNGetLowLevelILInstructionCount(self.handle): + return None + return result
+ +
[docs] def clear_indirect_branches(self): + core.BNLowLevelILClearIndirectBranches(self.handle)
+ +
[docs] def set_indirect_branches(self, branches): + branch_list = (core.BNArchitectureAndAddress * len(branches))() + for i in range(len(branches)): + branch_list[i].arch = branches[i][0].handle + branch_list[i].address = branches[i][1] + core.BNLowLevelILSetIndirectBranches(self.handle, branch_list, len(branches))
+ +
[docs] def expr(self, operation, a = 0, b = 0, c = 0, d = 0, size = 0, flags = None): + if isinstance(operation, str): + operation = LowLevelILOperation[operation] + elif isinstance(operation, LowLevelILOperation): + operation = operation.value + if isinstance(flags, str): + flags = self.arch.get_flag_write_type_by_name(flags) + elif flags is None: + flags = 0 + return LowLevelILExpr(core.BNLowLevelILAddExpr(self.handle, operation, size, flags, a, b, c, d))
+ +
[docs] def append(self, expr): + """ + ``append`` adds the LowLevelILExpr ``expr`` to the current LowLevelILFunction. + + :param LowLevelILExpr expr: the LowLevelILExpr to add to the current LowLevelILFunction + :return: number of LowLevelILExpr in the current function + :rtype: int + """ + return core.BNLowLevelILAddInstruction(self.handle, expr.index)
+ +
[docs] def nop(self): + """ + ``nop`` no operation, this instruction does nothing + + :return: The no operation expression + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_NOP)
+ +
[docs] def set_reg(self, size, reg, value, flags = 0): + """ + ``set_reg`` sets the register ``reg`` of size ``size`` to the expression ``value`` + + :param int size: size of the register parameter in bytes + :param str reg: the register name + :param LowLevelILExpr value: an expression to set the register to + :param str flags: which flags are set by this operation + :return: The expression ``reg = value`` + :rtype: LowLevelILExpr + """ + reg = self.arch.get_reg_index(reg) + return self.expr(LowLevelILOperation.LLIL_SET_REG, reg, value.index, size = size, flags = flags)
+ +
[docs] def set_reg_split(self, size, hi, lo, value, flags = 0): + """ + ``set_reg_split`` uses ``hi`` and ``lo`` as a single extended register setting ``hi:lo`` to the expression + ``value``. + + :param int size: size of the register parameter in bytes + :param str hi: the high register name + :param str lo: the low register name + :param LowLevelILExpr value: an expression to set the split registers to + :param str flags: which flags are set by this operation + :return: The expression ``hi:lo = value`` + :rtype: LowLevelILExpr + """ + hi = self.arch.get_reg_index(hi) + lo = self.arch.get_reg_index(lo) + return self.expr(LowLevelILOperation.LLIL_SET_REG_SPLIT, hi, lo, value.index, size = size, flags = flags)
+ +
[docs] def set_reg_stack_top_relative(self, size, reg_stack, entry, value, flags = 0): + """ + ``set_reg_stack_top_relative`` sets the top-relative entry ``entry`` of size ``size`` in register + stack ``reg_stack`` to the expression ``value`` + + :param int size: size of the register parameter in bytes + :param str reg_stack: the register stack name + :param LowLevelILExpr entry: an expression for which stack entry to set + :param LowLevelILExpr value: an expression to set the entry to + :param str flags: which flags are set by this operation + :return: The expression ``reg_stack[entry] = value`` + :rtype: LowLevelILExpr + """ + reg_stack = self.arch.get_reg_stack_index(reg_stack) + return self.expr(LowLevelILOperation.LLIL_SET_REG_STACK_REL, reg_stack, entry.index, value.index, + size = size, flags = flags)
+ +
[docs] def reg_stack_push(self, size, reg_stack, value, flags = 0): + """ + ``reg_stack_push`` pushes the expression ``value`` of size ``size`` onto the top of the register + stack ``reg_stack`` + + :param int size: size of the register parameter in bytes + :param str reg_stack: the register stack name + :param LowLevelILExpr value: an expression to push + :param str flags: which flags are set by this operation + :return: The expression ``reg_stack.push(value)`` + :rtype: LowLevelILExpr + """ + reg_stack = self.arch.get_reg_stack_index(reg_stack) + return self.expr(LowLevelILOperation.LLIL_REG_STACK_PUSH, reg_stack, value.index, size = size, flags = flags)
+ +
[docs] def set_flag(self, flag, value): + """ + ``set_flag`` sets the flag ``flag`` to the LowLevelILExpr ``value`` + + :param str flag: the low register name + :param LowLevelILExpr value: an expression to set the flag to + :return: The expression FLAG.flag = value + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_SET_FLAG, self.arch.get_flag_by_name(flag), value.index)
+ +
[docs] def load(self, size, addr): + """ + ``load`` Reads ``size`` bytes from the expression ``addr`` + + :param int size: number of bytes to read + :param LowLevelILExpr addr: the expression to read memory from + :return: The expression ``[addr].size`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_LOAD, addr.index, size=size)
+ +
[docs] def store(self, size, addr, value, flags=None): + """ + ``store`` Writes ``size`` bytes to expression ``addr`` read from expression ``value`` + + :param int size: number of bytes to write + :param LowLevelILExpr addr: the expression to write to + :param LowLevelILExpr value: the expression to be written + :param str flags: which flags are set by this operation + :return: The expression ``[addr].size = value`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_STORE, addr.index, value.index, size=size, flags=flags)
+ +
[docs] def push(self, size, value): + """ + ``push`` writes ``size`` bytes from expression ``value`` to the stack, adjusting the stack by ``size``. + + :param int size: number of bytes to write and adjust the stack by + :param LowLevelILExpr value: the expression to write + :return: The expression push(value) + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_PUSH, value.index, size=size)
+ +
[docs] def pop(self, size): + """ + ``pop`` reads ``size`` bytes from the stack, adjusting the stack by ``size``. + + :param int size: number of bytes to read from the stack + :return: The expression ``pop`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_POP, size=size)
+ +
[docs] def reg(self, size, reg): + """ + ``reg`` returns a register of size ``size`` with name ``reg`` + + :param int size: the size of the register in bytes + :param str reg: the name of the register + :return: A register expression for the given string + :rtype: LowLevelILExpr + """ + reg = self.arch.get_reg_index(reg) + return self.expr(LowLevelILOperation.LLIL_REG, reg, size=size)
+ +
[docs] def reg_split(self, size, hi, lo): + """ + ``reg_split`` combines registers of size ``size`` with names ``hi`` and ``lo`` + + :param int size: the size of the register in bytes + :param str hi: register holding high part of value + :param str lo: register holding low part of value + :return: The expression ``hi:lo`` + :rtype: LowLevelILExpr + """ + hi = self.arch.get_reg_index(hi) + lo = self.arch.get_reg_index(lo) + return self.expr(LowLevelILOperation.LLIL_REG_SPLIT, hi, lo, size=size)
+ +
[docs] def reg_stack_top_relative(self, size, reg_stack, entry): + """ + ``reg_stack_top_relative`` returns a register stack entry of size ``size`` at top-relative + location ``entry`` in register stack with name ``reg_stack`` + + :param int size: the size of the register in bytes + :param str reg_stack: the name of the register stack + :param LowLevelILExpr entry: an expression for which stack entry to fetch + :return: The expression ``reg_stack[entry]`` + :rtype: LowLevelILExpr + """ + reg_stack = self.arch.get_reg_stack_index(reg_stack) + return self.expr(LowLevelILOperation.LLIL_REG_STACK_REL, reg_stack, entry.index, size=size)
+ +
[docs] def reg_stack_pop(self, size, reg_stack): + """ + ``reg_stack_pop`` returns the top entry of size ``size`` in register stack with name ``reg_stack``, and + removes the entry from the stack + + :param int size: the size of the register in bytes + :param str reg_stack: the name of the register stack + :return: The expression ``reg_stack.pop`` + :rtype: LowLevelILExpr + """ + reg_stack = self.arch.get_reg_stack_index(reg_stack) + return self.expr(LowLevelILOperation.LLIL_REG_STACK_POP, reg_stack, size=size)
+ +
[docs] def const(self, size, value): + """ + ``const`` returns an expression for the constant integer ``value`` with size ``size`` + + :param int size: the size of the constant in bytes + :param int value: integer value of the constant + :return: A constant expression of given value and size + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_CONST, value, size=size)
+ +
[docs] def const_pointer(self, size, value): + """ + ``const_pointer`` returns an expression for the constant pointer ``value`` with size ``size`` + + :param int size: the size of the pointer in bytes + :param int value: address referenced by pointer + :return: A constant expression of given value and size + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_CONST_PTR, value, size=size)
+ +
[docs] def reloc_pointer(self, size, value): + """ + ``reloc_pointer`` returns an expression for the constant relocated pointer ``value`` with size ``size`` + + :param int size: the size of the pointer in bytes + :param int value: address referenced by pointer + :return: A constant expression of given value and size + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_EXTERN_PTR, value, size=size)
+ +
[docs] def float_const_raw(self, size, value): + """ + ``float_const_raw`` returns an expression for the constant raw binary floating point + value ``value`` with size ``size`` + + :param int size: the size of the constant in bytes + :param int value: integer value for the raw binary representation of the constant + :return: A constant expression of given value and size + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FLOAT_CONST, value, size=size)
+ +
[docs] def float_const_single(self, value): + """ + ``float_const_single`` returns an expression for the single precision floating point value ``value`` + + :param float value: float value for the constant + :return: A constant expression of given value and size + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FLOAT_CONST, struct.unpack("I", struct.pack("f", value))[0], size=4)
+ +
[docs] def float_const_double(self, value): + """ + ``float_const_double`` returns an expression for the double precision floating point value ``value`` + + :param float value: float value for the constant + :return: A constant expression of given value and size + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FLOAT_CONST, struct.unpack("Q", struct.pack("d", value))[0], size=8)
+ +
[docs] def flag(self, reg): + """ + ``flag`` returns a flag expression for the given flag name. + + :param str reg: name of the flag expression to retrieve + :return: A flag expression of given flag name + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FLAG, self.arch.get_flag_by_name(reg))
+ +
[docs] def flag_bit(self, size, reg, bit): + """ + ``flag_bit`` sets the flag named ``reg`` and size ``size`` to the constant integer value ``bit`` + + :param int size: the size of the flag + :param str reg: flag value + :param int bit: integer value to set the bit to + :return: A constant expression of given value and size ``FLAG.reg = bit`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FLAG_BIT, self.arch.get_flag_by_name(reg), bit, size=size)
+ +
[docs] def add(self, size, a, b, flags=None): + """ + ``add`` adds expression ``a`` to expression ``b`` potentially setting flags ``flags`` and returning + an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: flags to set + :return: The expression ``add.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_ADD, a.index, b.index, size=size, flags=flags)
+ +
[docs] def add_carry(self, size, a, b, carry, flags=None): + """ + ``add_carry`` adds with carry expression ``a`` to expression ``b`` potentially setting flags ``flags`` and + returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param LowLevelILExpr carry: Carry flag expression + :param str flags: flags to set + :return: The expression ``adc.<size>{<flags>}(a, b, carry)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_ADC, a.index, b.index, carry.index, size=size, flags=flags)
+ +
[docs] def sub(self, size, a, b, flags=None): + """ + ``sub`` subtracts expression ``b`` from expression ``a`` potentially setting flags ``flags`` and returning + an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: flags to set + :return: The expression ``sub.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_SUB, a.index, b.index, size=size, flags=flags)
+ +
[docs] def sub_borrow(self, size, a, b, carry, flags=None): + """ + ``sub_borrow`` subtracts with borrow expression ``b`` from expression ``a`` potentially setting flags ``flags`` + and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param LowLevelILExpr carry: Carry flag expression + :param str flags: flags to set + :return: The expression ``sbb.<size>{<flags>}(a, b, carry)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_SBB, a.index, b.index, carry.index, size=size, flags=flags)
+ +
[docs] def and_expr(self, size, a, b, flags=None): + """ + ``and_expr`` bitwise and's expression ``a`` and expression ``b`` potentially setting flags ``flags`` + and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: optional, flags to set + :return: The expression ``and.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_AND, a.index, b.index, size=size, flags=flags)
+ +
[docs] def or_expr(self, size, a, b, flags=None): + """ + ``or_expr`` bitwise or's expression ``a`` and expression ``b`` potentially setting flags ``flags`` + and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: optional, flags to set + :return: The expression ``or.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_OR, a.index, b.index, size=size, flags=flags)
+ +
[docs] def xor_expr(self, size, a, b, flags=None): + """ + ``xor_expr`` xor's expression ``a`` with expression ``b`` potentially setting flags ``flags`` + and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: optional, flags to set + :return: The expression ``xor.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_XOR, a.index, b.index, size=size, flags=flags)
+ +
[docs] def shift_left(self, size, a, b, flags=None): + """ + ``shift_left`` subtracts with borrow expression ``b`` from expression ``a`` potentially setting flags ``flags`` + and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: optional, flags to set + :return: The expression ``lsl.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_LSL, a.index, b.index, size=size, flags=flags)
+ +
[docs] def logical_shift_right(self, size, a, b, flags=None): + """ + ``logical_shift_right`` shifts logically right expression ``a`` by expression ``b`` potentially setting flags + ``flags``and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: optional, flags to set + :return: The expression ``lsr.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_LSR, a.index, b.index, size=size, flags=flags)
+ +
[docs] def arith_shift_right(self, size, a, b, flags=None): + """ + ``arith_shift_right`` shifts arithmatic right expression ``a`` by expression ``b`` potentially setting flags + ``flags`` and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: optional, flags to set + :return: The expression ``asr.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_ASR, a.index, b.index, size=size, flags=flags)
+ +
[docs] def rotate_left(self, size, a, b, flags=None): + """ + ``rotate_left`` bitwise rotates left expression ``a`` by expression ``b`` potentially setting flags ``flags`` + and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: optional, flags to set + :return: The expression ``rol.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_ROL, a.index, b.index, size=size, flags=flags)
+ +
[docs] def rotate_left_carry(self, size, a, b, carry, flags=None): + """ + ``rotate_left_carry`` bitwise rotates left with carry expression ``a`` by expression ``b`` potentially setting + flags ``flags`` and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param LowLevelILExpr carry: Carry flag expression + :param str flags: optional, flags to set + :return: The expression ``rlc.<size>{<flags>}(a, b, carry)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_RLC, a.index, b.index, carry.index, size=size, flags=flags)
+ +
[docs] def rotate_right(self, size, a, b, flags=None): + """ + ``rotate_right`` bitwise rotates right expression ``a`` by expression ``b`` potentially setting flags ``flags`` + and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: optional, flags to set + :return: The expression ``ror.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_ROR, a.index, b.index, size=size, flags=flags)
+ +
[docs] def rotate_right_carry(self, size, a, b, carry, flags=None): + """ + ``rotate_right_carry`` bitwise rotates right with carry expression ``a`` by expression ``b`` potentially setting + flags ``flags`` and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param LowLevelILExpr carry: Carry flag expression + :param str flags: optional, flags to set + :return: The expression ``rrc.<size>{<flags>}(a, b, carry)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_RRC, a.index, b.index, carry.index, size=size, flags=flags)
+ +
[docs] def mult(self, size, a, b, flags=None): + """ + ``mult`` multiplies expression ``a`` by expression ``b`` potentially setting flags ``flags`` and returning an + expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: optional, flags to set + :return: The expression ``sbc.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_MUL, a.index, b.index, size=size, flags=flags)
+ +
[docs] def mult_double_prec_signed(self, size, a, b, flags=None): + """ + ``mult_double_prec_signed`` multiplies signed with double precision expression ``a`` by expression ``b`` + potentially setting flags ``flags`` and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: optional, flags to set + :return: The expression ``muls.dp.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_MULS_DP, a.index, b.index, size=size, flags=flags)
+ +
[docs] def mult_double_prec_unsigned(self, size, a, b, flags=None): + """ + ``mult_double_prec_unsigned`` multiplies unsigned with double precision expression ``a`` by expression ``b`` + potentially setting flags ``flags`` and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: optional, flags to set + :return: The expression ``mulu.dp.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_MULU_DP, a.index, b.index, size=size, flags=flags)
+ +
[docs] def div_signed(self, size, a, b, flags=None): + """ + ``div_signed`` signed divide expression ``a`` by expression ``b`` potentially setting flags ``flags`` + and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: optional, flags to set + :return: The expression ``divs.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_DIVS, a.index, b.index, size=size, flags=flags)
+ +
[docs] def div_double_prec_signed(self, size, a, b, flags=None): + """ + ``div_double_prec_signed`` signed double precision divide using expression ``a`` as a + single double precision register by expression ``b`` potentially setting flags ``flags`` and returning an + expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: optional, flags to set + :return: The expression ``divs.dp.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_DIVS_DP, a.index, b.index, size=size, flags=flags)
+ +
[docs] def div_unsigned(self, size, a, b, flags=None): + """ + ``div_unsigned`` unsigned divide expression ``a`` by expression ``b`` potentially setting flags ``flags`` + and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: optional, flags to set + :return: The expression ``divu.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_DIVU, a.index, b.index, size=size, flags=flags)
+ +
[docs] def div_double_prec_unsigned(self, size, a, b, flags=None): + """ + ``div_double_prec_unsigned`` unsigned double precision divide using expression ``a`` as + a single double precision register by expression ``b`` potentially setting flags ``flags`` and returning an + expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: optional, flags to set + :return: The expression ``divu.dp.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_DIVU_DP, a.index, b.index, size=size, flags=flags)
+ +
[docs] def mod_signed(self, size, a, b, flags=None): + """ + ``mod_signed`` signed modulus expression ``a`` by expression ``b`` potentially setting flags ``flags`` + and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: optional, flags to set + :return: The expression ``mods.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_MODS, a.index, b.index, size=size, flags=flags)
+ +
[docs] def mod_double_prec_signed(self, size, a, b, flags=None): + """ + ``mod_double_prec_signed`` signed double precision modulus using expression ``a`` as a single + double precision register by expression ``b`` potentially setting flags ``flags`` and returning an expression + of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: optional, flags to set + :return: The expression ``mods.dp.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_MODS_DP, a.index, b.index, size=size, flags=flags)
+ +
[docs] def mod_unsigned(self, size, a, b, flags=None): + """ + ``mod_unsigned`` unsigned modulus expression ``a`` by expression ``b`` potentially setting flags ``flags`` + and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: optional, flags to set + :return: The expression ``modu.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_MODU, a.index, b.index, size=size, flags=flags)
+ +
[docs] def mod_double_prec_unsigned(self, size, a, b, flags=None): + """ + ``mod_double_prec_unsigned`` unsigned double precision modulus using expression ``a`` as + a single double precision register by expression ``b`` potentially setting flags ``flags`` and returning an + expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: optional, flags to set + :return: The expression ``modu.dp.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_MODU_DP, a.index, b.index, size=size, flags=flags)
+ +
[docs] def neg_expr(self, size, value, flags=None): + """ + ``neg_expr`` two's complement sign negation of expression ``value`` of size ``size`` potentially setting flags + + :param int size: the size of the result in bytes + :param LowLevelILExpr value: the expression to negate + :param str flags: optional, flags to set + :return: The expression ``neg.<size>{<flags>}(value)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_NEG, value.index, size=size, flags=flags)
+ +
[docs] def not_expr(self, size, value, flags=None): + """ + ``not_expr`` bitwise inverse of expression ``value`` of size ``size`` potentially setting flags + + :param int size: the size of the result in bytes + :param LowLevelILExpr value: the expression to bitwise invert + :param str flags: optional, flags to set + :return: The expression ``not.<size>{<flags>}(value)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_NOT, value.index, size=size, flags=flags)
+ +
[docs] def sign_extend(self, size, value, flags=None): + """ + ``sign_extend`` two's complement sign-extends the expression in ``value`` to ``size`` bytes + + :param int size: the size of the result in bytes + :param LowLevelILExpr value: the expression to sign extend + :param str flags: optional, flags to set + :return: The expression ``sx.<size>(value)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_SX, value.index, size=size, flags=flags)
+ +
[docs] def zero_extend(self, size, value, flags=None): + """ + ``zero_extend`` zero-extends the expression in ``value`` to ``size`` bytes + + :param int size: the size of the result in bytes + :param LowLevelILExpr value: the expression to zero extend + :return: The expression ``zx.<size>(value)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_ZX, value.index, size=size, flags=flags)
+ +
[docs] def low_part(self, size, value, flags=None): + """ + ``low_part`` truncates ``value`` to ``size`` bytes + + :param int size: the size of the result in bytes + :param LowLevelILExpr value: the expression to zero extend + :return: The expression ``(value).<size>`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_LOW_PART, value.index, size=size, flags=flags)
+ +
[docs] def jump(self, dest): + """ + ``jump`` returns an expression which jumps (branches) to the expression ``dest`` + + :param LowLevelILExpr dest: the expression to jump to + :return: The expression ``jump(dest)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_JUMP, dest.index)
+ +
[docs] def call(self, dest): + """ + ``call`` returns an expression which first pushes the address of the next instruction onto the stack then jumps + (branches) to the expression ``dest`` + + :param LowLevelILExpr dest: the expression to call + :return: The expression ``call(dest)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_CALL, dest.index)
+ +
[docs] def call_stack_adjust(self, dest, stack_adjust): + """ + ``call_stack_adjust`` returns an expression which first pushes the address of the next instruction onto the stack + then jumps (branches) to the expression ``dest``. After the function exits, ``stack_adjust`` is added to the + stack pointer register. + + :param LowLevelILExpr dest: the expression to call + :return: The expression ``call(dest), stack += stack_adjust`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_CALL_STACK_ADJUST, dest.index, stack_adjust)
+ +
[docs] def tailcall(self, dest): + """ + ``tailcall`` returns an expression which jumps (branches) to the expression ``dest`` + + :param LowLevelILExpr dest: the expression to jump to + :return: The expression ``tailcall(dest)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_TAILCALL, dest.index)
+ +
[docs] def ret(self, dest): + """ + ``ret`` returns an expression which jumps (branches) to the expression ``dest``. ``ret`` is a special alias for + jump that makes the disassembler stop disassembling. + + :param LowLevelILExpr dest: the expression to jump to + :return: The expression ``jump(dest)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_RET, dest.index)
+ +
[docs] def no_ret(self): + """ + ``no_ret`` returns an expression halts disassembly + + :return: The expression ``noreturn`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_NORET)
+ +
[docs] def flag_condition(self, cond, sem_class = None): + """ + ``flag_condition`` returns a flag_condition expression for the given LowLevelILFlagCondition + + :param LowLevelILFlagCondition cond: Flag condition expression to retrieve + :param str sem_class: Optional semantic flag class + :return: A flag_condition expression + :rtype: LowLevelILExpr + """ + if isinstance(cond, str): + cond = LowLevelILFlagCondition[cond] + elif isinstance(cond, LowLevelILFlagCondition): + cond = cond.value + class_index = self.arch.get_semantic_flag_class_index(sem_class) + return self.expr(LowLevelILOperation.LLIL_FLAG_COND, cond, class_index)
+ +
[docs] def flag_group(self, sem_group): + """ + ``flag_group`` returns a flag_group expression for the given semantic flag group + + :param str sem_group: Semantic flag group to access + :return: A flag_group expression + :rtype: LowLevelILExpr + """ + group = self.arch.get_semantic_flag_group_index(sem_group) + return self.expr(LowLevelILOperation.LLIL_FLAG_GROUP, group)
+ +
[docs] def compare_equal(self, size, a, b): + """ + ``compare_equal`` returns comparison expression of size ``size`` checking if expression ``a`` is equal to + expression ``b`` + + :param int size: size in bytes + :param LowLevelILExpr a: LHS of comparison + :param LowLevelILExpr b: RHS of comparison + :return: a comparison expression. + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_CMP_E, a.index, b.index, size = size)
+ +
[docs] def compare_not_equal(self, size, a, b): + """ + ``compare_not_equal`` returns comparison expression of size ``size`` checking if expression ``a`` is not equal to + expression ``b`` + + :param int size: size in bytes + :param LowLevelILExpr a: LHS of comparison + :param LowLevelILExpr b: RHS of comparison + :return: a comparison expression. + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_CMP_NE, a.index, b.index, size = size)
+ +
[docs] def compare_signed_less_than(self, size, a, b): + """ + ``compare_signed_less_than`` returns comparison expression of size ``size`` checking if expression ``a`` is + signed less than expression ``b`` + + :param int size: size in bytes + :param LowLevelILExpr a: LHS of comparison + :param LowLevelILExpr b: RHS of comparison + :return: a comparison expression. + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_CMP_SLT, a.index, b.index, size = size)
+ +
[docs] def compare_unsigned_less_than(self, size, a, b): + """ + ``compare_unsigned_less_than`` returns comparison expression of size ``size`` checking if expression ``a`` is + unsigned less than expression ``b`` + + :param int size: size in bytes + :param LowLevelILExpr a: LHS of comparison + :param LowLevelILExpr b: RHS of comparison + :return: a comparison expression. + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_CMP_ULT, a.index, b.index, size = size)
+ +
[docs] def compare_signed_less_equal(self, size, a, b): + """ + ``compare_signed_less_equal`` returns comparison expression of size ``size`` checking if expression ``a`` is + signed less than or equal to expression ``b`` + + :param int size: size in bytes + :param LowLevelILExpr a: LHS of comparison + :param LowLevelILExpr b: RHS of comparison + :return: a comparison expression. + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_CMP_SLE, a.index, b.index, size = size)
+ +
[docs] def compare_unsigned_less_equal(self, size, a, b): + """ + ``compare_unsigned_less_equal`` returns comparison expression of size ``size`` checking if expression ``a`` is + unsigned less than or equal to expression ``b`` + + :param int size: size in bytes + :param LowLevelILExpr a: LHS of comparison + :param LowLevelILExpr b: RHS of comparison + :return: a comparison expression. + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_CMP_ULE, a.index, b.index, size = size)
+ +
[docs] def compare_signed_greater_equal(self, size, a, b): + """ + ``compare_signed_greater_equal`` returns comparison expression of size ``size`` checking if expression ``a`` is + signed greater than or equal to expression ``b`` + + :param int size: size in bytes + :param LowLevelILExpr a: LHS of comparison + :param LowLevelILExpr b: RHS of comparison + :return: a comparison expression. + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_CMP_SGE, a.index, b.index, size = size)
+ +
[docs] def compare_unsigned_greater_equal(self, size, a, b): + """ + ``compare_unsigned_greater_equal`` returns comparison expression of size ``size`` checking if expression ``a`` + is unsigned greater than or equal to expression ``b`` + + :param int size: size in bytes + :param LowLevelILExpr a: LHS of comparison + :param LowLevelILExpr b: RHS of comparison + :return: a comparison expression. + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_CMP_UGE, a.index, b.index, size = size)
+ +
[docs] def compare_signed_greater_than(self, size, a, b): + """ + ``compare_signed_greater_than`` returns comparison expression of size ``size`` checking if expression ``a`` is + signed greater than or equal to expression ``b`` + + :param int size: size in bytes + :param LowLevelILExpr a: LHS of comparison + :param LowLevelILExpr b: RHS of comparison + :return: a comparison expression. + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_CMP_SGT, a.index, b.index, size = size)
+ +
[docs] def compare_unsigned_greater_than(self, size, a, b): + """ + ``compare_unsigned_greater_than`` returns comparison expression of size ``size`` checking if expression ``a`` is + unsigned greater than or equal to expression ``b`` + + :param int size: size in bytes + :param LowLevelILExpr a: LHS of comparison + :param LowLevelILExpr b: RHS of comparison + :return: a comparison expression. + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_CMP_UGT, a.index, b.index, size = size)
+ +
[docs] def test_bit(self, size, a, b): + return self.expr(LowLevelILOperation.LLIL_TEST_BIT, a.index, b.index, size = size)
+ +
[docs] def system_call(self): + """ + ``system_call`` return a system call expression. + + :return: a system call expression. + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_SYSCALL)
+ +
[docs] def intrinsic(self, outputs, intrinsic, params, flags=None): + """ + ``intrinsic`` return an intrinsic expression. + + :return: an intrinsic expression. + :rtype: LowLevelILExpr + """ + output_list = [] + for output in outputs: + if isinstance(output, ILFlag): + output_list.append((1 << 32) | output.index) + else: + output_list.append(output.index) + param_list = [] + for param in params: + param_list.append(param.index) + call_param = self.expr(LowLevelILOperation.LLIL_CALL_PARAM, len(params), self.add_operand_list(param_list).index) + return self.expr(LowLevelILOperation.LLIL_INTRINSIC, len(outputs), self.add_operand_list(output_list).index, + self.arch.get_intrinsic_index(intrinsic), call_param.index, flags = flags)
+ +
[docs] def breakpoint(self): + """ + ``breakpoint`` returns a processor breakpoint expression. + + :return: a breakpoint expression. + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_BP)
+ +
[docs] def trap(self, value): + """ + ``trap`` returns a processor trap (interrupt) expression of the given integer ``value``. + + :param int value: trap (interrupt) number + :return: a trap expression. + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_TRAP, value)
+ +
[docs] def undefined(self): + """ + ``undefined`` returns the undefined expression. This should be used for instructions which perform functions but + aren't important for dataflow or partial emulation purposes. + + :return: the unimplemented expression. + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_UNDEF)
+ +
[docs] def unimplemented(self): + """ + ``unimplemented`` returns the unimplemented expression. This should be used for all instructions which aren't + implemented. + + :return: the unimplemented expression. + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_UNIMPL)
+ +
[docs] def unimplemented_memory_ref(self, size, addr): + """ + ``unimplemented_memory_ref`` a memory reference to expression ``addr`` of size ``size`` with unimplemented operation. + + :param int size: size in bytes of the memory reference + :param LowLevelILExpr addr: expression to reference memory + :return: the unimplemented memory reference expression. + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_UNIMPL_MEM, addr.index, size = size)
+ +
[docs] def float_add(self, size, a, b, flags=None): + """ + ``float_add`` adds floating point expression ``a`` to expression ``b`` potentially setting flags ``flags`` + and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: flags to set + :return: The expression ``fadd.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FADD, a.index, b.index, size=size, flags=flags)
+ +
[docs] def float_sub(self, size, a, b, flags=None): + """ + ``float_sub`` subtracts floating point expression ``b`` from expression ``a`` potentially setting flags ``flags`` + and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: flags to set + :return: The expression ``fsub.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FSUB, a.index, b.index, size=size, flags=flags)
+ +
[docs] def float_mult(self, size, a, b, flags=None): + """ + ``float_mult`` multiplies floating point expression ``a`` by expression ``b`` potentially setting flags ``flags`` + and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: flags to set + :return: The expression ``fmul.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FMUL, a.index, b.index, size=size, flags=flags)
+ +
[docs] def float_div(self, size, a, b, flags=None): + """ + ``float_div`` divides floating point expression ``a`` by expression ``b`` potentially setting flags ``flags`` + and returning an expression of ``size`` bytes. + + :param int size: the size of the result in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: flags to set + :return: The expression ``fdiv.<size>{<flags>}(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FDIV, a.index, b.index, size=size, flags=flags)
+ +
[docs] def float_sqrt(self, size, value, flags=None): + """ + ``float_sqrt`` returns square root of floating point expression ``value`` of size ``size`` potentially setting flags + + :param int size: the size of the result in bytes + :param LowLevelILExpr value: the expression to negate + :param str flags: optional, flags to set + :return: The expression ``sqrt.<size>{<flags>}(value)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FSQRT, value.index, size=size, flags=flags)
+ +
[docs] def float_neg(self, size, value, flags=None): + """ + ``float_neg`` returns sign negation of floating point expression ``value`` of size ``size`` potentially setting flags + + :param int size: the size of the result in bytes + :param LowLevelILExpr value: the expression to negate + :param str flags: optional, flags to set + :return: The expression ``fneg.<size>{<flags>}(value)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FNEG, value.index, size=size, flags=flags)
+ +
[docs] def float_abs(self, size, value, flags=None): + """ + ``float_abs`` returns absolute value of floating point expression ``value`` of size ``size`` potentially setting flags + + :param int size: the size of the result in bytes + :param LowLevelILExpr value: the expression to negate + :param str flags: optional, flags to set + :return: The expression ``fabs.<size>{<flags>}(value)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FABS, value.index, size=size, flags=flags)
+ +
[docs] def float_to_int(self, size, value, flags=None): + """ + ``float_to_int`` returns integer value of floating point expression ``value`` of size ``size`` potentially setting flags + + :param int size: the size of the result in bytes + :param LowLevelILExpr value: the expression to negate + :param str flags: optional, flags to set + :return: The expression ``int.<size>{<flags>}(value)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FLOAT_TO_INT, value.index, size=size, flags=flags)
+ +
[docs] def int_to_float(self, size, value, flags=None): + """ + ``int_to_float`` returns floating point value of integer expression ``value`` of size ``size`` potentially setting flags + + :param int size: the size of the result in bytes + :param LowLevelILExpr value: the expression to negate + :param str flags: optional, flags to set + :return: The expression ``float.<size>{<flags>}(value)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_INT_TO_FLOAT, value.index, size=size, flags=flags)
+ +
[docs] def float_convert(self, size, value, flags=None): + """ + ``int_to_float`` converts floating point value of expression ``value`` to size ``size`` potentially setting flags + + :param int size: the size of the result in bytes + :param LowLevelILExpr value: the expression to negate + :param str flags: optional, flags to set + :return: The expression ``fconvert.<size>{<flags>}(value)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FLOAT_CONV, value.index, size=size, flags=flags)
+ +
[docs] def round_to_int(self, size, value, flags=None): + """ + ``round_to_int`` rounds a floating point value to the nearest integer + + :param int size: the size of the result in bytes + :param LowLevelILExpr value: the expression to negate + :param str flags: optional, flags to set + :return: The expression ``roundint.<size>{<flags>}(value)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_ROUND_TO_INT, value.index, size=size, flags=flags)
+ +
[docs] def floor(self, size, value, flags=None): + """ + ``floor`` rounds a floating point value to an integer towards negative infinity + + :param int size: the size of the result in bytes + :param LowLevelILExpr value: the expression to negate + :param str flags: optional, flags to set + :return: The expression ``roundint.<size>{<flags>}(value)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FLOOR, value.index, size=size, flags=flags)
+ +
[docs] def ceil(self, size, value, flags=None): + """ + ``ceil`` rounds a floating point value to an integer towards positive infinity + + :param int size: the size of the result in bytes + :param LowLevelILExpr value: the expression to negate + :param str flags: optional, flags to set + :return: The expression ``roundint.<size>{<flags>}(value)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_CEIL, value.index, size=size, flags=flags)
+ +
[docs] def float_trunc(self, size, value, flags=None): + """ + ``float_trunc`` rounds a floating point value to an integer towards zero + + :param int size: the size of the result in bytes + :param LowLevelILExpr value: the expression to negate + :param str flags: optional, flags to set + :return: The expression ``roundint.<size>{<flags>}(value)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FTRUNC, value.index, size=size, flags=flags)
+ +
[docs] def float_compare_equal(self, size, a, b): + """ + ``float_compare_equal`` returns floating point comparison expression of size ``size`` checking if + expression ``a`` is equal to expression ``b`` + + :param int size: the size of the operands in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: flags to set + :return: The expression ``a f== b`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FCMP_E, a.index, b.index)
+ +
[docs] def float_compare_not_equal(self, size, a, b): + """ + ``float_compare_not_equal`` returns floating point comparison expression of size ``size`` checking if + expression ``a`` is not equal to expression ``b`` + + :param int size: the size of the operands in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: flags to set + :return: The expression ``a f!= b`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FCMP_NE, a.index, b.index)
+ +
[docs] def float_compare_less_than(self, size, a, b): + """ + ``float_compare_less_than`` returns floating point comparison expression of size ``size`` checking if + expression ``a`` is less than to expression ``b`` + + :param int size: the size of the operands in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: flags to set + :return: The expression ``a f< b`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FCMP_LT, a.index, b.index)
+ +
[docs] def float_compare_less_equal(self, size, a, b): + """ + ``float_compare_less_equal`` returns floating point comparison expression of size ``size`` checking if + expression ``a`` is less than or equal to expression ``b`` + + :param int size: the size of the operands in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: flags to set + :return: The expression ``a f<= b`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FCMP_LE, a.index, b.index)
+ +
[docs] def float_compare_greater_equal(self, size, a, b): + """ + ``float_compare_greater_equal`` returns floating point comparison expression of size ``size`` checking if + expression ``a`` is greater than or equal to expression ``b`` + + :param int size: the size of the operands in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: flags to set + :return: The expression ``a f>= b`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FCMP_GE, a.index, b.index)
+ +
[docs] def float_compare_greater_than(self, size, a, b): + """ + ``float_compare_greater_than`` returns floating point comparison expression of size ``size`` checking if + expression ``a`` is greater than or equal to expression ``b`` + + :param int size: the size of the operands in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: flags to set + :return: The expression ``a f> b`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FCMP_GT, a.index, b.index)
+ +
[docs] def float_compare_unordered(self, size, a, b): + """ + ``float_compare_unordered`` returns floating point comparison expression of size ``size`` checking if + expression ``a`` is unordered relative to expression ``b`` + + :param int size: the size of the operands in bytes + :param LowLevelILExpr a: LHS expression + :param LowLevelILExpr b: RHS expression + :param str flags: flags to set + :return: The expression ``is_unordered(a, b)`` + :rtype: LowLevelILExpr + """ + return self.expr(LowLevelILOperation.LLIL_FCMP_UO, a.index, b.index)
+ +
[docs] def goto(self, label): + """ + ``goto`` returns a goto expression which jumps to the provided LowLevelILLabel. + + :param LowLevelILLabel label: Label to jump to + :return: the LowLevelILExpr that jumps to the provided label + :rtype: LowLevelILExpr + """ + return LowLevelILExpr(core.BNLowLevelILGoto(self.handle, label.handle))
+ +
[docs] def if_expr(self, operand, t, f): + """ + ``if_expr`` returns the ``if`` expression which depending on condition ``operand`` jumps to the LowLevelILLabel + ``t`` when the condition expression ``operand`` is non-zero and ``f`` when it's zero. + + :param LowLevelILExpr operand: comparison expression to evaluate. + :param LowLevelILLabel t: Label for the true branch + :param LowLevelILLabel f: Label for the false branch + :return: the LowLevelILExpr for the if expression + :rtype: LowLevelILExpr + """ + return LowLevelILExpr(core.BNLowLevelILIf(self.handle, operand.index, t.handle, f.handle))
+ +
[docs] def mark_label(self, label): + """ + ``mark_label`` assigns a LowLevelILLabel to the current IL address. + + :param LowLevelILLabel label: + :rtype: None + """ + core.BNLowLevelILMarkLabel(self.handle, label.handle)
+ +
[docs] def add_label_list(self, labels): + """ + ``add_label_list`` returns a label list expression for the given list of LowLevelILLabel objects. + + :param list(LowLevelILLabel) lables: the list of LowLevelILLabel to get a label list expression from + :return: the label list expression + :rtype: LowLevelILExpr + """ + label_list = (ctypes.POINTER(core.BNLowLevelILLabel) * len(labels))() + for i in range(len(labels)): + label_list[i] = labels[i].handle + return LowLevelILExpr(core.BNLowLevelILAddLabelList(self.handle, label_list, len(labels)))
+ +
[docs] def add_operand_list(self, operands): + """ + ``add_operand_list`` returns an operand list expression for the given list of integer operands. + + :param list(int) operands: list of operand numbers + :return: an operand list expression + :rtype: LowLevelILExpr + """ + operand_list = (ctypes.c_ulonglong * len(operands))() + for i in range(len(operands)): + operand_list[i] = operands[i] + return LowLevelILExpr(core.BNLowLevelILAddOperandList(self.handle, operand_list, len(operands)))
+ +
[docs] def operand(self, n, expr): + """ + ``operand`` sets the operand number of the expression ``expr`` and passes back ``expr`` without modification. + + :param int n: + :param LowLevelILExpr expr: + :return: returns the expression ``expr`` unmodified + :rtype: LowLevelILExpr + """ + core.BNLowLevelILSetExprSourceOperand(self.handle, expr.index, n) + return expr
+ +
[docs] def finalize(self): + """ + ``finalize`` ends the function and computes the list of basic blocks. + + :rtype: None + """ + core.BNFinalizeLowLevelILFunction(self.handle)
+ +
[docs] def add_label_for_address(self, arch, addr): + """ + ``add_label_for_address`` adds a low-level IL label for the given architecture ``arch`` at the given virtual + address ``addr`` + + :param Architecture arch: Architecture to add labels for + :param int addr: the IL address to add a label at + """ + if arch is not None: + arch = arch.handle + core.BNAddLowLevelILLabelForAddress(self.handle, arch, addr)
+ +
[docs] def get_label_for_address(self, arch, addr): + """ + ``get_label_for_address`` returns the LowLevelILLabel for the given Architecture ``arch`` and IL address ``addr``. + + :param Architecture arch: + :param int addr: IL Address label to retrieve + :return: the LowLevelILLabel for the given IL address + :rtype: LowLevelILLabel + """ + if arch is not None: + arch = arch.handle + label = core.BNGetLowLevelILLabelForAddress(self.handle, arch, addr) + if label is None: + return None + return LowLevelILLabel(label)
+ +
[docs] def get_ssa_instruction_index(self, instr): + return core.BNGetLowLevelILSSAInstructionIndex(self.handle, instr)
+ +
[docs] def get_non_ssa_instruction_index(self, instr): + return core.BNGetLowLevelILNonSSAInstructionIndex(self.handle, instr)
+ +
[docs] def get_ssa_reg_definition(self, reg_ssa): + reg = self.arch.get_reg_index(reg_ssa.reg) + result = core.BNGetLowLevelILSSARegisterDefinition(self.handle, reg, reg_ssa.version) + if result >= core.BNGetLowLevelILInstructionCount(self.handle): + return None + return result
+ +
[docs] def get_ssa_flag_definition(self, flag_ssa): + flag = self.arch.get_flag_index(flag_ssa.flag) + result = core.BNGetLowLevelILSSAFlagDefinition(self.handle, flag, flag_ssa.version) + if result >= core.BNGetLowLevelILInstructionCount(self.handle): + return None + return result
+ +
[docs] def get_ssa_memory_definition(self, index): + result = core.BNGetLowLevelILSSAMemoryDefinition(self.handle, index) + if result >= core.BNGetLowLevelILInstructionCount(self.handle): + return None + return result
+ +
[docs] def get_ssa_reg_uses(self, reg_ssa): + reg = self.arch.get_reg_index(reg_ssa.reg) + count = ctypes.c_ulonglong() + instrs = core.BNGetLowLevelILSSARegisterUses(self.handle, reg, reg_ssa.version, count) + result = [] + for i in range(0, count.value): + result.append(instrs[i]) + core.BNFreeILInstructionList(instrs) + return result
+ +
[docs] def get_ssa_flag_uses(self, flag_ssa): + flag = self.arch.get_flag_index(flag_ssa.flag) + count = ctypes.c_ulonglong() + instrs = core.BNGetLowLevelILSSAFlagUses(self.handle, flag, flag_ssa.version, count) + result = [] + for i in range(0, count.value): + result.append(instrs[i]) + core.BNFreeILInstructionList(instrs) + return result
+ +
[docs] def get_ssa_memory_uses(self, index): + count = ctypes.c_ulonglong() + instrs = core.BNGetLowLevelILSSAMemoryUses(self.handle, index, count) + result = [] + for i in range(0, count.value): + result.append(instrs[i]) + core.BNFreeILInstructionList(instrs) + return result
+ +
[docs] def get_ssa_reg_value(self, reg_ssa): + reg = self.arch.get_reg_index(reg_ssa.reg) + value = core.BNGetLowLevelILSSARegisterValue(self.handle, reg, reg_ssa.version) + result = binaryninja.function.RegisterValue(self.arch, value) + return result
+ +
[docs] def get_ssa_flag_value(self, flag_ssa): + flag = self.arch.get_flag_index(flag_ssa.flag) + value = core.BNGetLowLevelILSSAFlagValue(self.handle, flag, flag_ssa.version) + result = binaryninja.function.RegisterValue(self.arch, value) + return result
+ +
[docs] def get_medium_level_il_instruction_index(self, instr): + med_il = self.medium_level_il + if med_il is None: + return None + result = core.BNGetMediumLevelILInstructionIndex(self.handle, instr) + if result >= core.BNGetMediumLevelILInstructionCount(med_il.handle): + return None + return result
+ +
[docs] def get_medium_level_il_expr_index(self, expr): + med_il = self.medium_level_il + if med_il is None: + return None + result = core.BNGetMediumLevelILExprIndex(self.handle, expr) + if result >= core.BNGetMediumLevelILExprCount(med_il.handle): + return None + return result
+ +
[docs] def get_mapped_medium_level_il_instruction_index(self, instr): + med_il = self.mapped_medium_level_il + if med_il is None: + return None + result = core.BNGetMappedMediumLevelILInstructionIndex(self.handle, instr) + if result >= core.BNGetMediumLevelILInstructionCount(med_il.handle): + return None + return result
+ +
[docs] def get_mapped_medium_level_il_expr_index(self, expr): + med_il = self.mapped_medium_level_il + if med_il is None: + return None + result = core.BNGetMappedMediumLevelILExprIndex(self.handle, expr) + if result >= core.BNGetMediumLevelILExprCount(med_il.handle): + return None + return result
+ +
[docs] def create_graph(self, settings = None): + if settings is not None: + settings_obj = settings.handle + else: + settings_obj = None + return binaryninja.flowgraph.CoreFlowGraph(core.BNCreateLowLevelILFunctionGraph(self.handle, settings_obj))
+ + +
[docs]class LowLevelILBasicBlock(basicblock.BasicBlock): +
[docs] def __init__(self, view, handle, owner): + super(LowLevelILBasicBlock, self).__init__(handle, view) + self.il_function = owner
+ + def __iter__(self): + for idx in range(self.start, self.end): + yield self.il_function[idx] + + def __getitem__(self, idx): + size = self.end - self.start + if idx > size or idx < -size: + raise IndexError("list index is out of range") + if idx >= 0: + return self.il_function[idx + self.start] + else: + return self.il_function[self.end + idx] + + def _create_instance(self, handle, view): + """Internal method by super to instantiate child instances""" + return LowLevelILBasicBlock(view, handle, self.il_function) + + def __hash__(self): + return hash((self.start, self.end, self.il_function))
+ + +
[docs]def LLIL_TEMP(n): + return n | 0x80000000
+ + +
[docs]def LLIL_REG_IS_TEMP(n): + return (n & 0x80000000) != 0
+ + +
[docs]def LLIL_GET_TEMP_REG_INDEX(n): + return n & 0x7fffffff
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/mainthread.html b/personal/api-docs/_modules/binaryninja/mainthread.html new file mode 100644 index 0000000..a75d318 --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/mainthread.html @@ -0,0 +1,306 @@ + + + + + + + + + + + binaryninja.mainthread — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.mainthread

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+# Binary Ninja components
+from binaryninja import _binaryninjacore as core
+from binaryninja import scriptingprovider
+from binaryninja import plugin
+
+
+
[docs]def execute_on_main_thread(func): + action = scriptingprovider._ThreadActionContext(func) + obj = core.BNExecuteOnMainThread(0, action.callback) + if obj: + return plugin.MainThreadAction(obj) + return None
+ + +
[docs]def execute_on_main_thread_and_wait(func): + action = scriptingprovider._ThreadActionContext(func) + core.BNExecuteOnMainThreadAndWait(0, action.callback)
+ + +
[docs]def worker_enqueue(func): + action = scriptingprovider._ThreadActionContext(func) + core.BNWorkerEnqueue(0, action.callback)
+ + +
[docs]def worker_priority_enqueue(func): + action = scriptingprovider._ThreadActionContext(func) + core.BNWorkerPriorityEnqueue(0, action.callback)
+ + +
[docs]def worker_interactive_enqueue(func): + action = scriptingprovider._ThreadActionContext(func) + core.BNWorkerInteractiveEnqueue(0, action.callback)
+ + +
[docs]def get_worker_thread_count(): + return core.BNGetWorkerThreadCount()
+ + +
[docs]def set_worker_thread_count(count): + core.BNSetWorkerThreadCount(count)
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/mediumlevelil.html b/personal/api-docs/_modules/binaryninja/mediumlevelil.html new file mode 100644 index 0000000..bfdb883 --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/mediumlevelil.html @@ -0,0 +1,1244 @@ + + + + + + + + + + + binaryninja.mediumlevelil — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.mediumlevelil

+# Copyright (c) 2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+import ctypes
+import struct
+
+# Binary Ninja components
+import binaryninja
+from binaryninja import _binaryninjacore as core
+from binaryninja.enums import MediumLevelILOperation, InstructionTextTokenType, ILBranchDependence
+from binaryninja import basicblock #required for MediumLevelILBasicBlock argument
+from binaryninja import function
+from binaryninja import types
+from binaryninja import lowlevelil
+
+# 2-3 compatibility
+from binaryninja import range
+
+
+
[docs]class SSAVariable(object): +
[docs] def __init__(self, var, version): + self.var = var + self.version = version
+ + def __repr__(self): + return "<ssa %s version %d>" % (repr(self.var), self.version) + + def __eq__(self, other): + return isinstance(other, SSAVariable) and ( + (self.var, self.version) == + (other.var, other.version) + ) + + def __hash__(self): + return hash((self.var, self.version))
+ + +
[docs]class MediumLevelILLabel(object): +
[docs] def __init__(self, handle = None): + if handle is None: + self.handle = (core.BNMediumLevelILLabel * 1)() + core.BNMediumLevelILInitLabel(self.handle) + else: + self.handle = handle
+ + +
[docs]class MediumLevelILOperationAndSize(object): +
[docs] def __init__(self, operation, size): + self.operation = operation + self.size = size
+ + def __repr__(self): + if self.size == 0: + return "<%s>" % self.operation.name + return "<%s %d>" % (self.operation.name, self.size) + + def __eq__(self, other): + if isinstance(other, MediumLevelILOperation): + return other == self.operation + if isinstance(other, MediumLevelILOperationAndSize): + return other.size == self.size and other.operation == self.operation + else: + return False
+ + +
[docs]class MediumLevelILInstruction(object): + """ + ``class MediumLevelILInstruction`` Medium Level Intermediate Language Instructions are infinite length tree-based + instructions. Tree-based instructions use infix notation with the left hand operand being the destination operand. + Infix notation is thus more natural to read than other notations (e.g. x86 ``mov eax, 0`` vs. MLIL ``eax = 0``). + """ + + ILOperations = { + MediumLevelILOperation.MLIL_NOP: [], + MediumLevelILOperation.MLIL_SET_VAR: [("dest", "var"), ("src", "expr")], + MediumLevelILOperation.MLIL_SET_VAR_FIELD: [("dest", "var"), ("offset", "int"), ("src", "expr")], + MediumLevelILOperation.MLIL_SET_VAR_SPLIT: [("high", "var"), ("low", "var"), ("src", "expr")], + MediumLevelILOperation.MLIL_LOAD: [("src", "expr")], + MediumLevelILOperation.MLIL_LOAD_STRUCT: [("src", "expr"), ("offset", "int")], + MediumLevelILOperation.MLIL_STORE: [("dest", "expr"), ("src", "expr")], + MediumLevelILOperation.MLIL_STORE_STRUCT: [("dest", "expr"), ("offset", "int"), ("src", "expr")], + MediumLevelILOperation.MLIL_VAR: [("src", "var")], + MediumLevelILOperation.MLIL_VAR_FIELD: [("src", "var"), ("offset", "int")], + MediumLevelILOperation.MLIL_VAR_SPLIT: [("high", "var"), ("low", "var")], + MediumLevelILOperation.MLIL_ADDRESS_OF: [("src", "var")], + MediumLevelILOperation.MLIL_ADDRESS_OF_FIELD: [("src", "var"), ("offset", "int")], + MediumLevelILOperation.MLIL_CONST: [("constant", "int")], + MediumLevelILOperation.MLIL_CONST_PTR: [("constant", "int")], + MediumLevelILOperation.MLIL_EXTERN_PTR: [("constant", "int"), ("offset", "int")], + MediumLevelILOperation.MLIL_FLOAT_CONST: [("constant", "float")], + MediumLevelILOperation.MLIL_IMPORT: [("constant", "int")], + MediumLevelILOperation.MLIL_ADD: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_ADC: [("left", "expr"), ("right", "expr"), ("carry", "expr")], + MediumLevelILOperation.MLIL_SUB: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_SBB: [("left", "expr"), ("right", "expr"), ("carry", "expr")], + MediumLevelILOperation.MLIL_AND: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_OR: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_XOR: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_LSL: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_LSR: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_ASR: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_ROL: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_RLC: [("left", "expr"), ("right", "expr"), ("carry", "expr")], + MediumLevelILOperation.MLIL_ROR: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_RRC: [("left", "expr"), ("right", "expr"), ("carry", "expr")], + MediumLevelILOperation.MLIL_MUL: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_MULU_DP: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_MULS_DP: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_DIVU: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_DIVU_DP: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_DIVS: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_DIVS_DP: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_MODU: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_MODU_DP: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_MODS: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_MODS_DP: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_NEG: [("src", "expr")], + MediumLevelILOperation.MLIL_NOT: [("src", "expr")], + MediumLevelILOperation.MLIL_SX: [("src", "expr")], + MediumLevelILOperation.MLIL_ZX: [("src", "expr")], + MediumLevelILOperation.MLIL_LOW_PART: [("src", "expr")], + MediumLevelILOperation.MLIL_JUMP: [("dest", "expr")], + MediumLevelILOperation.MLIL_JUMP_TO: [("dest", "expr"), ("targets", "int_list")], + MediumLevelILOperation.MLIL_RET_HINT: [("dest", "expr")], + MediumLevelILOperation.MLIL_CALL: [("output", "var_list"), ("dest", "expr"), ("params", "expr_list")], + MediumLevelILOperation.MLIL_CALL_UNTYPED: [("output", "expr"), ("dest", "expr"), ("params", "expr"), ("stack", "expr")], + MediumLevelILOperation.MLIL_CALL_OUTPUT: [("dest", "var_list")], + MediumLevelILOperation.MLIL_CALL_PARAM: [("src", "var_list")], + MediumLevelILOperation.MLIL_RET: [("src", "expr_list")], + MediumLevelILOperation.MLIL_NORET: [], + MediumLevelILOperation.MLIL_IF: [("condition", "expr"), ("true", "int"), ("false", "int")], + MediumLevelILOperation.MLIL_GOTO: [("dest", "int")], + MediumLevelILOperation.MLIL_CMP_E: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_CMP_NE: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_CMP_SLT: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_CMP_ULT: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_CMP_SLE: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_CMP_ULE: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_CMP_SGE: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_CMP_UGE: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_CMP_SGT: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_CMP_UGT: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_TEST_BIT: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_BOOL_TO_INT: [("src", "expr")], + MediumLevelILOperation.MLIL_ADD_OVERFLOW: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_SYSCALL: [("output", "var_list"), ("params", "expr_list")], + MediumLevelILOperation.MLIL_SYSCALL_UNTYPED: [("output", "expr"), ("params", "expr"), ("stack", "expr")], + MediumLevelILOperation.MLIL_TAILCALL: [("output", "var_list"), ("dest", "expr"), ("params", "expr_list")], + MediumLevelILOperation.MLIL_TAILCALL_UNTYPED: [("output", "expr"), ("dest", "expr"), ("params", "expr"), ("stack", "expr")], + MediumLevelILOperation.MLIL_BP: [], + MediumLevelILOperation.MLIL_TRAP: [("vector", "int")], + MediumLevelILOperation.MLIL_INTRINSIC: [("output", "var_list"), ("intrinsic", "intrinsic"), ("params", "expr_list")], + MediumLevelILOperation.MLIL_INTRINSIC_SSA: [("output", "var_ssa_list"), ("intrinsic", "intrinsic"), ("params", "expr_list")], + MediumLevelILOperation.MLIL_FREE_VAR_SLOT: [("dest", "var")], + MediumLevelILOperation.MLIL_FREE_VAR_SLOT_SSA: [("prev", "var_ssa_dest_and_src")], + MediumLevelILOperation.MLIL_UNDEF: [], + MediumLevelILOperation.MLIL_UNIMPL: [], + MediumLevelILOperation.MLIL_UNIMPL_MEM: [("src", "expr")], + MediumLevelILOperation.MLIL_FADD: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_FSUB: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_FMUL: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_FDIV: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_FSQRT: [("src", "expr")], + MediumLevelILOperation.MLIL_FNEG: [("src", "expr")], + MediumLevelILOperation.MLIL_FABS: [("src", "expr")], + MediumLevelILOperation.MLIL_FLOAT_TO_INT: [("src", "expr")], + MediumLevelILOperation.MLIL_INT_TO_FLOAT: [("src", "expr")], + MediumLevelILOperation.MLIL_FLOAT_CONV: [("src", "expr")], + MediumLevelILOperation.MLIL_ROUND_TO_INT: [("src", "expr")], + MediumLevelILOperation.MLIL_FLOOR: [("src", "expr")], + MediumLevelILOperation.MLIL_CEIL: [("src", "expr")], + MediumLevelILOperation.MLIL_FTRUNC: [("src", "expr")], + MediumLevelILOperation.MLIL_FCMP_E: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_FCMP_NE: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_FCMP_LT: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_FCMP_LE: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_FCMP_GE: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_FCMP_GT: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_FCMP_O: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_FCMP_UO: [("left", "expr"), ("right", "expr")], + MediumLevelILOperation.MLIL_SET_VAR_SSA: [("dest", "var_ssa"), ("src", "expr")], + MediumLevelILOperation.MLIL_SET_VAR_SSA_FIELD: [("prev", "var_ssa_dest_and_src"), ("offset", "int"), ("src", "expr")], + MediumLevelILOperation.MLIL_SET_VAR_SPLIT_SSA: [("high", "var_ssa"), ("low", "var_ssa"), ("src", "expr")], + MediumLevelILOperation.MLIL_SET_VAR_ALIASED: [("prev", "var_ssa_dest_and_src"), ("src", "expr")], + MediumLevelILOperation.MLIL_SET_VAR_ALIASED_FIELD: [("prev", "var_ssa_dest_and_src"), ("offset", "int"), ("src", "expr")], + MediumLevelILOperation.MLIL_VAR_SSA: [("src", "var_ssa")], + MediumLevelILOperation.MLIL_VAR_SSA_FIELD: [("src", "var_ssa"), ("offset", "int")], + MediumLevelILOperation.MLIL_VAR_ALIASED: [("src", "var_ssa")], + MediumLevelILOperation.MLIL_VAR_ALIASED_FIELD: [("src", "var_ssa"), ("offset", "int")], + MediumLevelILOperation.MLIL_VAR_SPLIT_SSA: [("high", "var_ssa"), ("low", "var_ssa")], + MediumLevelILOperation.MLIL_CALL_SSA: [("output", "expr"), ("dest", "expr"), ("params", "expr_list"), ("src_memory", "int")], + MediumLevelILOperation.MLIL_CALL_UNTYPED_SSA: [("output", "expr"), ("dest", "expr"), ("params", "expr"), ("stack", "expr")], + MediumLevelILOperation.MLIL_SYSCALL_SSA: [("output", "expr"), ("params", "expr_list"), ("src_memory", "int")], + MediumLevelILOperation.MLIL_SYSCALL_UNTYPED_SSA: [("output", "expr"), ("params", "expr"), ("stack", "expr")], + MediumLevelILOperation.MLIL_TAILCALL_SSA: [("output", "expr"), ("dest", "expr"), ("params", "expr_list"), ("src_memory", "int")], + MediumLevelILOperation.MLIL_TAILCALL_UNTYPED_SSA: [("output", "expr"), ("dest", "expr"), ("params", "expr"), ("stack", "expr")], + MediumLevelILOperation.MLIL_CALL_OUTPUT_SSA: [("dest_memory", "int"), ("dest", "var_ssa_list")], + MediumLevelILOperation.MLIL_CALL_PARAM_SSA: [("src_memory", "int"), ("src", "var_ssa_list")], + MediumLevelILOperation.MLIL_LOAD_SSA: [("src", "expr"), ("src_memory", "int")], + MediumLevelILOperation.MLIL_LOAD_STRUCT_SSA: [("src", "expr"), ("offset", "int"), ("src_memory", "int")], + MediumLevelILOperation.MLIL_STORE_SSA: [("dest", "expr"), ("dest_memory", "int"), ("src_memory", "int"), ("src", "expr")], + MediumLevelILOperation.MLIL_STORE_STRUCT_SSA: [("dest", "expr"), ("offset", "int"), ("dest_memory", "int"), ("src_memory", "int"), ("src", "expr")], + MediumLevelILOperation.MLIL_VAR_PHI: [("dest", "var_ssa"), ("src", "var_ssa_list")], + MediumLevelILOperation.MLIL_MEM_PHI: [("dest_memory", "int"), ("src_memory", "int_list")] + } + +
[docs] def __init__(self, func, expr_index, instr_index=None): + instr = core.BNGetMediumLevelILByIndex(func.handle, expr_index) + self.function = func + self.expr_index = expr_index + if instr_index is None: + self.instr_index = core.BNGetMediumLevelILInstructionForExpr(func.handle, expr_index) + else: + self.instr_index = instr_index + self.operation = MediumLevelILOperation(instr.operation) + self.size = instr.size + self.address = instr.address + self.source_operand = instr.sourceOperand + operands = MediumLevelILInstruction.ILOperations[instr.operation] + self.operands = [] + i = 0 + for operand in operands: + name, operand_type = operand + if operand_type == "int": + value = instr.operands[i] + value = (value & ((1 << 63) - 1)) - (value & (1 << 63)) + elif operand_type == "float": + if instr.size == 4: + value = struct.unpack("f", struct.pack("I", instr.operands[i] & 0xffffffff))[0] + elif instr.size == 8: + value = struct.unpack("d", struct.pack("Q", instr.operands[i]))[0] + else: + value = instr.operands[i] + elif operand_type == "expr": + value = MediumLevelILInstruction(func, instr.operands[i]) + elif operand_type == "intrinsic": + value = lowlevelil.ILIntrinsic(func.arch, instr.operands[i]) + elif operand_type == "var": + value = function.Variable.from_identifier(self.function.source_function, instr.operands[i]) + elif operand_type == "var_ssa": + var = function.Variable.from_identifier(self.function.source_function, instr.operands[i]) + version = instr.operands[i + 1] + i += 1 + value = SSAVariable(var, version) + elif operand_type == "var_ssa_dest_and_src": + var = function.Variable.from_identifier(self.function.source_function, instr.operands[i]) + dest_version = instr.operands[i + 1] + src_version = instr.operands[i + 2] + i += 2 + self.operands.append(SSAVariable(var, dest_version)) + self.dest = SSAVariable(var, dest_version) + value = SSAVariable(var, src_version) + elif operand_type == "int_list": + count = ctypes.c_ulonglong() + operand_list = core.BNMediumLevelILGetOperandList(func.handle, self.expr_index, i, count) + value = [] + for j in range(count.value): + value.append(operand_list[j]) + core.BNMediumLevelILFreeOperandList(operand_list) + elif operand_type == "var_list": + count = ctypes.c_ulonglong() + operand_list = core.BNMediumLevelILGetOperandList(func.handle, self.expr_index, i, count) + i += 1 + value = [] + for j in range(count.value): + value.append(function.Variable.from_identifier(self.function.source_function, operand_list[j])) + core.BNMediumLevelILFreeOperandList(operand_list) + elif operand_type == "var_ssa_list": + count = ctypes.c_ulonglong() + operand_list = core.BNMediumLevelILGetOperandList(func.handle, self.expr_index, i, count) + i += 1 + value = [] + for j in range(count.value // 2): + var_id = operand_list[j * 2] + var_version = operand_list[(j * 2) + 1] + value.append(SSAVariable(function.Variable.from_identifier(self.function.source_function, + var_id), var_version)) + core.BNMediumLevelILFreeOperandList(operand_list) + elif operand_type == "expr_list": + count = ctypes.c_ulonglong() + operand_list = core.BNMediumLevelILGetOperandList(func.handle, self.expr_index, i, count) + i += 1 + value = [] + for j in range(count.value): + value.append(MediumLevelILInstruction(func, operand_list[j])) + core.BNMediumLevelILFreeOperandList(operand_list) + self.operands.append(value) + self.__dict__[name] = value + i += 1
+ + def __str__(self): + tokens = self.tokens + if tokens is None: + return "invalid" + result = "" + for token in tokens: + result += token.text + return result + + def __repr__(self): + return "<il: %s>" % str(self) + + @property + def tokens(self): + """MLIL tokens (read-only)""" + count = ctypes.c_ulonglong() + tokens = ctypes.POINTER(core.BNInstructionTextToken)() + if ((self.instr_index is not None) and (self.function.source_function is not None) and + (self.expr_index == core.BNGetMediumLevelILIndexForInstruction(self.function.handle, self.instr_index))): + if not core.BNGetMediumLevelILInstructionText(self.function.handle, self.function.source_function.handle, + self.function.arch.handle, self.instr_index, tokens, count): + return None + else: + if not core.BNGetMediumLevelILExprText(self.function.handle, self.function.arch.handle, + self.expr_index, tokens, count): + return None + result = binaryninja.function.InstructionTextToken.get_instruction_lines(tokens, count.value) + core.BNFreeInstructionText(tokens, count.value) + return result + + @property + def il_basic_block(self): + """IL basic block object containing this expression (read-only) (only available on finalized functions)""" + return MediumLevelILBasicBlock(self.function.source_function.view, core.BNGetMediumLevelILBasicBlockForInstruction(self.function.handle, self.instr_index), self.function) + + @property + def ssa_form(self): + """SSA form of expression (read-only)""" + return MediumLevelILInstruction(self.function.ssa_form, + core.BNGetMediumLevelILSSAExprIndex(self.function.handle, self.expr_index)) + + @property + def non_ssa_form(self): + """Non-SSA form of expression (read-only)""" + return MediumLevelILInstruction(self.function.non_ssa_form, + core.BNGetMediumLevelILNonSSAExprIndex(self.function.handle, self.expr_index)) + + @property + def value(self): + """Value of expression if constant or a known value (read-only)""" + value = core.BNGetMediumLevelILExprValue(self.function.handle, self.expr_index) + result = function.RegisterValue(self.function.arch, value) + return result + + @property + def possible_values(self): + """Possible values of expression using path-sensitive static data flow analysis (read-only)""" + value = core.BNGetMediumLevelILPossibleExprValues(self.function.handle, self.expr_index) + result = function.PossibleValueSet(self.function.arch, value) + core.BNFreePossibleValueSet(value) + return result + + @property + def branch_dependence(self): + """Set of branching instructions that must take the true or false path to reach this instruction""" + count = ctypes.c_ulonglong() + deps = core.BNGetAllMediumLevelILBranchDependence(self.function.handle, self.instr_index, count) + result = {} + for i in range(0, count.value): + result[deps[i].branch] = ILBranchDependence(deps[i].dependence) + core.BNFreeILBranchDependenceList(deps) + return result + + @property + def low_level_il(self): + """Low level IL form of this expression""" + expr = self.function.get_low_level_il_expr_index(self.expr_index) + if expr is None: + return None + return lowlevelil.LowLevelILInstruction(self.function.low_level_il.ssa_form, expr) + + @property + def llil(self): + """Alias for low_level_il""" + return self.low_level_il + + @property + def ssa_memory_version(self): + """Version of active memory contents in SSA form for this instruction""" + return core.BNGetMediumLevelILSSAMemoryVersionAtILInstruction(self.function.handle, self.instr_index) + + @property + def prefix_operands(self): + """All operands in the expression tree in prefix order""" + result = [MediumLevelILOperationAndSize(self.operation, self.size)] + for operand in self.operands: + if isinstance(operand, MediumLevelILInstruction): + result += operand.prefix_operands + else: + result.append(operand) + return result + + @property + def postfix_operands(self): + """All operands in the expression tree in postfix order""" + result = [] + for operand in self.operands: + if isinstance(operand, MediumLevelILInstruction): + result += operand.postfix_operands + else: + result.append(operand) + result.append(MediumLevelILOperationAndSize(self.operation, self.size)) + return result + + @property + def vars_written(self): + """List of variables written by instruction""" + if self.operation in [MediumLevelILOperation.MLIL_SET_VAR, MediumLevelILOperation.MLIL_SET_VAR_FIELD, + MediumLevelILOperation.MLIL_SET_VAR_SSA, MediumLevelILOperation.MLIL_SET_VAR_SSA_FIELD, + MediumLevelILOperation.MLIL_SET_VAR_ALIASED, MediumLevelILOperation.MLIL_SET_VAR_ALIASED_FIELD, + MediumLevelILOperation.MLIL_VAR_PHI]: + return [self.dest] + elif self.operation in [MediumLevelILOperation.MLIL_SET_VAR_SPLIT, MediumLevelILOperation.MLIL_SET_VAR_SPLIT_SSA]: + return [self.high, self.low] + elif self.operation in [MediumLevelILOperation.MLIL_CALL, MediumLevelILOperation.MLIL_SYSCALL, MediumLevelILOperation.MLIL_TAILCALL]: + return self.output + elif self.operation in [MediumLevelILOperation.MLIL_CALL_UNTYPED, MediumLevelILOperation.MLIL_SYSCALL_UNTYPED, MediumLevelILOperation.MLIL_TAILCALL_UNTYPED, + MediumLevelILOperation.MLIL_CALL_SSA, MediumLevelILOperation.MLIL_CALL_UNTYPED_SSA, + MediumLevelILOperation.MLIL_SYSCALL_SSA, MediumLevelILOperation.MLIL_SYSCALL_UNTYPED_SSA, + MediumLevelILOperation.MLIL_TAILCALL_SSA, MediumLevelILOperation.MLIL_TAILCALL_UNTYPED_SSA]: + return self.output.vars_written + elif self.operation in [MediumLevelILOperation.MLIL_CALL_OUTPUT, MediumLevelILOperation.MLIL_CALL_OUTPUT_SSA]: + return self.dest + return [] + + @property + def vars_read(self): + """List of variables read by instruction""" + if self.operation in [MediumLevelILOperation.MLIL_SET_VAR, MediumLevelILOperation.MLIL_SET_VAR_FIELD, + MediumLevelILOperation.MLIL_SET_VAR_SPLIT, MediumLevelILOperation.MLIL_SET_VAR_SSA, + MediumLevelILOperation.MLIL_SET_VAR_SPLIT_SSA, MediumLevelILOperation.MLIL_SET_VAR_ALIASED]: + return self.src.vars_read + elif self.operation in [MediumLevelILOperation.MLIL_SET_VAR_SSA_FIELD, + MediumLevelILOperation.MLIL_SET_VAR_ALIASED_FIELD]: + return [self.prev] + self.src.vars_read + elif self.operation in [MediumLevelILOperation.MLIL_CALL, MediumLevelILOperation.MLIL_SYSCALL, MediumLevelILOperation.MLIL_TAILCALL, + MediumLevelILOperation.MLIL_CALL_SSA, MediumLevelILOperation.MLIL_SYSCALL_SSA, MediumLevelILOperation.MLIL_TAILCALL_SSA]: + result = [] + for param in self.params: + result += param.vars_read + return result + elif self.operation in [MediumLevelILOperation.MLIL_CALL_UNTYPED, MediumLevelILOperation.MLIL_SYSCALL_UNTYPED, MediumLevelILOperation.MLIL_TAILCALL_UNTYPED, + MediumLevelILOperation.MLIL_CALL_UNTYPED_SSA, MediumLevelILOperation.MLIL_SYSCALL_UNTYPED_SSA, MediumLevelILOperation.MLIL_TAILCALL_UNTYPED_SSA]: + return self.params.vars_read + elif self.operation in [MediumLevelILOperation.MLIL_CALL_PARAM, MediumLevelILOperation.MLIL_CALL_PARAM_SSA, + MediumLevelILOperation.MLIL_VAR_PHI]: + return self.src + elif self.operation in [MediumLevelILOperation.MLIL_CALL_OUTPUT, MediumLevelILOperation.MLIL_CALL_OUTPUT_SSA]: + return [] + result = [] + for operand in self.operands: + if (isinstance(operand, function.Variable)) or (isinstance(operand, SSAVariable)): + result.append(operand) + elif isinstance(operand, MediumLevelILInstruction): + result += operand.vars_read + return result + + @property + def expr_type(self): + """Type of expression""" + result = core.BNGetMediumLevelILExprType(self.function.handle, self.expr_index) + if result.type: + platform = None + if self.function.source_function: + platform = self.function.source_function.platform + return types.Type(result.type, platform = platform, confidence = result.confidence) + return None + +
[docs] def get_ssa_var_possible_values(self, ssa_var): + var_data = core.BNVariable() + var_data.type = ssa_var.var.source_type + var_data.index = ssa_var.var.index + var_data.storage = ssa_var.var.storage + value = core.BNGetMediumLevelILPossibleSSAVarValues(self.function.handle, var_data, ssa_var.version, self.instr_index) + result = function.PossibleValueSet(self.function.arch, value) + core.BNFreePossibleValueSet(value) + return result
+ +
[docs] def get_ssa_var_version(self, var): + var_data = core.BNVariable() + var_data.type = var.source_type + var_data.index = var.index + var_data.storage = var.storage + return core.BNGetMediumLevelILSSAVarVersionAtILInstruction(self.function.handle, var_data, self.instr_index)
+ +
[docs] def get_var_for_reg(self, reg): + reg = self.function.arch.get_reg_index(reg) + result = core.BNGetMediumLevelILVariableForRegisterAtInstruction(self.function.handle, reg, self.instr_index) + return function.Variable(self.function.source_function, result.type, result.index, result.storage)
+ +
[docs] def get_var_for_flag(self, flag): + flag = self.function.arch.get_flag_index(flag) + result = core.BNGetMediumLevelILVariableForFlagAtInstruction(self.function.handle, flag, self.instr_index) + return function.Variable(self.function.source_function, result.type, result.index, result.storage)
+ +
[docs] def get_var_for_stack_location(self, offset): + result = core.BNGetMediumLevelILVariableForStackLocationAtInstruction(self.function.handle, offset, self.instr_index) + return function.Variable(self.function.source_function, result.type, result.index, result.storage)
+ +
[docs] def get_reg_value(self, reg): + reg = self.function.arch.get_reg_index(reg) + value = core.BNGetMediumLevelILRegisterValueAtInstruction(self.function.handle, reg, self.instr_index) + result = function.RegisterValue(self.function.arch, value) + return result
+ +
[docs] def get_reg_value_after(self, reg): + reg = self.function.arch.get_reg_index(reg) + value = core.BNGetMediumLevelILRegisterValueAfterInstruction(self.function.handle, reg, self.instr_index) + result = function.RegisterValue(self.function.arch, value) + return result
+ +
[docs] def get_possible_reg_values(self, reg): + reg = self.function.arch.get_reg_index(reg) + value = core.BNGetMediumLevelILPossibleRegisterValuesAtInstruction(self.function.handle, reg, self.instr_index) + result = function.PossibleValueSet(self.function.arch, value) + core.BNFreePossibleValueSet(value) + return result
+ +
[docs] def get_possible_reg_values_after(self, reg): + reg = self.function.arch.get_reg_index(reg) + value = core.BNGetMediumLevelILPossibleRegisterValuesAfterInstruction(self.function.handle, reg, self.instr_index) + result = function.PossibleValueSet(self.function.arch, value) + core.BNFreePossibleValueSet(value) + return result
+ +
[docs] def get_flag_value(self, flag): + flag = self.function.arch.get_flag_index(flag) + value = core.BNGetMediumLevelILFlagValueAtInstruction(self.function.handle, flag, self.instr_index) + result = function.RegisterValue(self.function.arch, value) + return result
+ +
[docs] def get_flag_value_after(self, flag): + flag = self.function.arch.get_flag_index(flag) + value = core.BNGetMediumLevelILFlagValueAfterInstruction(self.function.handle, flag, self.instr_index) + result = function.RegisterValue(self.function.arch, value) + return result
+ +
[docs] def get_possible_flag_values(self, flag): + flag = self.function.arch.get_flag_index(flag) + value = core.BNGetMediumLevelILPossibleFlagValuesAtInstruction(self.function.handle, flag, self.instr_index) + result = function.PossibleValueSet(self.function.arch, value) + core.BNFreePossibleValueSet(value) + return result
+ +
[docs] def get_possible_flag_values_after(self, flag): + flag = self.function.arch.get_flag_index(flag) + value = core.BNGetMediumLevelILPossibleFlagValuesAfterInstruction(self.function.handle, flag, self.instr_index) + result = function.PossibleValueSet(self.function.arch, value) + core.BNFreePossibleValueSet(value) + return result
+ +
[docs] def get_stack_contents(self, offset, size): + value = core.BNGetMediumLevelILStackContentsAtInstruction(self.function.handle, offset, size, self.instr_index) + result = function.RegisterValue(self.function.arch, value) + return result
+ +
[docs] def get_stack_contents_after(self, offset, size): + value = core.BNGetMediumLevelILStackContentsAfterInstruction(self.function.handle, offset, size, self.instr_index) + result = function.RegisterValue(self.function.arch, value) + return result
+ +
[docs] def get_possible_stack_contents(self, offset, size): + value = core.BNGetMediumLevelILPossibleStackContentsAtInstruction(self.function.handle, offset, size, self.instr_index) + result = function.PossibleValueSet(self.function.arch, value) + core.BNFreePossibleValueSet(value) + return result
+ +
[docs] def get_possible_stack_contents_after(self, offset, size): + value = core.BNGetMediumLevelILPossibleStackContentsAfterInstruction(self.function.handle, offset, size, self.instr_index) + result = function.PossibleValueSet(self.function.arch, value) + core.BNFreePossibleValueSet(value) + return result
+ +
[docs] def get_branch_dependence(self, branch_instr): + return ILBranchDependence(core.BNGetMediumLevelILBranchDependence(self.function.handle, self.instr_index, branch_instr))
+ + def __setattr__(self, name, value): + try: + object.__setattr__(self, name, value) + except AttributeError: + raise AttributeError("attribute '%s' is read only" % name)
+ + +
[docs]class MediumLevelILExpr(object): + """ + ``class MediumLevelILExpr`` hold the index of IL Expressions. + + .. note:: This class shouldn't be instantiated directly. Rather the helper members of MediumLevelILFunction should be \ + used instead. + """ +
[docs] def __init__(self, index): + self.index = index
+ + +
[docs]class MediumLevelILFunction(object): + """ + ``class MediumLevelILFunction`` contains the list of MediumLevelILExpr objects that make up a binaryninja.function. MediumLevelILExpr + objects can be added to the MediumLevelILFunction by calling ``append`` and passing the result of the various class + methods which return MediumLevelILExpr objects. + """ +
[docs] def __init__(self, arch = None, handle = None, source_func = None): + self.arch = arch + self.source_function = source_func + if handle is not None: + self.handle = core.handle_of_type(handle, core.BNMediumLevelILFunction) + if self.source_function is None: + self.source_function = binaryninja.function.Function(handle = core.BNGetMediumLevelILOwnerFunction(self.handle)) + if self.arch is None: + self.arch = self.source_function.arch + else: + if self.source_function is None: + self.handle = None + raise ValueError("IL functions must be created with an associated function") + if self.arch is None: + self.arch = self.source_function.arch + func_handle = self.source_function.handle + self.handle = core.BNCreateMediumLevelILFunction(arch.handle, func_handle)
+ + def __del__(self): + if self.handle is not None: + core.BNFreeMediumLevelILFunction(self.handle) + + def __eq__(self, value): + if not isinstance(value, MediumLevelILFunction): + return False + return ctypes.addressof(self.handle.contents) == ctypes.addressof(value.handle.contents) + + def __ne__(self, value): + if not isinstance(value, MediumLevelILFunction): + return True + return ctypes.addressof(self.handle.contents) != ctypes.addressof(value.handle.contents) + + @property + def current_address(self): + """Current IL Address (read/write)""" + return core.BNMediumLevelILGetCurrentAddress(self.handle) + + @current_address.setter + def current_address(self, value): + core.BNMediumLevelILSetCurrentAddress(self.handle, self.arch.handle, value) + +
[docs] def set_current_address(self, value, arch = None): + if arch is None: + arch = self.arch + core.BNMediumLevelILSetCurrentAddress(self.handle, arch.handle, value)
+ + @property + def basic_blocks(self): + """list of MediumLevelILBasicBlock objects (read-only)""" + count = ctypes.c_ulonglong() + blocks = core.BNGetMediumLevelILBasicBlockList(self.handle, count) + result = [] + view = None + if self.source_function is not None: + view = self.source_function.view + for i in range(0, count.value): + result.append(MediumLevelILBasicBlock(view, core.BNNewBasicBlockReference(blocks[i]), self)) + core.BNFreeBasicBlockList(blocks, count.value) + return result + + @property + def instructions(self): + """A generator of mlil instructions of the current function""" + for block in self.basic_blocks: + for i in block: + yield i + + @property + def ssa_form(self): + """Medium level IL in SSA form (read-only)""" + result = core.BNGetMediumLevelILSSAForm(self.handle) + if not result: + return None + return MediumLevelILFunction(self.arch, result, self.source_function) + + @property + def non_ssa_form(self): + """Medium level IL in non-SSA (default) form (read-only)""" + result = core.BNGetMediumLevelILNonSSAForm(self.handle) + if not result: + return None + return MediumLevelILFunction(self.arch, result, self.source_function) + + @property + def low_level_il(self): + """Low level IL for this function""" + result = core.BNGetLowLevelILForMediumLevelIL(self.handle) + if not result: + return None + return lowlevelil.LowLevelILFunction(self.arch, result, self.source_function) + + @property + def llil(self): + """Alias for low_level_il""" + return self.low_level_il + + def __setattr__(self, name, value): + try: + object.__setattr__(self, name, value) + except AttributeError: + raise AttributeError("attribute '%s' is read only" % name) + + def __len__(self): + return int(core.BNGetMediumLevelILInstructionCount(self.handle)) + + def __getitem__(self, i): + if isinstance(i, slice) or isinstance(i, tuple): + raise IndexError("expected integer instruction index") + if isinstance(i, MediumLevelILExpr): + return MediumLevelILInstruction(self, i.index) + if (i < 0) or (i >= len(self)): + raise IndexError("index out of range") + return MediumLevelILInstruction(self, core.BNGetMediumLevelILIndexForInstruction(self.handle, i), i) + + def __setitem__(self, i, j): + raise IndexError("instruction modification not implemented") + + def __iter__(self): + count = ctypes.c_ulonglong() + blocks = core.BNGetMediumLevelILBasicBlockList(self.handle, count) + view = None + if self.source_function is not None: + view = self.source_function.view + try: + for i in range(0, count.value): + yield MediumLevelILBasicBlock(view, core.BNNewBasicBlockReference(blocks[i]), self) + finally: + core.BNFreeBasicBlockList(blocks, count.value) + +
[docs] def get_instruction_start(self, addr, arch = None): + if arch is None: + arch = self.arch + result = core.BNMediumLevelILGetInstructionStart(self.handle, arch.handle, addr) + if result >= core.BNGetMediumLevelILInstructionCount(self.handle): + return None + return result
+ +
[docs] def expr(self, operation, a = 0, b = 0, c = 0, d = 0, e = 0, size = 0): + if isinstance(operation, str): + operation = MediumLevelILOperation[operation] + elif isinstance(operation, MediumLevelILOperation): + operation = operation.value + return MediumLevelILExpr(core.BNMediumLevelILAddExpr(self.handle, operation, size, a, b, c, d, e))
+ +
[docs] def append(self, expr): + """ + ``append`` adds the MediumLevelILExpr ``expr`` to the current MediumLevelILFunction. + + :param MediumLevelILExpr expr: the MediumLevelILExpr to add to the current MediumLevelILFunction + :return: number of MediumLevelILExpr in the current function + :rtype: int + """ + return core.BNMediumLevelILAddInstruction(self.handle, expr.index)
+ +
[docs] def goto(self, label): + """ + ``goto`` returns a goto expression which jumps to the provided MediumLevelILLabel. + + :param MediumLevelILLabel label: Label to jump to + :return: the MediumLevelILExpr that jumps to the provided label + :rtype: MediumLevelILExpr + """ + return MediumLevelILExpr(core.BNMediumLevelILGoto(self.handle, label.handle))
+ +
[docs] def if_expr(self, operand, t, f): + """ + ``if_expr`` returns the ``if`` expression which depending on condition ``operand`` jumps to the MediumLevelILLabel + ``t`` when the condition expression ``operand`` is non-zero and ``f`` when it's zero. + + :param MediumLevelILExpr operand: comparison expression to evaluate. + :param MediumLevelILLabel t: Label for the true branch + :param MediumLevelILLabel f: Label for the false branch + :return: the MediumLevelILExpr for the if expression + :rtype: MediumLevelILExpr + """ + return MediumLevelILExpr(core.BNMediumLevelILIf(self.handle, operand.index, t.handle, f.handle))
+ +
[docs] def mark_label(self, label): + """ + ``mark_label`` assigns a MediumLevelILLabel to the current IL address. + + :param MediumLevelILLabel label: + :rtype: None + """ + core.BNMediumLevelILMarkLabel(self.handle, label.handle)
+ +
[docs] def add_label_list(self, labels): + """ + ``add_label_list`` returns a label list expression for the given list of MediumLevelILLabel objects. + + :param list(MediumLevelILLabel) labels: the list of MediumLevelILLabel to get a label list expression from + :return: the label list expression + :rtype: MediumLevelILExpr + """ + label_list = (ctypes.POINTER(core.BNMediumLevelILLabel) * len(labels))() + for i in range(len(labels)): + label_list[i] = labels[i].handle + return MediumLevelILExpr(core.BNMediumLevelILAddLabelList(self.handle, label_list, len(labels)))
+ +
[docs] def add_operand_list(self, operands): + """ + ``add_operand_list`` returns an operand list expression for the given list of integer operands. + + :param list(int) operands: list of operand numbers + :return: an operand list expression + :rtype: MediumLevelILExpr + """ + operand_list = (ctypes.c_ulonglong * len(operands))() + for i in range(len(operands)): + operand_list[i] = operands[i] + return MediumLevelILExpr(core.BNMediumLevelILAddOperandList(self.handle, operand_list, len(operands)))
+ +
[docs] def operand(self, n, expr): + """ + ``operand`` sets the operand number of the expression ``expr`` and passes back ``expr`` without modification. + + :param int n: + :param MediumLevelILExpr expr: + :return: returns the expression ``expr`` unmodified + :rtype: MediumLevelILExpr + """ + core.BNMediumLevelILSetExprSourceOperand(self.handle, expr.index, n) + return expr
+ +
[docs] def finalize(self): + """ + ``finalize`` ends the function and computes the list of basic blocks. + + :rtype: None + """ + core.BNFinalizeMediumLevelILFunction(self.handle)
+ +
[docs] def get_ssa_instruction_index(self, instr): + return core.BNGetMediumLevelILSSAInstructionIndex(self.handle, instr)
+ +
[docs] def get_non_ssa_instruction_index(self, instr): + return core.BNGetMediumLevelILNonSSAInstructionIndex(self.handle, instr)
+ +
[docs] def get_ssa_var_definition(self, ssa_var): + var_data = core.BNVariable() + var_data.type = ssa_var.var.source_type + var_data.index = ssa_var.var.index + var_data.storage = ssa_var.var.storage + result = core.BNGetMediumLevelILSSAVarDefinition(self.handle, var_data, ssa_var.version) + if result >= core.BNGetMediumLevelILInstructionCount(self.handle): + return None + return result
+ +
[docs] def get_ssa_memory_definition(self, version): + result = core.BNGetMediumLevelILSSAMemoryDefinition(self.handle, version) + if result >= core.BNGetMediumLevelILInstructionCount(self.handle): + return None + return result
+ +
[docs] def get_ssa_var_uses(self, ssa_var): + count = ctypes.c_ulonglong() + var_data = core.BNVariable() + var_data.type = ssa_var.var.source_type + var_data.index = ssa_var.var.index + var_data.storage = ssa_var.var.storage + instrs = core.BNGetMediumLevelILSSAVarUses(self.handle, var_data, ssa_var.version, count) + result = [] + for i in range(0, count.value): + result.append(instrs[i]) + core.BNFreeILInstructionList(instrs) + return result
+ +
[docs] def get_ssa_memory_uses(self, version): + count = ctypes.c_ulonglong() + instrs = core.BNGetMediumLevelILSSAMemoryUses(self.handle, version, count) + result = [] + for i in range(0, count.value): + result.append(instrs[i]) + core.BNFreeILInstructionList(instrs) + return result
+ +
[docs] def is_ssa_var_live(self, ssa_var): + """ + ``is_ssa_var_live`` determines if ``ssa_var`` is live at any point in the function + + :param SSAVariable ssa_var: the SSA variable to query + :return: whether the variable is live at any point in the function + :rtype: bool + """ + var_data = core.BNVariable() + var_data.type = ssa_var.var.source_type + var_data.index = ssa_var.var.index + var_data.storage = ssa_var.var.storage + return core.BNIsMediumLevelILSSAVarLive(self.handle, var_data, ssa_var.version)
+ +
[docs] def get_var_definitions(self, var): + count = ctypes.c_ulonglong() + var_data = core.BNVariable() + var_data.type = var.source_type + var_data.index = var.index + var_data.storage = var.storage + instrs = core.BNGetMediumLevelILVariableDefinitions(self.handle, var_data, count) + result = [] + for i in range(0, count.value): + result.append(instrs[i]) + core.BNFreeILInstructionList(instrs) + return result
+ +
[docs] def get_var_uses(self, var): + count = ctypes.c_ulonglong() + var_data = core.BNVariable() + var_data.type = var.source_type + var_data.index = var.index + var_data.storage = var.storage + instrs = core.BNGetMediumLevelILVariableUses(self.handle, var_data, count) + result = [] + for i in range(0, count.value): + result.append(instrs[i]) + core.BNFreeILInstructionList(instrs) + return result
+ +
[docs] def get_ssa_var_value(self, ssa_var): + var_data = core.BNVariable() + var_data.type = ssa_var.var.source_type + var_data.index = ssa_var.var.index + var_data.storage = ssa_var.var.storage + value = core.BNGetMediumLevelILSSAVarValue(self.handle, var_data, ssa_var.version) + result = function.RegisterValue(self.arch, value) + return result
+ +
[docs] def get_low_level_il_instruction_index(self, instr): + low_il = self.low_level_il + if low_il is None: + return None + low_il = low_il.ssa_form + if low_il is None: + return None + result = core.BNGetLowLevelILInstructionIndex(self.handle, instr) + if result >= core.BNGetLowLevelILInstructionCount(low_il.handle): + return None + return result
+ +
[docs] def get_low_level_il_expr_index(self, expr): + low_il = self.low_level_il + if low_il is None: + return None + low_il = low_il.ssa_form + if low_il is None: + return None + result = core.BNGetLowLevelILExprIndex(self.handle, expr) + if result >= core.BNGetLowLevelILExprCount(low_il.handle): + return None + return result
+ +
[docs] def create_graph(self, settings = None): + if settings is not None: + settings_obj = settings.handle + else: + settings_obj = None + return binaryninja.flowgraph.CoreFlowGraph(core.BNCreateMediumLevelILFunctionGraph(self.handle, settings_obj))
+ + +
[docs]class MediumLevelILBasicBlock(basicblock.BasicBlock): +
[docs] def __init__(self, view, handle, owner): + super(MediumLevelILBasicBlock, self).__init__(handle, view) + self.il_function = owner
+ + def __iter__(self): + for idx in range(self.start, self.end): + yield self.il_function[idx] + + def __getitem__(self, idx): + size = self.end - self.start + if idx > size or idx < -size: + raise IndexError("list index is out of range") + if idx >= 0: + return self.il_function[idx + self.start] + else: + return self.il_function[self.end + idx] + + def _create_instance(self, handle, view): + """Internal method by super to instantiate child instances""" + return MediumLevelILBasicBlock(view, handle, self.il_function) + + def __hash__(self): + return hash((self.start, self.end, self.il_function))
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/metadata.html b/personal/api-docs/_modules/binaryninja/metadata.html new file mode 100644 index 0000000..4dd1d5c --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/metadata.html @@ -0,0 +1,528 @@ + + + + + + + + + + + binaryninja.metadata — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.metadata

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+
+from __future__ import absolute_import
+import ctypes
+import numbers
+
+# Binary Ninja components
+from binaryninja import _binaryninjacore as core
+from binaryninja.enums import MetadataType
+
+# 2-3 compatibility
+from binaryninja import range
+from binaryninja import pyNativeStr
+
+
+
[docs]class Metadata(object): +
[docs] def __init__(self, value=None, signed=None, raw=None, handle=None): + if handle is not None: + self.handle = handle + elif isinstance(value, numbers.Integral): + if signed: + self.handle = core.BNCreateMetadataSignedIntegerData(value) + else: + self.handle = core.BNCreateMetadataUnsignedIntegerData(value) + elif isinstance(value, bool): + self.handle = core.BNCreateMetadataBooleanData(value) + elif isinstance(value, (str, bytes)): + if raw: + if isinstance(value, str): + value = bytes(bytearray(ord(i) for i in value)) + buffer = (ctypes.c_ubyte * len(value)).from_buffer_copy(value) + self.handle = core.BNCreateMetadataRawData(buffer, len(value)) + else: + self.handle = core.BNCreateMetadataStringData(value) + elif isinstance(value, float): + self.handle = core.BNCreateMetadataDoubleData(value) + elif isinstance(value, (list, tuple)): + self.handle = core.BNCreateMetadataOfType(MetadataType.ArrayDataType) + for elm in value: + md = Metadata(elm, signed, raw) + core.BNMetadataArrayAppend(self.handle, md.handle) + elif isinstance(value, dict): + self.handle = core.BNCreateMetadataOfType(MetadataType.KeyValueDataType) + for elm in value: + md = Metadata(value[elm], signed, raw) + core.BNMetadataSetValueForKey(self.handle, str(elm), md.handle) + else: + raise ValueError("{} doesn't contain type of: int, bool, str, float, list, dict".format(type(value).__name__))
+ + @property + def value(self): + if self.is_integer: + return int(self) + elif self.is_string: + return str(self) + elif self.is_raw: + return bytes(self) + elif self.is_float: + return float(self) + elif self.is_boolean: + return bool(self) + elif self.is_array: + return list(self) + elif self.is_dict: + return self.get_dict() + raise TypeError() + +
[docs] def get_dict(self): + if not self.is_dict: + raise TypeError() + result = {} + for key in self: + result[key] = self[key] + return result
+ + @property + def type(self): + return MetadataType(core.BNMetadataGetType(self.handle)) + + @property + def is_integer(self): + return self.is_signed_integer or self.is_unsigned_integer + + @property + def is_signed_integer(self): + return core.BNMetadataIsSignedInteger(self.handle) + + @property + def is_unsigned_integer(self): + return core.BNMetadataIsUnsignedInteger(self.handle) + + @property + def is_float(self): + return core.BNMetadataIsDouble(self.handle) + + @property + def is_boolean(self): + return core.BNMetadataIsBoolean(self.handle) + + @property + def is_string(self): + return core.BNMetadataIsString(self.handle) + + @property + def is_raw(self): + return core.BNMetadataIsRaw(self.handle) + + @property + def is_array(self): + return core.BNMetadataIsArray(self.handle) + + @property + def is_dict(self): + return core.BNMetadataIsKeyValueStore(self.handle) + +
[docs] def remove(self, key_or_index): + if isinstance(key_or_index, str) and self.is_dict: + core.BNMetadataRemoveKey(self.handle, key_or_index) + elif isinstance(key_or_index, int) and self.is_array: + core.BNMetadataRemoveIndex(self.handle, key_or_index) + else: + raise TypeError("remove only valid for dict and array objects")
+ + def __len__(self): + if self.is_array or self.is_dict or self.is_string or self.is_raw: + return core.BNMetadataSize(self.handle) + raise Exception("Metadata object doesn't support len()") + + def __iter__(self): + if self.is_array: + for i in range(core.BNMetadataSize(self.handle)): + yield Metadata(handle=core.BNMetadataGetForIndex(self.handle, i)).value + elif self.is_dict: + result = core.BNMetadataGetValueStore(self.handle) + try: + for i in range(result.contents.size): + if isinstance(result.contents.keys[i], bytes): + yield str(pyNativeStr(result.contents.keys[i])) + else: + yield result.contents.keys[i] + finally: + core.BNFreeMetadataValueStore(result) + else: + raise Exception("Metadata object doesn't support iteration") + + def __getitem__(self, value): + if self.is_array: + if not isinstance(value, int): + raise ValueError("Metadata object only supports integers for indexing") + if value >= len(self): + raise IndexError("Index value out of range") + return Metadata(handle=core.BNMetadataGetForIndex(self.handle, value)).value + if self.is_dict: + if not isinstance(value, str): + raise ValueError("Metadata object only supports strings for indexing") + handle = core.BNMetadataGetForKey(self.handle, value) + if handle is None: + raise KeyError(value) + return Metadata(handle=handle).value + + raise NotImplementedError("Metadata object doesn't support indexing") + + def __str__(self): + if self.is_string: + return str(core.BNMetadataGetString(self.handle)) + if self.is_raw: + length = ctypes.c_ulonglong() + length.value = 0 + native_list = core.BNMetadataGetRaw(self.handle, ctypes.byref(length)) + out_list = [] + for i in range(length.value): + out_list.append(native_list[i]) + core.BNFreeMetadataRaw(native_list) + return ''.join(chr(a) for a in out_list) + + raise ValueError("Metadata object not a string or raw type") + + def __bytes__(self): + return bytes(bytearray(ord(i) for i in self.__str__())) + + def __int__(self): + if self.is_signed_integer: + return core.BNMetadataGetSignedInteger(self.handle) + if self.is_unsigned_integer: + return core.BNMetadataGetUnsignedInteger(self.handle) + + raise ValueError("Metadata object not of integer type") + + def __float__(self): + if not self.is_float: + raise ValueError("Metadata object is not float type") + return core.BNMetadataGetDouble(self.handle) + + def __nonzero__(self): + if not self.is_boolean: + raise ValueError("Metadata object is not boolean type") + return core.BNMetadataGetBoolean(self.handle) + + def __eq__(self, other): + if isinstance(other, int) and self.is_integer: + return int(self) == other + elif isinstance(other, str) and (self.is_string or self.is_raw): + return str(self) == other + elif isinstance(other, float) and self.is_float: + return float(self) == other + elif isinstance(other, bool) and self.is_boolean: + return bool(self) == other + elif self.is_array and ((isinstance(other, Metadata) and other.is_array) or isinstance(other, list)): + if len(self) != len(other): + return False + for a, b in zip(self, other): + if a != b: + return False + return True + elif self.is_dict and ((isinstance(other, Metadata) and other.is_dict) or isinstance(other, dict)): + if len(self) != len(other): + return False + for a, b in zip(self, other): + if a != b or self[a] != other[b]: + return False + return True + elif isinstance(other, Metadata) and self.is_integer and other.is_integer: + return int(self) == int(other) + elif isinstance(other, Metadata) and (self.is_string or self.is_raw) and (other.is_string or other.is_raw): + return str(self) == str(other) + elif isinstance(other, Metadata) and self.is_float and other.is_float: + return float(self) == float(other) + elif isinstance(other, Metadata) and self.is_boolean and other.is_boolean: + return bool(self) == bool(other) + raise NotImplementedError() + + def __ne__(self, other): + if isinstance(other, int) and self.is_integer: + return int(self) != other + elif isinstance(other, str) and (self.is_string or self.is_raw): + return str(self) != other + elif isinstance(other, float) and self.is_float: + return float(self) != other + elif isinstance(other, bool): + return bool(self) != other + elif self.is_array and ((isinstance(other, Metadata) and other.is_array) or isinstance(other, list)): + if len(self) != len(other): + return True + areEqual = True + for a, b in zip(self, other): + if a != b: + areEqual = False + return not areEqual + elif self.is_dict and ((isinstance(other, Metadata) and other.is_dict) or isinstance(other, dict)): + if len(self) != len(other): + return True + for a, b in zip(self, other): + if a != b or self[a] != other[b]: + return True + return False + elif isinstance(other, Metadata) and self.is_integer and other.is_integer: + return int(self) != int(other) + elif isinstance(other, Metadata) and (self.is_string or self.is_raw) and (other.is_string or other.is_raw): + return str(self) != str(other) + elif isinstance(other, Metadata) and self.is_float and other.is_float: + return float(self) != float(other) + elif isinstance(other, Metadata) and self.is_boolean and other.is_boolean: + return bool(self) != bool(other)
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/platform.html b/personal/api-docs/_modules/binaryninja/platform.html new file mode 100644 index 0000000..b2832af --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/platform.html @@ -0,0 +1,712 @@ + + + + + + + + + + + binaryninja.platform — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.platform

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

Source code for binaryninja.plugin

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

Source code for binaryninja.pluginmanager

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

Source code for binaryninja.scriptingprovider

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

Source code for binaryninja.settings

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+import ctypes
+
+# Binary Ninja components
+from binaryninja import _binaryninjacore as core
+
+# 2-3 compatibility
+from binaryninja import range
+from binaryninja import pyNativeStr
+from binaryninja.enums import SettingsScope
+
+
+
[docs]class Settings(object): +
[docs] def __init__(self, registry_id = "default"): + self.registry_id = registry_id
+ +
[docs] def register_group(self, group, title): + """ + ``register_group`` registers a group for use with this Settings registry. Groups provide a simple way to organize settings. + + :param str group: a unique identifier + :param str title: a user friendly name appropriate for UI presentation + :return: True on success, False on failure. + :rtype: bool + :Example: + + >>> Settings().register_group("solver", "Solver") + True + >>> + """ + return core.BNSettingsRegisterGroup(self.registry_id, group, title)
+ +
[docs] def register_setting(self, id, properties): + """ + ``register_setting`` registers a new setting with this Settings registry. + + :param str id: a unique setting identifier in the form <group>.<id> + :param str properties: a JSON string describes the setting schema + :return: True on success, False on failure. + :rtype: bool + :Example: + + >>> Settings().register_group("solver", "Solver") + True + >>> Settings().register_setting("solver.basicBlockSlicing", '{"description" : "Enable the basic block slicing in the solver.", "title" : "Basic Block Slicing", "default" : true, "type" : "boolean", "id" : "basicBlockSlicing"}') + True + """ + return core.BNSettingsRegisterSetting(self.registry_id, id, properties)
+ +
[docs] def update_property(self, id, setting_property): + return core.BNSettingsUpdateProperty(self.registry_id, tr(), id, setting_property)
+ +
[docs] def get_schema(self): + return core.BNSettingsGetSchema(self.registry_id)
+ +
[docs] def copy_value(self, dest_registry_id, id): + return core.BNSettingsCopyValue(self.registry_id, dest_registry_id, id)
+ +
[docs] def reset(self, id, view = None, scope = SettingsScope.SettingsAutoScope): + if view is not None: + view = view.handle + return core.BNSettingsReset(self.registry_id, id, view, scope)
+ +
[docs] def reset_all(self, view = None, scope = SettingsScope.SettingsAutoScope): + if view is not None: + view = view.handle + return core.BNSettingsResetAll(self.registry_id, view, scope)
+ +
[docs] def get_bool(self, id, view = None): + if view is not None: + view = view.handle + return core.BNSettingsGetBool(self.registry_id, id, view, None)
+ +
[docs] def get_double(self, id, view = None): + if view is not None: + view = view.handle + return core.BNSettingsGetDouble(self.registry_id, id, view, None)
+ +
[docs] def get_integer(self, id, view = None): + if view is not None: + view = view.handle + return core.BNSettingsGetUInt64(self.registry_id, id, view, None)
+ +
[docs] def get_string(self, id, view = None): + if view is not None: + view = view.handle + return core.BNSettingsGetString(self.registry_id, id, view, None)
+ +
[docs] def get_string_list(self, id, view = None): + if view is not None: + view = view.handle + length = ctypes.c_ulonglong() + result = core.BNSettingsGetStringList(self.registry_id, id, view, None, ctypes.byref(length)) + out_list = [] + for i in range(length.value): + out_list.append(pyNativeStr(result[i])) + core.BNFreeStringList(result, length) + return out_list
+ +
[docs] def get_bool_with_scope(self, id, view = None, scope = SettingsScope.SettingsAutoScope): + if view is not None: + view = view.handle + c_scope = core.SettingsScopeEnum(scope) + result = core.BNSettingsGetBool(self.registry_id, id, view, ctypes.byref(c_scope)) + return (result, SettingsScope(c_scope.value))
+ +
[docs] def get_double_with_scope(self, id, view = None, scope = SettingsScope.SettingsAutoScope): + if view is not None: + view = view.handle + c_scope = core.SettingsScopeEnum(scope) + result = core.BNSettingsGetDouble(self.registry_id, id, view, ctypes.byref(c_scope)) + return (result, SettingsScope(c_scope.value))
+ +
[docs] def get_integer_with_scope(self, id, view = None, scope = SettingsScope.SettingsAutoScope): + if view is not None: + view = view.handle + c_scope = core.SettingsScopeEnum(scope) + result = core.BNSettingsGetUInt64(self.registry_id, id, view, ctypes.byref(c_scope)) + return (result, SettingsScope(c_scope.value))
+ +
[docs] def get_string_with_scope(self, id, view = None, scope = SettingsScope.SettingsAutoScope): + if view is not None: + view = view.handle + c_scope = core.SettingsScopeEnum(scope) + result = core.BNSettingsGetString(self.registry_id, id, view, ctypes.byref(c_scope)) + return (result, SettingsScope(c_scope.value))
+ +
[docs] def get_string_list_with_scope(self, id, view = None, scope = SettingsScope.SettingsAutoScope): + if view is not None: + view = view.handle + c_scope = core.SettingsScopeEnum(scope) + length = ctypes.c_ulonglong() + result = core.BNSettingsGetStringList(self.registry_id, id, view, ctypes.byref(c_scope), ctypes.byref(length)) + out_list = [] + for i in range(length.value): + out_list.append(pyNativeStr(result[i])) + core.BNFreeStringList(result, length) + return (out_list, SettingsScope(c_scope.value))
+ +
[docs] def set_bool(self, id, value, view = None, scope = SettingsScope.SettingsAutoScope): + if view is not None: + view = view.handle + return core.BNSettingsSetBool(self.registry_id, view, scope, id, value)
+ +
[docs] def set_double(self, id, value, view = None, scope = SettingsScope.SettingsAutoScope): + if view is not None: + view = view.handle + return core.BNSettingsSetDouble(self.registry_id, view, scope, id, value)
+ +
[docs] def set_integer(self, id, value, view = None, scope = SettingsScope.SettingsAutoScope): + if view is not None: + view = view.handle + return core.BNSettingsSetUInt64(self.registry_id, view, scope, id, value)
+ +
[docs] def set_string(self, id, value, view = None, scope = SettingsScope.SettingsAutoScope): + if view is not None: + view = view.handle + return core.BNSettingsSetString(self.registry_id, view, scope, id, value)
+ +
[docs] def set_string_list(self, id, value, view = None, scope = SettingsScope.SettingsAutoScope): + if view is not None: + view = view.handle + length = ctypes.c_ulonglong() + length.value = len(value) + string_list = (ctypes.c_char_p * len(value))() + for i in range(len(value)): + string_list[i] = value[i].encode('charmap') + return core.BNSettingsSetStringList(self.registry_id, view, scope, id, string_list, length)
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/transform.html b/personal/api-docs/_modules/binaryninja/transform.html new file mode 100644 index 0000000..6ab0e50 --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/transform.html @@ -0,0 +1,496 @@ + + + + + + + + + + + binaryninja.transform — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.transform

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+import traceback
+import ctypes
+import abc
+
+# Binary Ninja components
+import binaryninja
+from binaryninja import log
+from binaryninja import databuffer
+from binaryninja import _binaryninjacore as core
+from binaryninja.enums import TransformType
+
+# 2-3 compatibility
+from binaryninja import range
+from binaryninja import with_metaclass
+
+
+class _TransformMetaClass(type):
+	@property
+	def list(self):
+		binaryninja._init_plugins()
+		count = ctypes.c_ulonglong()
+		xforms = core.BNGetTransformTypeList(count)
+		result = []
+		for i in range(0, count.value):
+			result.append(Transform(xforms[i]))
+		core.BNFreeTransformTypeList(xforms)
+		return result
+
+	def __iter__(self):
+		binaryninja._init_plugins()
+		count = ctypes.c_ulonglong()
+		xforms = core.BNGetTransformTypeList(count)
+		try:
+			for i in range(0, count.value):
+				yield Transform(xforms[i])
+		finally:
+			core.BNFreeTransformTypeList(xforms)
+
+	def __setattr__(self, name, value):
+		try:
+			type.__setattr__(self, name, value)
+		except AttributeError:
+			raise AttributeError("attribute '%s' is read only" % name)
+
+	def __getitem__(cls, name):
+		binaryninja._init_plugins()
+		xform = core.BNGetTransformByName(name)
+		if xform is None:
+			raise KeyError("'%s' is not a valid transform" % str(name))
+		return Transform(xform)
+
+	def register(cls):
+		binaryninja._init_plugins()
+		if cls.name is None:
+			raise ValueError("transform 'name' is not defined")
+		if cls.long_name is None:
+			cls.long_name = cls.name
+		if cls.transform_type is None:
+			raise ValueError("transform 'transform_type' is not defined")
+		if cls.group is None:
+			cls.group = ""
+		xform = cls(None)
+		cls._registered_cb = xform._cb
+		xform.handle = core.BNRegisterTransformType(cls.transform_type, cls.name, cls.long_name, cls.group, xform._cb)
+
+
+
[docs]class TransformParameter(object): +
[docs] def __init__(self, name, long_name = None, fixed_length = 0): + self.name = name + if long_name is None: + self.long_name = name + else: + self.long_name = long_name + self.fixed_length = fixed_length
+ + def __repr__(self): + return "<TransformParameter: {} fixed length: {}>".format( + self.long_name, self.fixed_length + )
+ + +
[docs]class Transform(with_metaclass(_TransformMetaClass, object)): + transform_type = None + name = None + long_name = None + group = None + parameters = [] + _registered_cb = None + +
[docs] def __init__(self, handle): + if handle is None: + self._cb = core.BNCustomTransform() + self._cb.context = 0 + self._cb.getParameters = self._cb.getParameters.__class__(self._get_parameters) + self._cb.freeParameters = self._cb.freeParameters.__class__(self._free_parameters) + self._cb.decode = self._cb.decode.__class__(self._decode) + self._cb.encode = self._cb.encode.__class__(self._encode) + self._pending_param_lists = {} + self.type = self.__class__.transform_type + if not isinstance(self.type, str): + self.type = TransformType(self.type) + self.name = self.__class__.name + self.long_name = self.__class__.long_name + self.group = self.__class__.group + self.parameters = self.__class__.parameters + else: + self.handle = handle + self.type = TransformType(core.BNGetTransformType(self.handle)) + self.name = core.BNGetTransformName(self.handle) + self.long_name = core.BNGetTransformLongName(self.handle) + self.group = core.BNGetTransformGroup(self.handle) + count = ctypes.c_ulonglong() + params = core.BNGetTransformParameterList(self.handle, count) + self.parameters = [] + for i in range(0, count.value): + self.parameters.append(TransformParameter(params[i].name, params[i].longName, params[i].fixedLength)) + core.BNFreeTransformParameterList(params, count.value)
+ + def __repr__(self): + return "<transform: %s>" % self.name + + def __eq__(self, value): + if not isinstance(value, Transform): + return False + return ctypes.addressof(self.handle.contents) == ctypes.addressof(value.handle.contents) + + def __ne__(self, value): + if not isinstance(value, Transform): + return True + return ctypes.addressof(self.handle.contents) != ctypes.addressof(value.handle.contents) + + def _get_parameters(self, ctxt, count): + try: + count[0] = len(self.parameters) + param_buf = (core.BNTransformParameterInfo * len(self.parameters))() + for i in range(0, len(self.parameters)): + param_buf[i].name = self.parameters[i].name + param_buf[i].longName = self.parameters[i].long_name + param_buf[i].fixedLength = self.parameters[i].fixed_length + result = ctypes.cast(param_buf, ctypes.c_void_p) + self._pending_param_lists[result.value] = (result, param_buf) + return result.value + except: + log.log_error(traceback.format_exc()) + count[0] = 0 + return None + + def _free_parameters(self, params, count): + try: + buf = ctypes.cast(params, ctypes.c_void_p) + if buf.value not in self._pending_param_lists: + raise ValueError("freeing parameter list that wasn't allocated") + del self._pending_param_lists[buf.value] + except: + log.log_error(traceback.format_exc()) + + def _decode(self, ctxt, input_buf, output_buf, params, count): + try: + input_obj = databuffer.DataBuffer(handle = core.BNDuplicateDataBuffer(input_buf)) + param_map = {} + for i in range(0, count): + data = databuffer.DataBuffer(handle = core.BNDuplicateDataBuffer(params[i].value)) + param_map[params[i].name] = str(data) + result = self.perform_decode(str(input_obj), param_map) + if result is None: + return False + result = str(result) + core.BNSetDataBufferContents(output_buf, result, len(result)) + return True + except: + log.log_error(traceback.format_exc()) + return False + + def _encode(self, ctxt, input_buf, output_buf, params, count): + try: + input_obj = databuffer.DataBuffer(handle = core.BNDuplicateDataBuffer(input_buf)) + param_map = {} + for i in range(0, count): + data = databuffer.DataBuffer(handle = core.BNDuplicateDataBuffer(params[i].value)) + param_map[params[i].name] = str(data) + result = self.perform_encode(str(input_obj), param_map) + if result is None: + return False + result = str(result) + core.BNSetDataBufferContents(output_buf, result, len(result)) + return True + except: + log.log_error(traceback.format_exc()) + return False + + @property + def list(self): + """Allow tab completion to discover metaclass list property""" + pass + +
[docs] @abc.abstractmethod + def perform_decode(self, data, params): + if self.type == TransformType.InvertingTransform: + return self.perform_encode(data, params) + return None
+ +
[docs] @abc.abstractmethod + def perform_encode(self, data, params): + return None
+ +
[docs] def decode(self, input_buf, params = {}): + input_buf = databuffer.DataBuffer(input_buf) + output_buf = databuffer.DataBuffer() + keys = list(params.keys()) + param_buf = (core.BNTransformParameter * len(keys))() + for i in range(0, len(keys)): + data = databuffer.DataBuffer(params[keys[i]]) + param_buf[i].name = keys[i] + param_buf[i].value = data.handle + if not core.BNDecode(self.handle, input_buf.handle, output_buf.handle, param_buf, len(keys)): + return None + return str(output_buf)
+ +
[docs] def encode(self, input_buf, params = {}): + input_buf = databuffer.DataBuffer(input_buf) + output_buf = databuffer.DataBuffer() + keys = list(params.keys()) + param_buf = (core.BNTransformParameter * len(keys))() + for i in range(0, len(keys)): + data = databuffer.DataBuffer(params[keys[i]]) + param_buf[i].name = keys[i] + param_buf[i].value = data.handle + if not core.BNEncode(self.handle, input_buf.handle, output_buf.handle, param_buf, len(keys)): + return None + return str(output_buf)
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/types.html b/personal/api-docs/_modules/binaryninja/types.html new file mode 100644 index 0000000..caf6393 --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/types.html @@ -0,0 +1,1308 @@ + + + + + + + + + + + binaryninja.types — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.types

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+from __future__ import absolute_import
+max_confidence = 255
+
+import ctypes
+
+# Binary Ninja components
+import binaryninja
+from binaryninja import _binaryninjacore as core
+from binaryninja.enums import SymbolType, SymbolBinding, TypeClass, NamedTypeReferenceClass, InstructionTextTokenType, StructureType, ReferenceType, VariableSourceType
+
+# 2-3 compatibility
+from binaryninja import range
+from binaryninja import pyNativeStr
+
+
+
[docs]class QualifiedName(object): +
[docs] def __init__(self, name = []): + if isinstance(name, str): + self.name = [name] + self.byte_name = [name.encode('charmap')] + elif isinstance(name, QualifiedName): + self.name = name.name + self.byte_name = [n.encode('charmap') for n in name.name] + else: + self.name = [pyNativeStr(i) for i in name] + self.byte_name = name
+ + def __str__(self): + return "::".join(self.name) + + def __repr__(self): + return repr(str(self)) + + def __len__(self): + return len(self.name) + + def __hash__(self): + return hash(str(self)) + + def __eq__(self, other): + if isinstance(other, str): + return str(self) == other + elif isinstance(other, list): + return self.name == other + elif isinstance(other, QualifiedName): + return self.name == other.name + return False + + def __ne__(self, other): + return not (self == other) + + def __lt__(self, other): + if isinstance(other, QualifiedName): + return self.name < other.name + return False + + def __le__(self, other): + if isinstance(other, QualifiedName): + return self.name <= other.name + return False + + def __gt__(self, other): + if isinstance(other, QualifiedName): + return self.name > other.name + return False + + def __ge__(self, other): + if isinstance(other, QualifiedName): + return self.name >= other.name + return False + + def __cmp__(self, other): + if self == other: + return 0 + if self < other: + return -1 + return 1 + + def __getitem__(self, key): + return self.name[key] + + def __iter__(self): + return iter(self.name) + + def _get_core_struct(self): + result = core.BNQualifiedName() + name_list = (ctypes.c_char_p * len(self.name))() + for i in range(0, len(self.name)): + name_list[i] = self.name[i].encode('charmap') + result.name = name_list + result.nameCount = len(self.name) + return result + + @classmethod + def _from_core_struct(cls, name): + result = [] + for i in range(0, name.nameCount): + result.append(name.name[i]) + return QualifiedName(result)
+ + +
[docs]class NameSpace(QualifiedName): + def __str__(self): + return ":".join(self.name) + + def _get_core_struct(self): + result = core.BNNameSpace() + name_list = (ctypes.c_char_p * len(self.name))() + for i in range(0, len(self.name)): + name_list[i] = self.name[i].encode('charmap') + result.name = name_list + result.nameCount = len(self.name) + return result + + @classmethod + def _from_core_struct(cls, name): + result = [] + for i in range(0, name.nameCount): + result.append(name.name[i]) + return NameSpace(result)
+ +
[docs]class Symbol(object): + """ + Symbols are defined as one of the following types: + + =========================== ============================================================== + SymbolType Description + =========================== ============================================================== + FunctionSymbol Symbol for Function that exists in the current binary + ImportAddressSymbol Symbol defined in the Import Address Table + ImportedFunctionSymbol Symbol for Function that is not defined in the current binary + DataSymbol Symbol for Data in the current binary + ImportedDataSymbol Symbol for Data that is not defined in the current binary + ExternalSymbol Symbols for data and code that reside outside the BinaryView + =========================== ============================================================== + """ +
[docs] def __init__(self, sym_type, addr, short_name, full_name=None, raw_name=None, handle=None, binding=None, namespace=None): + if handle is not None: + self.handle = core.handle_of_type(handle, core.BNSymbol) + else: + if isinstance(sym_type, str): + sym_type = SymbolType[sym_type] + if full_name is None: + full_name = short_name + if raw_name is None: + raw_name = full_name + if binding is None: + binding = SymbolBinding.NoBinding + if isinstance(namespace, str): + namespace = NameSpace(namespace) + if isinstance(namespace, NameSpace): + namespace = namespace._get_core_struct() + self.handle = core.BNCreateSymbol(sym_type, short_name, full_name, raw_name, addr, binding, namespace)
+ + def __del__(self): + core.BNFreeSymbol(self.handle) + + def __eq__(self, value): + if not isinstance(value, Symbol): + return False + return ctypes.addressof(self.handle.contents) == ctypes.addressof(value.handle.contents) + + def __ne__(self, value): + if not isinstance(value, Symbol): + return True + return ctypes.addressof(self.handle.contents) != ctypes.addressof(value.handle.contents) + + @property + def type(self): + """Symbol type (read-only)""" + return SymbolType(core.BNGetSymbolType(self.handle)) + + @property + def binding(self): + """Symbol binding (read-only)""" + return SymbolBinding(core.BNGetSymbolBinding(self.handle)) + + @property + def namespace(self): + """Symbol namespace (read-only)""" + ns = core.BNGetSymbolNameSpace(self.handle) + result = NameSpace._from_core_struct(ns) + core.BNFreeNameSpace(ns) + return result + + @property + def name(self): + """Symbol name (read-only)""" + return core.BNGetSymbolRawName(self.handle) + + @property + def short_name(self): + """Symbol short name (read-only)""" + return core.BNGetSymbolShortName(self.handle) + + @property + def full_name(self): + """Symbol full name (read-only)""" + return core.BNGetSymbolFullName(self.handle) + + @property + def raw_name(self): + """Symbol raw name (read-only)""" + return core.BNGetSymbolRawName(self.handle) + + @property + def address(self): + """Symbol address (read-only)""" + return core.BNGetSymbolAddress(self.handle) + + @property + def auto(self): + return core.BNIsSymbolAutoDefined(self.handle) + + def __repr__(self): + return "<%s: \"%s\" @ %#x>" % (self.type, self.full_name, self.address) + + def __setattr__(self, name, value): + try: + object.__setattr__(self, name, value) + except AttributeError: + raise AttributeError("attribute '%s' is read only" % name)
+ + +
[docs]class FunctionParameter(object): +
[docs] def __init__(self, param_type, name = "", location = None): + self.type = param_type + self.name = name + self.location = location
+ + def __repr__(self): + if (self.location is not None) and (self.location.name != self.name): + return "%s %s%s @ %s" % (self.type.get_string_before_name(), self.name, self.type.get_string_after_name(), self.location.name) + return "%s %s%s" % (self.type.get_string_before_name(), self.name, self.type.get_string_after_name())
+ + +
[docs]class Type(object): +
[docs] def __init__(self, handle, platform = None, confidence = max_confidence): + self.handle = handle + self.confidence = confidence + self.platform = platform
+ + def __del__(self): + core.BNFreeType(self.handle) + + def __eq__(self, value): + if not isinstance(value, Type): + return False + return core.BNTypesEqual(self.handle, value.handle) + + def __ne__(self, value): + if not isinstance(value, Type): + return True + return core.BNTypesNotEqual(self.handle, value.handle) + + @property + def type_class(self): + """Type class (read-only)""" + return TypeClass(core.BNGetTypeClass(self.handle)) + + @property + def width(self): + """Type width (read-only)""" + return core.BNGetTypeWidth(self.handle) + + @property + def alignment(self): + """Type alignment (read-only)""" + return core.BNGetTypeAlignment(self.handle) + + @property + def signed(self): + """Wether type is signed (read-only)""" + result = core.BNIsTypeSigned(self.handle) + return BoolWithConfidence(result.value, confidence = result.confidence) + + @property + def const(self): + """Whether type is const (read/write)""" + result = core.BNIsTypeConst(self.handle) + return BoolWithConfidence(result.value, confidence = result.confidence) + + @const.setter + def const(self, value): + bc = core.BNBoolWithConfidence() + bc.value = bool(value) + if hasattr(value, 'confidence'): + bc.confidence = value.confidence + else: + bc.confidence = max_confidence + core.BNTypeSetConst(self.handle, bc) + + @property + def modified(self): + """Whether type is modified (read-only)""" + return core.BNIsTypeFloatingPoint(self.handle) + + @property + def target(self): + """Target (read-only)""" + result = core.BNGetChildType(self.handle) + if not result.type: + return None + return Type(result.type, platform = self.platform, confidence = result.confidence) + + @property + def element_type(self): + """Target (read-only)""" + result = core.BNGetChildType(self.handle) + if not result.type: + return None + return Type(result.type, platform = self.platform, confidence = result.confidence) + + @property + def return_value(self): + """Return value (read-only)""" + result = core.BNGetChildType(self.handle) + if not result.type: + return None + return Type(result.type, platform = self.platform, confidence = result.confidence) + + @property + def calling_convention(self): + """Calling convention (read-only)""" + result = core.BNGetTypeCallingConvention(self.handle) + if not result.convention: + return None + return binaryninja.callingconvention.CallingConvention(None, handle = result.convention, confidence = result.confidence) + + @property + def parameters(self): + """Type parameters list (read-only)""" + count = ctypes.c_ulonglong() + params = core.BNGetTypeParameters(self.handle, count) + result = [] + for i in range(0, count.value): + param_type = Type(core.BNNewTypeReference(params[i].type), platform = self.platform, confidence = params[i].typeConfidence) + if params[i].defaultLocation: + param_location = None + else: + name = params[i].name + if (params[i].location.type == VariableSourceType.RegisterVariableSourceType) and (self.platform is not None): + name = self.platform.arch.get_reg_name(params[i].location.storage) + elif params[i].location.type == VariableSourceType.StackVariableSourceType: + name = "arg_%x" % params[i].location.storage + param_location = binaryninja.function.Variable(None, params[i].location.type, params[i].location.index, + params[i].location.storage, name, param_type) + result.append(FunctionParameter(param_type, params[i].name, param_location)) + core.BNFreeTypeParameterList(params, count.value) + return result + + @property + def has_variable_arguments(self): + """Whether type has variable arguments (read-only)""" + result = core.BNTypeHasVariableArguments(self.handle) + return BoolWithConfidence(result.value, confidence = result.confidence) + + @property + def can_return(self): + """Whether type can return (read-only)""" + result = core.BNFunctionTypeCanReturn(self.handle) + return BoolWithConfidence(result.value, confidence = result.confidence) + + @property + def structure(self): + """Structure of the type (read-only)""" + result = core.BNGetTypeStructure(self.handle) + if result is None: + return None + return Structure(result) + + @property + def enumeration(self): + """Type enumeration (read-only)""" + result = core.BNGetTypeEnumeration(self.handle) + if result is None: + return None + return Enumeration(result) + + @property + def named_type_reference(self): + """Reference to a named type (read-only)""" + result = core.BNGetTypeNamedTypeReference(self.handle) + if result is None: + return None + return NamedTypeReference(handle = result) + + @property + def count(self): + """Type count (read-only)""" + return core.BNGetTypeElementCount(self.handle) + + @property + def offset(self): + """Offset into structure (read-only)""" + return core.BNGetTypeOffset(self.handle) + + @property + def stack_adjustment(self): + """Stack adjustment for function (read-only)""" + result = core.BNGetTypeStackAdjustment(self.handle) + return SizeWithConfidence(result.value, confidence = result.confidence) + + def __len__(self): + return self.width + + def __str__(self): + platform = None + if self.platform is not None: + platform = self.platform.handle + return core.BNGetTypeString(self.handle, platform) + + def __repr__(self): + if self.confidence < max_confidence: + return "<type: %s, %d%% confidence>" % (str(self), (self.confidence * 100) // max_confidence) + return "<type: %s>" % str(self) + +
[docs] def get_string_before_name(self): + platform = None + if self.platform is not None: + platform = self.platform.handle + return core.BNGetTypeStringBeforeName(self.handle, platform)
+ +
[docs] def get_string_after_name(self): + platform = None + if self.platform is not None: + platform = self.platform.handle + return core.BNGetTypeStringAfterName(self.handle, platform)
+ + @property + def tokens(self): + """Type string as a list of tokens (read-only)""" + return self.get_tokens() + +
[docs] def get_tokens(self, base_confidence = max_confidence): + count = ctypes.c_ulonglong() + platform = None + if self.platform is not None: + platform = self.platform.handle + tokens = core.BNGetTypeTokens(self.handle, platform, base_confidence, count) + result = binaryninja.function.InstructionTextToken.get_instruction_lines(tokens, count.value) + core.BNFreeInstructionText(tokens, count.value) + return result
+ +
[docs] def get_tokens_before_name(self, base_confidence = max_confidence): + count = ctypes.c_ulonglong() + platform = None + if self.platform is not None: + platform = self.platform.handle + tokens = core.BNGetTypeTokensBeforeName(self.handle, platform, base_confidence, count) + result = binaryninja.function.InstructionTextToken.get_instruction_lines(tokens, count.value) + core.BNFreeInstructionText(tokens, count.value) + return result
+ +
[docs] def get_tokens_after_name(self, base_confidence = max_confidence): + count = ctypes.c_ulonglong() + platform = None + if self.platform is not None: + platform = self.platform.handle + tokens = core.BNGetTypeTokensAfterName(self.handle, platform, base_confidence, count) + result = binaryninja.function.InstructionTextToken.get_instruction_lines(tokens, count.value) + core.BNFreeInstructionText(tokens, count.value) + return result
+ +
[docs] @classmethod + def void(cls): + return Type(core.BNCreateVoidType())
+ +
[docs] @classmethod + def bool(self): + return Type(core.BNCreateBoolType())
+ +
[docs] @classmethod + def char(self): + return Type.int(1, True)
+ +
[docs] @classmethod + def int(self, width, sign = None, altname=""): + """ + ``int`` class method for creating an int Type. + + :param int width: width of the integer in bytes + :param bool sign: optional variable representing signedness + :param string altname: alternate name for type + """ + if sign is None: + sign = BoolWithConfidence(True, confidence = 0) + elif not isinstance(sign, BoolWithConfidence): + sign = BoolWithConfidence(sign) + + sign_conf = core.BNBoolWithConfidence() + sign_conf.value = sign.value + sign_conf.confidence = sign.confidence + + return Type(core.BNCreateIntegerType(width, sign_conf, altname))
+ +
[docs] @classmethod + def float(self, width, altname=""): + """ + ``float`` class method for creating an floating point Types. + + :param int width: width of the floating point number in bytes + :param string altname: alternate name for type + """ + return Type(core.BNCreateFloatType(width, altname))
+ +
[docs] @classmethod + def structure_type(self, structure_type): + return Type(core.BNCreateStructureType(structure_type.handle))
+ +
[docs] @classmethod + def named_type(self, named_type, width = 0, align = 1): + return Type(core.BNCreateNamedTypeReference(named_type.handle, width, align))
+ +
[docs] @classmethod + def named_type_from_type_and_id(self, type_id, name, t): + name = QualifiedName(name)._get_core_struct() + if t is not None: + t = t.handle + return Type(core.BNCreateNamedTypeReferenceFromTypeAndId(type_id, name, t))
+ +
[docs] @classmethod + def named_type_from_type(self, name, t): + name = QualifiedName(name)._get_core_struct() + if t is not None: + t = t.handle + return Type(core.BNCreateNamedTypeReferenceFromTypeAndId("", name, t))
+ +
[docs] @classmethod + def named_type_from_registered_type(self, view, name): + name = QualifiedName(name)._get_core_struct() + return Type(core.BNCreateNamedTypeReferenceFromType(view.handle, name))
+ +
[docs] @classmethod + def enumeration_type(self, arch, e, width=None, sign=False): + if width is None: + width = arch.default_int_size + return Type(core.BNCreateEnumerationType(arch.handle, e.handle, width, sign))
+ +
[docs] @classmethod + def pointer(self, arch, t, const=None, volatile=None, ref_type=None): + if const is None: + const = BoolWithConfidence(False, confidence = 0) + elif not isinstance(const, BoolWithConfidence): + const = BoolWithConfidence(const) + + if volatile is None: + volatile = BoolWithConfidence(False, confidence = 0) + elif not isinstance(volatile, BoolWithConfidence): + volatile = BoolWithConfidence(volatile) + + if ref_type is None: + ref_type = ReferenceType.PointerReferenceType + + type_conf = core.BNTypeWithConfidence() + type_conf.type = t.handle + type_conf.confidence = t.confidence + + const_conf = core.BNBoolWithConfidence() + const_conf.value = const.value + const_conf.confidence = const.confidence + + volatile_conf = core.BNBoolWithConfidence() + volatile_conf.value = volatile.value + volatile_conf.confidence = volatile.confidence + + return Type(core.BNCreatePointerType(arch.handle, type_conf, const_conf, volatile_conf, ref_type))
+ +
[docs] @classmethod + def array(self, t, count): + type_conf = core.BNTypeWithConfidence() + type_conf.type = t.handle + type_conf.confidence = t.confidence + return Type(core.BNCreateArrayType(type_conf, count))
+ +
[docs] @classmethod + def function(self, ret, params, calling_convention=None, variable_arguments=None, stack_adjust=None): + """ + ``function`` class method for creating an function Type. + + :param Type ret: width of the integer in bytes + :param list(Type) params: list of parameter Types + :param CallingConvention calling_convention: optional argument for function calling convention + :param bool variable_arguments: optional argument for functions that have a variable number of arguments + """ + param_buf = (core.BNFunctionParameter * len(params))() + for i in range(0, len(params)): + if isinstance(params[i], Type): + param_buf[i].name = "" + param_buf[i].type = params[i].handle + param_buf[i].typeConfidence = params[i].confidence + param_buf[i].defaultLocation = True + elif isinstance(params[i], FunctionParameter): + param_buf[i].name = params[i].name + param_buf[i].type = params[i].type.handle + param_buf[i].typeConfidence = params[i].type.confidence + if params[i].location is None: + param_buf[i].defaultLocation = True + else: + param_buf[i].defaultLocation = False + param_buf[i].location.type = params[i].location.type + param_buf[i].location.index = params[i].location.index + param_buf[i].location.storage = params[i].location.storage + else: + param_buf[i].name = params[i][1] + param_buf[i].type = params[i][0].handle + param_buf[i].typeConfidence = params[i][0].confidence + param_buf[i].defaultLocation = True + + ret_conf = core.BNTypeWithConfidence() + ret_conf.type = ret.handle + ret_conf.confidence = ret.confidence + + conv_conf = core.BNCallingConventionWithConfidence() + if calling_convention is None: + conv_conf.convention = None + conv_conf.confidence = 0 + else: + conv_conf.convention = calling_convention.handle + conv_conf.confidence = calling_convention.confidence + + if variable_arguments is None: + variable_arguments = BoolWithConfidence(False, confidence = 0) + elif not isinstance(variable_arguments, BoolWithConfidence): + variable_arguments = BoolWithConfidence(variable_arguments) + + vararg_conf = core.BNBoolWithConfidence() + vararg_conf.value = variable_arguments.value + vararg_conf.confidence = variable_arguments.confidence + + if stack_adjust is None: + stack_adjust = SizeWithConfidence(0, confidence = 0) + elif not isinstance(stack_adjust, SizeWithConfidence): + stack_adjust = SizeWithConfidence(stack_adjust) + + stack_adjust_conf = core.BNOffsetWithConfidence() + stack_adjust_conf.value = stack_adjust.value + stack_adjust_conf.confidence = stack_adjust.confidence + + return Type(core.BNCreateFunctionType(ret_conf, conv_conf, param_buf, len(params), + vararg_conf, stack_adjust_conf))
+ +
[docs] @classmethod + def generate_auto_type_id(self, source, name): + name = QualifiedName(name)._get_core_struct() + return core.BNGenerateAutoTypeId(source, name)
+ +
[docs] @classmethod + def generate_auto_demangled_type_id(self, name): + name = QualifiedName(name)._get_core_struct() + return core.BNGenerateAutoDemangledTypeId(name)
+ +
[docs] @classmethod + def get_auto_demangled_type_id_source(self): + return core.BNGetAutoDemangledTypeIdSource()
+ +
[docs] def with_confidence(self, confidence): + return Type(handle = core.BNNewTypeReference(self.handle), platform = self.platform, confidence = confidence)
+ + def __setattr__(self, name, value): + try: + object.__setattr__(self, name, value) + except AttributeError: + raise AttributeError("attribute '%s' is read only" % name)
+ + +
[docs]class BoolWithConfidence(object): +
[docs] def __init__(self, value, confidence = max_confidence): + self.value = value + self.confidence = confidence
+ + def __str__(self): + return str(self.value) + + def __repr__(self): + return repr(self.value) + + def __bool__(self): + return self.value + + def __nonzero__(self): + return self.value
+ + +
[docs]class SizeWithConfidence(object): +
[docs] def __init__(self, value, confidence = max_confidence): + self.value = value + self.confidence = confidence
+ + def __str__(self): + return str(self.value) + + def __repr__(self): + return repr(self.value) + + def __int__(self): + return self.value
+ + +
[docs]class RegisterStackAdjustmentWithConfidence(object): +
[docs] def __init__(self, value, confidence = max_confidence): + self.value = value + self.confidence = confidence
+ + def __str__(self): + return str(self.value) + + def __repr__(self): + return repr(self.value) + + def __int__(self): + return self.value
+ + +
[docs]class RegisterSet(object): +
[docs] def __init__(self, reg_list, confidence = max_confidence): + self.regs = reg_list + self.confidence = confidence
+ + def __repr__(self): + return repr(self.regs) + + def __iter__(self): + for reg in self.regs: + yield reg + + def __getitem__(self, idx): + return self.regs[idx] + + def __len__(self): + return len(self.regs) + +
[docs] def with_confidence(self, confidence): + return RegisterSet(list(self.regs), confidence = confidence)
+ + +
[docs]class ReferenceTypeWithConfidence(object): +
[docs] def __init__(self, value, confidence = max_confidence): + self.value = value + self.confidence = confidence
+ + def __str__(self): + return str(self.value) + + def __repr__(self): + return repr(self.value)
+ + +
[docs]class NamedTypeReference(object): +
[docs] def __init__(self, type_class = NamedTypeReferenceClass.UnknownNamedTypeClass, type_id = None, name = None, handle = None): + if handle is None: + self.handle = core.BNCreateNamedType() + core.BNSetTypeReferenceClass(self.handle, type_class) + if type_id is not None: + core.BNSetTypeReferenceId(self.handle, type_id) + if name is not None: + name = QualifiedName(name)._get_core_struct() + core.BNSetTypeReferenceName(self.handle, name) + else: + self.handle = handle
+ + def __del__(self): + core.BNFreeNamedTypeReference(self.handle) + + def __eq__(self, value): + if not isinstance(value, NamedTypeReference): + return False + return ctypes.addressof(self.handle.contents) == ctypes.addressof(value.handle.contents) + + def __ne__(self, value): + if not isinstance(value, NamedTypeReference): + return True + return ctypes.addressof(self.handle.contents) != ctypes.addressof(value.handle.contents) + + @property + def type_class(self): + return NamedTypeReferenceClass(core.BNGetTypeReferenceClass(self.handle)) + + @type_class.setter + def type_class(self, value): + core.BNSetTypeReferenceClass(self.handle, value) + + @property + def type_id(self): + return core.BNGetTypeReferenceId(self.handle) + + @type_id.setter + def type_id(self, value): + core.BNSetTypeReferenceId(self.handle, value) + + @property + def name(self): + name = core.BNGetTypeReferenceName(self.handle) + result = QualifiedName._from_core_struct(name) + core.BNFreeQualifiedName(name) + return result + + @name.setter + def name(self, value): + value = QualifiedName(value)._get_core_struct() + core.BNSetTypeReferenceName(self.handle, value) + + def __repr__(self): + if self.type_class == NamedTypeReferenceClass.TypedefNamedTypeClass: + return "<named type: typedef %s>" % str(self.name) + if self.type_class == NamedTypeReferenceClass.StructNamedTypeClass: + return "<named type: struct %s>" % str(self.name) + if self.type_class == NamedTypeReferenceClass.UnionNamedTypeClass: + return "<named type: union %s>" % str(self.name) + if self.type_class == NamedTypeReferenceClass.EnumNamedTypeClass: + return "<named type: enum %s>" % str(self.name) + return "<named type: unknown %s>" % str(self.name) + +
[docs] @classmethod + def generate_auto_type_ref(self, type_class, source, name): + type_id = Type.generate_auto_type_id(source, name) + return NamedTypeReference(type_class, type_id, name)
+ +
[docs] @classmethod + def generate_auto_demangled_type_ref(self, type_class, name): + type_id = Type.generate_auto_demangled_type_id(name) + return NamedTypeReference(type_class, type_id, name)
+ + +
[docs]class StructureMember(object): +
[docs] def __init__(self, t, name, offset): + self.type = t + self.name = name + self.offset = offset
+ + def __repr__(self): + if len(self.name) == 0: + return "<member: %s, offset %#x>" % (str(self.type), self.offset) + return "<%s %s%s, offset %#x>" % (self.type.get_string_before_name(), self.name, + self.type.get_string_after_name(), self.offset)
+ + +
[docs]class Structure(object): +
[docs] def __init__(self, handle=None): + if handle is None: + self.handle = core.BNCreateStructure() + else: + self.handle = handle
+ + def __del__(self): + core.BNFreeStructure(self.handle) + + def __eq__(self, value): + if not isinstance(value, Structure): + return False + return ctypes.addressof(self.handle.contents) == ctypes.addressof(value.handle.contents) + + def __ne__(self, value): + if not isinstance(value, Structure): + return True + return ctypes.addressof(self.handle.contents) != ctypes.addressof(value.handle.contents) + + @property + def members(self): + """Structure member list (read-only)""" + count = ctypes.c_ulonglong() + members = core.BNGetStructureMembers(self.handle, count) + result = [] + for i in range(0, count.value): + result.append(StructureMember(Type(core.BNNewTypeReference(members[i].type), confidence = members[i].typeConfidence), + members[i].name, members[i].offset)) + core.BNFreeStructureMemberList(members, count.value) + return result + + @property + def width(self): + """Structure width""" + return core.BNGetStructureWidth(self.handle) + + @width.setter + def width(self, new_width): + core.BNSetStructureWidth(self.handle, new_width) + + @property + def alignment(self): + """Structure alignment""" + return core.BNGetStructureAlignment(self.handle) + + @alignment.setter + def alignment(self, align): + core.BNSetStructureAlignment(self.handle, align) + + @property + def packed(self): + return core.BNIsStructurePacked(self.handle) + + @packed.setter + def packed(self, value): + core.BNSetStructurePacked(self.handle, value) + + @property + def union(self): + return core.BNIsStructureUnion(self.handle) + + @property + def type(self): + return StructureType(core.BNGetStructureType(self.handle)) + + @type.setter + def type(self, value): + core.BNSetStructureType(self.handle, value) + + def __setattr__(self, name, value): + try: + object.__setattr__(self, name, value) + except AttributeError: + raise AttributeError("attribute '%s' is read only" % name) + + def __repr__(self): + return "<struct: size %#x>" % self.width + +
[docs] def append(self, t, name = ""): + tc = core.BNTypeWithConfidence() + tc.type = t.handle + tc.confidence = t.confidence + core.BNAddStructureMember(self.handle, tc, name)
+ +
[docs] def insert(self, offset, t, name = ""): + tc = core.BNTypeWithConfidence() + tc.type = t.handle + tc.confidence = t.confidence + core.BNAddStructureMemberAtOffset(self.handle, tc, name, offset)
+ +
[docs] def remove(self, i): + core.BNRemoveStructureMember(self.handle, i)
+ +
[docs] def replace(self, i, t, name = ""): + tc = core.BNTypeWithConfidence() + tc.type = t.handle + tc.confidence = t.confidence + core.BNReplaceStructureMember(self.handle, i, tc, name)
+ + +
[docs]class EnumerationMember(object): +
[docs] def __init__(self, name, value, default): + self.name = name + self.value = value + self.default = default
+ + def __repr__(self): + return "<%s = %#x>" % (self.name, self.value)
+ + +
[docs]class Enumeration(object): +
[docs] def __init__(self, handle=None): + if handle is None: + self.handle = core.BNCreateEnumeration() + else: + self.handle = handle
+ + def __del__(self): + core.BNFreeEnumeration(self.handle) + + def __eq__(self, value): + if not isinstance(value, Enumeration): + return False + return ctypes.addressof(self.handle.contents) == ctypes.addressof(value.handle.contents) + + def __ne__(self, value): + if not isinstance(value, Enumeration): + return True + return ctypes.addressof(self.handle.contents) != ctypes.addressof(value.handle.contents) + + @property + def members(self): + """Enumeration member list (read-only)""" + count = ctypes.c_ulonglong() + members = core.BNGetEnumerationMembers(self.handle, count) + result = [] + for i in range(0, count.value): + result.append(EnumerationMember(members[i].name, members[i].value, members[i].isDefault)) + core.BNFreeEnumerationMemberList(members, count.value) + return result + + def __setattr__(self, name, value): + try: + object.__setattr__(self, name, value) + except AttributeError: + raise AttributeError("attribute '%s' is read only" % name) + + def __repr__(self): + return "<enum: %s>" % repr(self.members) + +
[docs] def append(self, name, value = None): + if value is None: + core.BNAddEnumerationMember(self.handle, name) + else: + core.BNAddEnumerationMemberWithValue(self.handle, name, value)
+ +
[docs] def remove(self, i): + core.BNRemoveEnumerationMember(self.handle, i)
+ +
[docs] def replace(self, i, name, value): + core.BNReplaceEnumerationMember(self.handle, i, name, value)
+ + +
[docs]class TypeParserResult(object): +
[docs] def __init__(self, types, variables, functions): + self.types = types + self.variables = variables + self.functions = functions
+ + def __repr__(self): + return "<types: %s, variables: %s, functions: %s>" % (self.types, self.variables, self.functions)
+ + +
[docs]def preprocess_source(source, filename=None, include_dirs=[]): + """ + ``preprocess_source`` run the C preprocessor on the given source or source filename. + + :param str source: source to pre-process + :param str filename: optional filename to pre-process + :param list(str) include_dirs: list of string directories to use as include directories. + :return: returns a tuple of (preprocessed_source, error_string) + :rtype: tuple(str,str) + :Example: + + >>> source = "#define TEN 10\\nint x[TEN];\\n" + >>> preprocess_source(source) + ('#line 1 "input"\\n\\n#line 2 "input"\\n int x [ 10 ] ;\\n', '') + >>> + """ + if filename is None: + filename = "input" + dir_buf = (ctypes.c_char_p * len(include_dirs))() + for i in range(0, len(include_dirs)): + dir_buf[i] = include_dirs[i].encode('charmap') + output = ctypes.c_char_p() + errors = ctypes.c_char_p() + result = core.BNPreprocessSource(source, filename, output, errors, dir_buf, len(include_dirs)) + output_str = output.value + error_str = errors.value + core.BNFreeString(ctypes.cast(output, ctypes.POINTER(ctypes.c_byte))) + core.BNFreeString(ctypes.cast(errors, ctypes.POINTER(ctypes.c_byte))) + if result: + return (output_str, error_str) + return (None, error_str)
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/undoaction.html b/personal/api-docs/_modules/binaryninja/undoaction.html new file mode 100644 index 0000000..3327992 --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/undoaction.html @@ -0,0 +1,344 @@ + + + + + + + + + + + binaryninja.undoaction — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.undoaction

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+import traceback
+import json
+import ctypes
+
+# Binary Ninja components
+from binaryninja import _binaryninjacore as core
+from binaryninja.enums import ActionType
+import binaryninja
+
+
+
[docs]class UndoAction(object): + name = None + action_type = None + _registered = False + _registered_cb = None + +
[docs] def __init__(self, view): + self._cb = core.BNUndoAction() + if not self.__class__._registered: + raise TypeError("undo action type not registered") + action_type = self.__class__.action_type + if isinstance(action_type, str): + self._cb.type = ActionType[action_type] + else: + self._cb.type = action_type + self._cb.context = 0 + self._cb.undo = self._cb.undo.__class__(self._undo) + self._cb.redo = self._cb.redo.__class__(self._redo) + self._cb.serialize = self._cb.serialize.__class__(self._serialize) + self.view = view
+ +
[docs] @classmethod + def register(cls): + binaryninja._init_plugins() + if cls.name is None: + raise ValueError("undo action 'name' not defined") + if cls.action_type is None: + raise ValueError("undo action 'action_type' not defined") + cb_type = ctypes.CFUNCTYPE(ctypes.c_bool, ctypes.c_void_p, ctypes.c_char_p, ctypes.POINTER(core.BNUndoAction)) + cls._registered_cb = cb_type(cls._deserialize) + core.BNRegisterUndoActionType(cls.name, 0, cls._registered_cb) + cls._registered = True
+ + @classmethod + def _deserialize(cls, ctxt, data, result): + try: + action = cls.deserialize(json.loads(data)) + if action is None: + return False + result.context = action._cb.context + result.undo = action._cb.undo + result.redo = action._cb.redo + result.serialize = action._cb.serialize + return True + except: + log.log_error(traceback.format_exc()) + return False + + def _undo(self, ctxt, view): + try: + self.undo() + except: + log.log_error(traceback.format_exc()) + return False + + def _redo(self, ctxt, view): + try: + self.redo() + except: + log.log_error(traceback.format_exc()) + return False + + def _serialize(self, ctxt): + try: + return json.dumps(self.serialize()) + except: + log.log_error(traceback.format_exc()) + return "null"
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/binaryninja/update.html b/personal/api-docs/_modules/binaryninja/update.html new file mode 100644 index 0000000..6439549 --- /dev/null +++ b/personal/api-docs/_modules/binaryninja/update.html @@ -0,0 +1,514 @@ + + + + + + + + + + + binaryninja.update — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for binaryninja.update

+# Copyright (c) 2015-2019 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+import traceback
+import ctypes
+
+# Binary Ninja components
+from binaryninja import _binaryninjacore as core
+
+import binaryninja
+from binaryninja.enums import UpdateResult
+
+# 2-3 compatibility
+from binaryninja import range
+from binaryninja import with_metaclass
+
+
+class _UpdateChannelMetaClass(type):
+	@property
+	def list(self):
+		binaryninja._init_plugins()
+		count = ctypes.c_ulonglong()
+		errors = ctypes.c_char_p()
+		channels = core.BNGetUpdateChannels(count, errors)
+		if errors:
+			error_str = errors.value
+			core.BNFreeString(ctypes.cast(errors, ctypes.POINTER(ctypes.c_byte)))
+			raise IOError(error_str)
+		result = []
+		for i in range(0, count.value):
+			result.append(UpdateChannel(channels[i].name, channels[i].description, channels[i].latestVersion))
+		core.BNFreeUpdateChannelList(channels, count.value)
+		return result
+
+	@property
+	def active(self):
+		return core.BNGetActiveUpdateChannel()
+
+	@active.setter
+	def active(self, value):
+		return core.BNSetActiveUpdateChannel(value)
+
+	def __iter__(self):
+		binaryninja._init_plugins()
+		count = ctypes.c_ulonglong()
+		errors = ctypes.c_char_p()
+		channels = core.BNGetUpdateChannels(count, errors)
+		if errors:
+			error_str = errors.value
+			core.BNFreeString(ctypes.cast(errors, ctypes.POINTER(ctypes.c_byte)))
+			raise IOError(error_str)
+		try:
+			for i in range(0, count.value):
+				yield UpdateChannel(channels[i].name, channels[i].description, channels[i].latestVersion)
+		finally:
+			core.BNFreeUpdateChannelList(channels, count.value)
+
+	def __setattr__(self, name, value):
+		try:
+			type.__setattr__(self, name, value)
+		except AttributeError:
+			raise AttributeError("attribute '%s' is read only" % name)
+
+	def __getitem__(cls, name):
+		binaryninja._init_plugins()
+		count = ctypes.c_ulonglong()
+		errors = ctypes.c_char_p()
+		channels = core.BNGetUpdateChannels(count, errors)
+		if errors:
+			error_str = errors.value
+			core.BNFreeString(ctypes.cast(errors, ctypes.POINTER(ctypes.c_byte)))
+			raise IOError(error_str)
+		result = None
+		for i in range(0, count.value):
+			if channels[i].name == str(name):
+				result = UpdateChannel(channels[i].name, channels[i].description, channels[i].latestVersion)
+				break
+		core.BNFreeUpdateChannelList(channels, count.value)
+		if result is None:
+			raise KeyError("'%s' is not a valid channel" % str(name))
+		return result
+
+
+
[docs]class UpdateProgressCallback(object): +
[docs] def __init__(self, func): + self.cb = ctypes.CFUNCTYPE(ctypes.c_bool, ctypes.c_void_p, ctypes.c_ulonglong, ctypes.c_ulonglong)(self.callback) + self.func = func
+ +
[docs] def callback(self, ctxt, progress, total): + try: + if self.func is not None: + return self.func(progress, total) + return True + except: + log.log_error(traceback.format_exc())
+ + +
[docs]class UpdateChannel(with_metaclass(_UpdateChannelMetaClass, object)): +
[docs] def __init__(self, name, desc, ver): + self.name = name + self.description = desc + self.latest_version_num = ver
+ + @property + def versions(self): + """List of versions (read-only)""" + count = ctypes.c_ulonglong() + errors = ctypes.c_char_p() + versions = core.BNGetUpdateChannelVersions(self.name, count, errors) + if errors: + error_str = errors.value + core.BNFreeString(ctypes.cast(errors, ctypes.POINTER(ctypes.c_byte))) + raise IOError(error_str) + result = [] + for i in range(0, count.value): + result.append(UpdateVersion(self, versions[i].version, versions[i].notes, versions[i].time)) + core.BNFreeUpdateChannelVersionList(versions, count.value) + return result + + @property + def latest_version(self): + """Latest version (read-only)""" + count = ctypes.c_ulonglong() + errors = ctypes.c_char_p() + versions = core.BNGetUpdateChannelVersions(self.name, count, errors) + if errors: + error_str = errors.value + core.BNFreeString(ctypes.cast(errors, ctypes.POINTER(ctypes.c_byte))) + raise IOError(error_str) + result = None + for i in range(0, count.value): + if versions[i].version == self.latest_version_num: + result = UpdateVersion(self, versions[i].version, versions[i].notes, versions[i].time) + break + core.BNFreeUpdateChannelVersionList(versions, count.value) + return result + + @property + def updates_available(self): + """Whether updates are available (read-only)""" + errors = ctypes.c_char_p() + result = core.BNAreUpdatesAvailable(self.name, None, None, errors) + if errors: + error_str = errors.value + core.BNFreeString(ctypes.cast(errors, ctypes.POINTER(ctypes.c_byte))) + raise IOError(error_str) + return result + + def __setattr__(self, name, value): + try: + object.__setattr__(self, name, value) + except AttributeError: + raise AttributeError("attribute '%s' is read only" % name) + + def __repr__(self): + return "<channel: %s>" % self.name + + def __str__(self): + return self.name + +
[docs] def update_to_latest(self, progress = None): + cb = UpdateProgressCallback(progress) + errors = ctypes.c_char_p() + result = core.BNUpdateToLatestVersion(self.name, errors, cb.cb, None) + if errors: + error_str = errors.value + core.BNFreeString(ctypes.cast(errors, ctypes.POINTER(ctypes.c_byte))) + raise IOError(error_str) + return UpdateResult(result)
+ + +
[docs]class UpdateVersion(object): +
[docs] def __init__(self, channel, ver, notes, t): + self.channel = channel + self.version = ver + self.notes = notes + self.time = t
+ + def __repr__(self): + return "<version: %s>" % self.version + + def __str__(self): + return self.version + +
[docs] def update(self, progress = None): + cb = UpdateProgressCallback(progress) + errors = ctypes.c_char_p() + result = core.BNUpdateToVersion(self.channel.name, self.version, errors, cb.cb, None) + if errors: + error_str = errors.value + core.BNFreeString(ctypes.cast(errors, ctypes.POINTER(ctypes.c_byte))) + raise IOError(error_str) + return UpdateResult(result)
+ + +
[docs]def are_auto_updates_enabled(): + """ + ``are_auto_updates_enabled`` queries if auto updates are enabled. + + :return: boolean True if auto updates are enabled. False if they are disabled. + :rtype: bool + """ + return core.BNAreAutoUpdatesEnabled()
+ + +
[docs]def set_auto_updates_enabled(enabled): + """ + ``set_auto_updates_enabled`` sets auto update enabled status. + + :param bool enabled: True to enable update, False to disable updates. + :rtype: None + """ + core.BNSetAutoUpdatesEnabled(enabled)
+ + +
[docs]def get_time_since_last_update_check(): + """ + ``get_time_since_last_update_check`` returns the time stamp for the last time updates were checked. + + :return: time stacmp for last update check + :rtype: int + """ + return core.BNGetTimeSinceLastUpdateCheck()
+ + +
[docs]def is_update_installation_pending(): + """ + ``is_update_installation_pending`` whether an update has been downloaded and is waiting installation + + :return: boolean True if an update is pending, false if no update is pending + :rtype: bool + """ + return core.BNIsUpdateInstallationPending()
+ + +
[docs]def install_pending_update(): + """ + ``install_pending_update`` installs any pending updates + + :rtype: None + """ + errors = ctypes.c_char_p() + core.BNInstallPendingUpdate(errors) + if errors: + error_str = errors.value + core.BNFreeString(ctypes.cast(errors, ctypes.POINTER(ctypes.c_byte))) + raise IOError(error_str)
+ + +
[docs]def updates_checked(): + core.BNUpdatesChecked()
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_modules/collections.html b/personal/api-docs/_modules/collections.html new file mode 100644 index 0000000..a2ef749 --- /dev/null +++ b/personal/api-docs/_modules/collections.html @@ -0,0 +1,986 @@ + + + + + + + + + + + collections — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +

Source code for collections

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

Source code for urllib2

+"""An extensible library for opening URLs using a variety of protocols
+
+The simplest way to use this module is to call the urlopen function,
+which accepts a string containing a URL or a Request object (described
+below).  It opens the URL and returns the results as file-like
+object; the returned object has some extra methods described below.
+
+The OpenerDirector manages a collection of Handler objects that do
+all the actual work.  Each Handler implements a particular protocol or
+option.  The OpenerDirector is a composite object that invokes the
+Handlers needed to open the requested URL.  For example, the
+HTTPHandler performs HTTP GET and POST requests and deals with
+non-error returns.  The HTTPRedirectHandler automatically deals with
+HTTP 301, 302, 303 and 307 redirect errors, and the HTTPDigestAuthHandler
+deals with digest authentication.
+
+urlopen(url, data=None) -- Basic usage is the same as original
+urllib.  pass the url and optionally data to post to an HTTP URL, and
+get a file-like object back.  One difference is that you can also pass
+a Request instance instead of URL.  Raises a URLError (subclass of
+IOError); for HTTP errors, raises an HTTPError, which can also be
+treated as a valid response.
+
+build_opener -- Function that creates a new OpenerDirector instance.
+Will install the default handlers.  Accepts one or more Handlers as
+arguments, either instances or Handler classes that it will
+instantiate.  If one of the argument is a subclass of the default
+handler, the argument will be installed instead of the default.
+
+install_opener -- Installs a new opener as the default opener.
+
+objects of interest:
+
+OpenerDirector -- Sets up the User Agent as the Python-urllib client and manages
+the Handler classes, while dealing with requests and responses.
+
+Request -- An object that encapsulates the state of a request.  The
+state can be as simple as the URL.  It can also include extra HTTP
+headers, e.g. a User-Agent.
+
+BaseHandler --
+
+exceptions:
+URLError -- A subclass of IOError, individual protocols have their own
+specific subclass.
+
+HTTPError -- Also a valid HTTP response, so you can treat an HTTP error
+as an exceptional event or valid response.
+
+internals:
+BaseHandler and parent
+_call_chain conventions
+
+Example usage:
+
+import urllib2
+
+# set up authentication info
+authinfo = urllib2.HTTPBasicAuthHandler()
+authinfo.add_password(realm='PDQ Application',
+                      uri='https://mahler:8092/site-updates.py',
+                      user='klem',
+                      passwd='geheim$parole')
+
+proxy_support = urllib2.ProxyHandler({"http" : "http://ahad-haam:3128"})
+
+# build a new opener that adds authentication and caching FTP handlers
+opener = urllib2.build_opener(proxy_support, authinfo, urllib2.CacheFTPHandler)
+
+# install it
+urllib2.install_opener(opener)
+
+f = urllib2.urlopen('http://www.python.org/')
+
+
+"""
+
+# XXX issues:
+# If an authentication error handler that tries to perform
+# authentication for some reason but fails, how should the error be
+# signalled?  The client needs to know the HTTP error code.  But if
+# the handler knows that the problem was, e.g., that it didn't know
+# that hash algo that requested in the challenge, it would be good to
+# pass that information along to the client, too.
+# ftp errors aren't handled cleanly
+# check digest against correct (i.e. non-apache) implementation
+
+# Possible extensions:
+# complex proxies  XXX not sure what exactly was meant by this
+# abstract factory for opener
+
+import base64
+import hashlib
+import httplib
+import mimetools
+import os
+import posixpath
+import random
+import re
+import socket
+import sys
+import time
+import urlparse
+import bisect
+import warnings
+
+try:
+    from cStringIO import StringIO
+except ImportError:
+    from StringIO import StringIO
+
+# check for SSL
+try:
+    import ssl
+except ImportError:
+    _have_ssl = False
+else:
+    _have_ssl = True
+
+from urllib import (unwrap, unquote, splittype, splithost, quote,
+     addinfourl, splitport, splittag, toBytes,
+     splitattr, ftpwrapper, splituser, splitpasswd, splitvalue)
+
+# support for FileHandler, proxies via environment variables
+from urllib import localhost, url2pathname, getproxies, proxy_bypass
+
+# used in User-Agent header sent
+__version__ = sys.version[:3]
+
+_opener = None
+
[docs]def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, + cafile=None, capath=None, cadefault=False, context=None): + global _opener + if cafile or capath or cadefault: + if context is not None: + raise ValueError( + "You can't pass both context and any of cafile, capath, and " + "cadefault" + ) + if not _have_ssl: + raise ValueError('SSL support not available') + context = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH, + cafile=cafile, + capath=capath) + https_handler = HTTPSHandler(context=context) + opener = build_opener(https_handler) + elif context: + https_handler = HTTPSHandler(context=context) + opener = build_opener(https_handler) + elif _opener is None: + _opener = opener = build_opener() + else: + opener = _opener + return opener.open(url, data, timeout)
+ +
[docs]def install_opener(opener): + global _opener + _opener = opener
+ +# do these error classes make sense? +# make sure all of the IOError stuff is overridden. we just want to be +# subtypes. + +
[docs]class URLError(IOError): + # URLError is a sub-type of IOError, but it doesn't share any of + # the implementation. need to override __init__ and __str__. + # It sets self.args for compatibility with other EnvironmentError + # subclasses, but args doesn't have the typical format with errno in + # slot 0 and strerror in slot 1. This may be better than nothing. + def __init__(self, reason): + self.args = reason, + self.reason = reason + + def __str__(self): + return '<urlopen error %s>' % self.reason
+ +class HTTPError(URLError, addinfourl): + """Raised when HTTP error occurs, but also acts like non-error return""" + __super_init = addinfourl.__init__ + + def __init__(self, url, code, msg, hdrs, fp): + self.code = code + self.msg = msg + self.hdrs = hdrs + self.fp = fp + self.filename = url + # The addinfourl classes depend on fp being a valid file + # object. In some cases, the HTTPError may not have a valid + # file object. If this happens, the simplest workaround is to + # not initialize the base classes. + if fp is not None: + self.__super_init(fp, hdrs, url, code) + + def __str__(self): + return 'HTTP Error %s: %s' % (self.code, self.msg) + + # since URLError specifies a .reason attribute, HTTPError should also + # provide this attribute. See issue13211 fo discussion. + @property + def reason(self): + return self.msg + + def info(self): + return self.hdrs + +# copied from cookielib.py +_cut_port_re = re.compile(r":\d+$") +def request_host(request): + """Return request-host, as defined by RFC 2965. + + Variation from RFC: returned value is lowercased, for convenient + comparison. + + """ + url = request.get_full_url() + host = urlparse.urlparse(url)[1] + if host == "": + host = request.get_header("Host", "") + + # remove port, if present + host = _cut_port_re.sub("", host, 1) + return host.lower() + +class Request: + + def __init__(self, url, data=None, headers={}, + origin_req_host=None, unverifiable=False): + # unwrap('<URL:type://host/path>') --> 'type://host/path' + self.__original = unwrap(url) + self.__original, self.__fragment = splittag(self.__original) + self.type = None + # self.__r_type is what's left after doing the splittype + self.host = None + self.port = None + self._tunnel_host = None + self.data = data + self.headers = {} + for key, value in headers.items(): + self.add_header(key, value) + self.unredirected_hdrs = {} + if origin_req_host is None: + origin_req_host = request_host(self) + self.origin_req_host = origin_req_host + self.unverifiable = unverifiable + + def __getattr__(self, attr): + # XXX this is a fallback mechanism to guard against these + # methods getting called in a non-standard order. this may be + # too complicated and/or unnecessary. + # XXX should the __r_XXX attributes be public? + if attr in ('_Request__r_type', '_Request__r_host'): + getattr(self, 'get_' + attr[12:])() + return self.__dict__[attr] + raise AttributeError, attr + + def get_method(self): + if self.has_data(): + return "POST" + else: + return "GET" + + # XXX these helper methods are lame + + def add_data(self, data): + self.data = data + + def has_data(self): + return self.data is not None + + def get_data(self): + return self.data + + def get_full_url(self): + if self.__fragment: + return '%s#%s' % (self.__original, self.__fragment) + else: + return self.__original + + def get_type(self): + if self.type is None: + self.type, self.__r_type = splittype(self.__original) + if self.type is None: + raise ValueError, "unknown url type: %s" % self.__original + return self.type + + def get_host(self): + if self.host is None: + self.host, self.__r_host = splithost(self.__r_type) + if self.host: + self.host = unquote(self.host) + return self.host + + def get_selector(self): + return self.__r_host + + def set_proxy(self, host, type): + if self.type == 'https' and not self._tunnel_host: + self._tunnel_host = self.host + else: + self.type = type + self.__r_host = self.__original + + self.host = host + + def has_proxy(self): + return self.__r_host == self.__original + + def get_origin_req_host(self): + return self.origin_req_host + + def is_unverifiable(self): + return self.unverifiable + + def add_header(self, key, val): + # useful for something like authentication + self.headers[key.capitalize()] = val + + def add_unredirected_header(self, key, val): + # will not be added to a redirected request + self.unredirected_hdrs[key.capitalize()] = val + + def has_header(self, header_name): + return (header_name in self.headers or + header_name in self.unredirected_hdrs) + + def get_header(self, header_name, default=None): + return self.headers.get( + header_name, + self.unredirected_hdrs.get(header_name, default)) + + def header_items(self): + hdrs = self.unredirected_hdrs.copy() + hdrs.update(self.headers) + return hdrs.items() + +class OpenerDirector: + def __init__(self): + client_version = "Python-urllib/%s" % __version__ + self.addheaders = [('User-agent', client_version)] + # self.handlers is retained only for backward compatibility + self.handlers = [] + # manage the individual handlers + self.handle_open = {} + self.handle_error = {} + self.process_response = {} + self.process_request = {} + + def add_handler(self, handler): + if not hasattr(handler, "add_parent"): + raise TypeError("expected BaseHandler instance, got %r" % + type(handler)) + + added = False + for meth in dir(handler): + if meth in ["redirect_request", "do_open", "proxy_open"]: + # oops, coincidental match + continue + + i = meth.find("_") + protocol = meth[:i] + condition = meth[i+1:] + + if condition.startswith("error"): + j = condition.find("_") + i + 1 + kind = meth[j+1:] + try: + kind = int(kind) + except ValueError: + pass + lookup = self.handle_error.get(protocol, {}) + self.handle_error[protocol] = lookup + elif condition == "open": + kind = protocol + lookup = self.handle_open + elif condition == "response": + kind = protocol + lookup = self.process_response + elif condition == "request": + kind = protocol + lookup = self.process_request + else: + continue + + handlers = lookup.setdefault(kind, []) + if handlers: + bisect.insort(handlers, handler) + else: + handlers.append(handler) + added = True + + if added: + bisect.insort(self.handlers, handler) + handler.add_parent(self) + + def close(self): + # Only exists for backwards compatibility. + pass + + def _call_chain(self, chain, kind, meth_name, *args): + # Handlers raise an exception if no one else should try to handle + # the request, or return None if they can't but another handler + # could. Otherwise, they return the response. + handlers = chain.get(kind, ()) + for handler in handlers: + func = getattr(handler, meth_name) + + result = func(*args) + if result is not None: + return result + + def open(self, fullurl, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT): + # accept a URL or a Request object + if isinstance(fullurl, basestring): + req = Request(fullurl, data) + else: + req = fullurl + if data is not None: + req.add_data(data) + + req.timeout = timeout + protocol = req.get_type() + + # pre-process request + meth_name = protocol+"_request" + for processor in self.process_request.get(protocol, []): + meth = getattr(processor, meth_name) + req = meth(req) + + response = self._open(req, data) + + # post-process response + meth_name = protocol+"_response" + for processor in self.process_response.get(protocol, []): + meth = getattr(processor, meth_name) + response = meth(req, response) + + return response + + def _open(self, req, data=None): + result = self._call_chain(self.handle_open, 'default', + 'default_open', req) + if result: + return result + + protocol = req.get_type() + result = self._call_chain(self.handle_open, protocol, protocol + + '_open', req) + if result: + return result + + return self._call_chain(self.handle_open, 'unknown', + 'unknown_open', req) + + def error(self, proto, *args): + if proto in ('http', 'https'): + # XXX http[s] protocols are special-cased + dict = self.handle_error['http'] # https is not different than http + proto = args[2] # YUCK! + meth_name = 'http_error_%s' % proto + http_err = 1 + orig_args = args + else: + dict = self.handle_error + meth_name = proto + '_error' + http_err = 0 + args = (dict, proto, meth_name) + args + result = self._call_chain(*args) + if result: + return result + + if http_err: + args = (dict, 'default', 'http_error_default') + orig_args + return self._call_chain(*args) + +# XXX probably also want an abstract factory that knows when it makes +# sense to skip a superclass in favor of a subclass and when it might +# make sense to include both + +
[docs]def build_opener(*handlers): + """Create an opener object from a list of handlers. + + The opener will use several default handlers, including support + for HTTP, FTP and when applicable, HTTPS. + + If any of the handlers passed as arguments are subclasses of the + default handlers, the default handlers will not be used. + """ + import types + def isclass(obj): + return isinstance(obj, (types.ClassType, type)) + + opener = OpenerDirector() + default_classes = [ProxyHandler, UnknownHandler, HTTPHandler, + HTTPDefaultErrorHandler, HTTPRedirectHandler, + FTPHandler, FileHandler, HTTPErrorProcessor] + if hasattr(httplib, 'HTTPS'): + default_classes.append(HTTPSHandler) + skip = set() + for klass in default_classes: + for check in handlers: + if isclass(check): + if issubclass(check, klass): + skip.add(klass) + elif isinstance(check, klass): + skip.add(klass) + for klass in skip: + default_classes.remove(klass) + + for klass in default_classes: + opener.add_handler(klass()) + + for h in handlers: + if isclass(h): + h = h() + opener.add_handler(h) + return opener
+ +class BaseHandler: + handler_order = 500 + + def add_parent(self, parent): + self.parent = parent + + def close(self): + # Only exists for backwards compatibility + pass + + def __lt__(self, other): + if not hasattr(other, "handler_order"): + # Try to preserve the old behavior of having custom classes + # inserted after default ones (works only for custom user + # classes which are not aware of handler_order). + return True + return self.handler_order < other.handler_order + + +class HTTPErrorProcessor(BaseHandler): + """Process HTTP error responses.""" + handler_order = 1000 # after all other processing + + def http_response(self, request, response): + code, msg, hdrs = response.code, response.msg, response.info() + + # According to RFC 2616, "2xx" code indicates that the client's + # request was successfully received, understood, and accepted. + if not (200 <= code < 300): + response = self.parent.error( + 'http', request, response, code, msg, hdrs) + + return response + + https_response = http_response + +class HTTPDefaultErrorHandler(BaseHandler): + def http_error_default(self, req, fp, code, msg, hdrs): + raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) + +class HTTPRedirectHandler(BaseHandler): + # maximum number of redirections to any single URL + # this is needed because of the state that cookies introduce + max_repeats = 4 + # maximum total number of redirections (regardless of URL) before + # assuming we're in a loop + max_redirections = 10 + + def redirect_request(self, req, fp, code, msg, headers, newurl): + """Return a Request or None in response to a redirect. + + This is called by the http_error_30x methods when a + redirection response is received. If a redirection should + take place, return a new Request to allow http_error_30x to + perform the redirect. Otherwise, raise HTTPError if no-one + else should try to handle this url. Return None if you can't + but another Handler might. + """ + m = req.get_method() + if (code in (301, 302, 303, 307) and m in ("GET", "HEAD") + or code in (301, 302, 303) and m == "POST"): + # Strictly (according to RFC 2616), 301 or 302 in response + # to a POST MUST NOT cause a redirection without confirmation + # from the user (of urllib2, in this case). In practice, + # essentially all clients do redirect in this case, so we + # do the same. + # be conciliant with URIs containing a space + newurl = newurl.replace(' ', '%20') + newheaders = dict((k,v) for k,v in req.headers.items() + if k.lower() not in ("content-length", "content-type") + ) + return Request(newurl, + headers=newheaders, + origin_req_host=req.get_origin_req_host(), + unverifiable=True) + else: + raise HTTPError(req.get_full_url(), code, msg, headers, fp) + + # Implementation note: To avoid the server sending us into an + # infinite loop, the request object needs to track what URLs we + # have already seen. Do this by adding a handler-specific + # attribute to the Request object. + def http_error_302(self, req, fp, code, msg, headers): + # Some servers (incorrectly) return multiple Location headers + # (so probably same goes for URI). Use first header. + if 'location' in headers: + newurl = headers.getheaders('location')[0] + elif 'uri' in headers: + newurl = headers.getheaders('uri')[0] + else: + return + + # fix a possible malformed URL + urlparts = urlparse.urlparse(newurl) + if not urlparts.path and urlparts.netloc: + urlparts = list(urlparts) + urlparts[2] = "/" + newurl = urlparse.urlunparse(urlparts) + + newurl = urlparse.urljoin(req.get_full_url(), newurl) + + # For security reasons we do not allow redirects to protocols + # other than HTTP, HTTPS or FTP. + newurl_lower = newurl.lower() + if not (newurl_lower.startswith('http://') or + newurl_lower.startswith('https://') or + newurl_lower.startswith('ftp://')): + raise HTTPError(newurl, code, + msg + " - Redirection to url '%s' is not allowed" % + newurl, + headers, fp) + + # XXX Probably want to forget about the state of the current + # request, although that might interact poorly with other + # handlers that also use handler-specific request attributes + new = self.redirect_request(req, fp, code, msg, headers, newurl) + if new is None: + return + + # loop detection + # .redirect_dict has a key url if url was previously visited. + if hasattr(req, 'redirect_dict'): + visited = new.redirect_dict = req.redirect_dict + if (visited.get(newurl, 0) >= self.max_repeats or + len(visited) >= self.max_redirections): + raise HTTPError(req.get_full_url(), code, + self.inf_msg + msg, headers, fp) + else: + visited = new.redirect_dict = req.redirect_dict = {} + visited[newurl] = visited.get(newurl, 0) + 1 + + # Don't close the fp until we are sure that we won't use it + # with HTTPError. + fp.read() + fp.close() + + return self.parent.open(new, timeout=req.timeout) + + http_error_301 = http_error_303 = http_error_307 = http_error_302 + + inf_msg = "The HTTP server returned a redirect error that would " \ + "lead to an infinite loop.\n" \ + "The last 30x error message was:\n" + + +def _parse_proxy(proxy): + """Return (scheme, user, password, host/port) given a URL or an authority. + + If a URL is supplied, it must have an authority (host:port) component. + According to RFC 3986, having an authority component means the URL must + have two slashes after the scheme: + + >>> _parse_proxy('file:/ftp.example.com/') + Traceback (most recent call last): + ValueError: proxy URL with no authority: 'file:/ftp.example.com/' + + The first three items of the returned tuple may be None. + + Examples of authority parsing: + + >>> _parse_proxy('proxy.example.com') + (None, None, None, 'proxy.example.com') + >>> _parse_proxy('proxy.example.com:3128') + (None, None, None, 'proxy.example.com:3128') + + The authority component may optionally include userinfo (assumed to be + username:password): + + >>> _parse_proxy('joe:password@proxy.example.com') + (None, 'joe', 'password', 'proxy.example.com') + >>> _parse_proxy('joe:password@proxy.example.com:3128') + (None, 'joe', 'password', 'proxy.example.com:3128') + + Same examples, but with URLs instead: + + >>> _parse_proxy('http://proxy.example.com/') + ('http', None, None, 'proxy.example.com') + >>> _parse_proxy('http://proxy.example.com:3128/') + ('http', None, None, 'proxy.example.com:3128') + >>> _parse_proxy('http://joe:password@proxy.example.com/') + ('http', 'joe', 'password', 'proxy.example.com') + >>> _parse_proxy('http://joe:password@proxy.example.com:3128') + ('http', 'joe', 'password', 'proxy.example.com:3128') + + Everything after the authority is ignored: + + >>> _parse_proxy('ftp://joe:password@proxy.example.com/rubbish:3128') + ('ftp', 'joe', 'password', 'proxy.example.com') + + Test for no trailing '/' case: + + >>> _parse_proxy('http://joe:password@proxy.example.com') + ('http', 'joe', 'password', 'proxy.example.com') + + """ + scheme, r_scheme = splittype(proxy) + if not r_scheme.startswith("/"): + # authority + scheme = None + authority = proxy + else: + # URL + if not r_scheme.startswith("//"): + raise ValueError("proxy URL with no authority: %r" % proxy) + # We have an authority, so for RFC 3986-compliant URLs (by ss 3. + # and 3.3.), path is empty or starts with '/' + end = r_scheme.find("/", 2) + if end == -1: + end = None + authority = r_scheme[2:end] + userinfo, hostport = splituser(authority) + if userinfo is not None: + user, password = splitpasswd(userinfo) + else: + user = password = None + return scheme, user, password, hostport + +
[docs]class ProxyHandler(BaseHandler): + # Proxies must be in front + handler_order = 100 + +
[docs] def __init__(self, proxies=None): + if proxies is None: + proxies = getproxies() + assert hasattr(proxies, 'has_key'), "proxies must be a mapping" + self.proxies = proxies + for type, url in proxies.items(): + setattr(self, '%s_open' % type, + lambda r, proxy=url, type=type, meth=self.proxy_open: \ + meth(r, proxy, type))
+ + def proxy_open(self, req, proxy, type): + orig_type = req.get_type() + proxy_type, user, password, hostport = _parse_proxy(proxy) + + if proxy_type is None: + proxy_type = orig_type + + if req.host and proxy_bypass(req.host): + return None + + if user and password: + user_pass = '%s:%s' % (unquote(user), unquote(password)) + creds = base64.b64encode(user_pass).strip() + req.add_header('Proxy-authorization', 'Basic ' + creds) + hostport = unquote(hostport) + req.set_proxy(hostport, proxy_type) + + if orig_type == proxy_type or orig_type == 'https': + # let other handlers take care of it + return None + else: + # need to start over, because the other handlers don't + # grok the proxy's URL type + # e.g. if we have a constructor arg proxies like so: + # {'http': 'ftp://proxy.example.com'}, we may end up turning + # a request for http://acme.example.com/a into one for + # ftp://proxy.example.com/a + return self.parent.open(req, timeout=req.timeout)
+ +class HTTPPasswordMgr: + + def __init__(self): + self.passwd = {} + + def add_password(self, realm, uri, user, passwd): + # uri could be a single URI or a sequence + if isinstance(uri, basestring): + uri = [uri] + if not realm in self.passwd: + self.passwd[realm] = {} + for default_port in True, False: + reduced_uri = tuple( + [self.reduce_uri(u, default_port) for u in uri]) + self.passwd[realm][reduced_uri] = (user, passwd) + + def find_user_password(self, realm, authuri): + domains = self.passwd.get(realm, {}) + for default_port in True, False: + reduced_authuri = self.reduce_uri(authuri, default_port) + for uris, authinfo in domains.iteritems(): + for uri in uris: + if self.is_suburi(uri, reduced_authuri): + return authinfo + return None, None + + def reduce_uri(self, uri, default_port=True): + """Accept authority or URI and extract only the authority and path.""" + # note HTTP URLs do not have a userinfo component + parts = urlparse.urlsplit(uri) + if parts[1]: + # URI + scheme = parts[0] + authority = parts[1] + path = parts[2] or '/' + else: + # host or host:port + scheme = None + authority = uri + path = '/' + host, port = splitport(authority) + if default_port and port is None and scheme is not None: + dport = {"http": 80, + "https": 443, + }.get(scheme) + if dport is not None: + authority = "%s:%d" % (host, dport) + return authority, path + + def is_suburi(self, base, test): + """Check if test is below base in a URI tree + + Both args must be URIs in reduced form. + """ + if base == test: + return True + if base[0] != test[0]: + return False + common = posixpath.commonprefix((base[1], test[1])) + if len(common) == len(base[1]): + return True + return False + + +class HTTPPasswordMgrWithDefaultRealm(HTTPPasswordMgr): + + def find_user_password(self, realm, authuri): + user, password = HTTPPasswordMgr.find_user_password(self, realm, + authuri) + if user is not None: + return user, password + return HTTPPasswordMgr.find_user_password(self, None, authuri) + + +class AbstractBasicAuthHandler: + + # XXX this allows for multiple auth-schemes, but will stupidly pick + # the last one with a realm specified. + + # allow for double- and single-quoted realm values + # (single quotes are a violation of the RFC, but appear in the wild) + rx = re.compile('(?:.*,)*[ \t]*([^ \t]+)[ \t]+' + 'realm=(["\']?)([^"\']*)\\2', re.I) + + # XXX could pre-emptively send auth info already accepted (RFC 2617, + # end of section 2, and section 1.2 immediately after "credentials" + # production). + + def __init__(self, password_mgr=None): + if password_mgr is None: + password_mgr = HTTPPasswordMgr() + self.passwd = password_mgr + self.add_password = self.passwd.add_password + + + def http_error_auth_reqed(self, authreq, host, req, headers): + # host may be an authority (without userinfo) or a URL with an + # authority + # XXX could be multiple headers + authreq = headers.get(authreq, None) + + if authreq: + mo = AbstractBasicAuthHandler.rx.search(authreq) + if mo: + scheme, quote, realm = mo.groups() + if quote not in ['"', "'"]: + warnings.warn("Basic Auth Realm was unquoted", + UserWarning, 2) + if scheme.lower() == 'basic': + return self.retry_http_basic_auth(host, req, realm) + + def retry_http_basic_auth(self, host, req, realm): + user, pw = self.passwd.find_user_password(realm, host) + if pw is not None: + raw = "%s:%s" % (user, pw) + auth = 'Basic %s' % base64.b64encode(raw).strip() + if req.get_header(self.auth_header, None) == auth: + return None + req.add_unredirected_header(self.auth_header, auth) + return self.parent.open(req, timeout=req.timeout) + else: + return None + + +class HTTPBasicAuthHandler(AbstractBasicAuthHandler, BaseHandler): + + auth_header = 'Authorization' + + def http_error_401(self, req, fp, code, msg, headers): + url = req.get_full_url() + response = self.http_error_auth_reqed('www-authenticate', + url, req, headers) + return response + + +class ProxyBasicAuthHandler(AbstractBasicAuthHandler, BaseHandler): + + auth_header = 'Proxy-authorization' + + def http_error_407(self, req, fp, code, msg, headers): + # http_error_auth_reqed requires that there is no userinfo component in + # authority. Assume there isn't one, since urllib2 does not (and + # should not, RFC 3986 s. 3.2.1) support requests for URLs containing + # userinfo. + authority = req.get_host() + response = self.http_error_auth_reqed('proxy-authenticate', + authority, req, headers) + return response + + +def randombytes(n): + """Return n random bytes.""" + # Use /dev/urandom if it is available. Fall back to random module + # if not. It might be worthwhile to extend this function to use + # other platform-specific mechanisms for getting random bytes. + if os.path.exists("/dev/urandom"): + f = open("/dev/urandom") + s = f.read(n) + f.close() + return s + else: + L = [chr(random.randrange(0, 256)) for i in range(n)] + return "".join(L) + +class AbstractDigestAuthHandler: + # Digest authentication is specified in RFC 2617. + + # XXX The client does not inspect the Authentication-Info header + # in a successful response. + + # XXX It should be possible to test this implementation against + # a mock server that just generates a static set of challenges. + + # XXX qop="auth-int" supports is shaky + + def __init__(self, passwd=None): + if passwd is None: + passwd = HTTPPasswordMgr() + self.passwd = passwd + self.add_password = self.passwd.add_password + self.retried = 0 + self.nonce_count = 0 + self.last_nonce = None + + def reset_retry_count(self): + self.retried = 0 + + def http_error_auth_reqed(self, auth_header, host, req, headers): + authreq = headers.get(auth_header, None) + if self.retried > 5: + # Don't fail endlessly - if we failed once, we'll probably + # fail a second time. Hm. Unless the Password Manager is + # prompting for the information. Crap. This isn't great + # but it's better than the current 'repeat until recursion + # depth exceeded' approach <wink> + raise HTTPError(req.get_full_url(), 401, "digest auth failed", + headers, None) + else: + self.retried += 1 + if authreq: + scheme = authreq.split()[0] + if scheme.lower() == 'digest': + return self.retry_http_digest_auth(req, authreq) + + def retry_http_digest_auth(self, req, auth): + token, challenge = auth.split(' ', 1) + chal = parse_keqv_list(parse_http_list(challenge)) + auth = self.get_authorization(req, chal) + if auth: + auth_val = 'Digest %s' % auth + if req.headers.get(self.auth_header, None) == auth_val: + return None + req.add_unredirected_header(self.auth_header, auth_val) + resp = self.parent.open(req, timeout=req.timeout) + return resp + + def get_cnonce(self, nonce): + # The cnonce-value is an opaque + # quoted string value provided by the client and used by both client + # and server to avoid chosen plaintext attacks, to provide mutual + # authentication, and to provide some message integrity protection. + # This isn't a fabulous effort, but it's probably Good Enough. + dig = hashlib.sha1("%s:%s:%s:%s" % (self.nonce_count, nonce, time.ctime(), + randombytes(8))).hexdigest() + return dig[:16] + + def get_authorization(self, req, chal): + try: + realm = chal['realm'] + nonce = chal['nonce'] + qop = chal.get('qop') + algorithm = chal.get('algorithm', 'MD5') + # mod_digest doesn't send an opaque, even though it isn't + # supposed to be optional + opaque = chal.get('opaque', None) + except KeyError: + return None + + H, KD = self.get_algorithm_impls(algorithm) + if H is None: + return None + + user, pw = self.passwd.find_user_password(realm, req.get_full_url()) + if user is None: + return None + + # XXX not implemented yet + if req.has_data(): + entdig = self.get_entity_digest(req.get_data(), chal) + else: + entdig = None + + A1 = "%s:%s:%s" % (user, realm, pw) + A2 = "%s:%s" % (req.get_method(), + # XXX selector: what about proxies and full urls + req.get_selector()) + if qop == 'auth': + if nonce == self.last_nonce: + self.nonce_count += 1 + else: + self.nonce_count = 1 + self.last_nonce = nonce + + ncvalue = '%08x' % self.nonce_count + cnonce = self.get_cnonce(nonce) + noncebit = "%s:%s:%s:%s:%s" % (nonce, ncvalue, cnonce, qop, H(A2)) + respdig = KD(H(A1), noncebit) + elif qop is None: + respdig = KD(H(A1), "%s:%s" % (nonce, H(A2))) + else: + # XXX handle auth-int. + raise URLError("qop '%s' is not supported." % qop) + + # XXX should the partial digests be encoded too? + + base = 'username="%s", realm="%s", nonce="%s", uri="%s", ' \ + 'response="%s"' % (user, realm, nonce, req.get_selector(), + respdig) + if opaque: + base += ', opaque="%s"' % opaque + if entdig: + base += ', digest="%s"' % entdig + base += ', algorithm="%s"' % algorithm + if qop: + base += ', qop=auth, nc=%s, cnonce="%s"' % (ncvalue, cnonce) + return base + + def get_algorithm_impls(self, algorithm): + # algorithm should be case-insensitive according to RFC2617 + algorithm = algorithm.upper() + # lambdas assume digest modules are imported at the top level + if algorithm == 'MD5': + H = lambda x: hashlib.md5(x).hexdigest() + elif algorithm == 'SHA': + H = lambda x: hashlib.sha1(x).hexdigest() + # XXX MD5-sess + else: + raise ValueError("Unsupported digest authentication " + "algorithm %r" % algorithm.lower()) + KD = lambda s, d: H("%s:%s" % (s, d)) + return H, KD + + def get_entity_digest(self, data, chal): + # XXX not implemented yet + return None + + +class HTTPDigestAuthHandler(BaseHandler, AbstractDigestAuthHandler): + """An authentication protocol defined by RFC 2069 + + Digest authentication improves on basic authentication because it + does not transmit passwords in the clear. + """ + + auth_header = 'Authorization' + handler_order = 490 # before Basic auth + + def http_error_401(self, req, fp, code, msg, headers): + host = urlparse.urlparse(req.get_full_url())[1] + retry = self.http_error_auth_reqed('www-authenticate', + host, req, headers) + self.reset_retry_count() + return retry + + +class ProxyDigestAuthHandler(BaseHandler, AbstractDigestAuthHandler): + + auth_header = 'Proxy-Authorization' + handler_order = 490 # before Basic auth + + def http_error_407(self, req, fp, code, msg, headers): + host = req.get_host() + retry = self.http_error_auth_reqed('proxy-authenticate', + host, req, headers) + self.reset_retry_count() + return retry + +class AbstractHTTPHandler(BaseHandler): + + def __init__(self, debuglevel=0): + self._debuglevel = debuglevel + + def set_http_debuglevel(self, level): + self._debuglevel = level + + def do_request_(self, request): + host = request.get_host() + if not host: + raise URLError('no host given') + + if request.has_data(): # POST + data = request.get_data() + if not request.has_header('Content-type'): + request.add_unredirected_header( + 'Content-type', + 'application/x-www-form-urlencoded') + if not request.has_header('Content-length'): + request.add_unredirected_header( + 'Content-length', '%d' % len(data)) + + sel_host = host + if request.has_proxy(): + scheme, sel = splittype(request.get_selector()) + sel_host, sel_path = splithost(sel) + + if not request.has_header('Host'): + request.add_unredirected_header('Host', sel_host) + for name, value in self.parent.addheaders: + name = name.capitalize() + if not request.has_header(name): + request.add_unredirected_header(name, value) + + return request + + def do_open(self, http_class, req, **http_conn_args): + """Return an addinfourl object for the request, using http_class. + + http_class must implement the HTTPConnection API from httplib. + The addinfourl return value is a file-like object. It also + has methods and attributes including: + - info(): return a mimetools.Message object for the headers + - geturl(): return the original request URL + - code: HTTP status code + """ + host = req.get_host() + if not host: + raise URLError('no host given') + + # will parse host:port + h = http_class(host, timeout=req.timeout, **http_conn_args) + h.set_debuglevel(self._debuglevel) + + headers = dict(req.unredirected_hdrs) + headers.update(dict((k, v) for k, v in req.headers.items() + if k not in headers)) + + # We want to make an HTTP/1.1 request, but the addinfourl + # class isn't prepared to deal with a persistent connection. + # It will try to read all remaining data from the socket, + # which will block while the server waits for the next request. + # So make sure the connection gets closed after the (only) + # request. + headers["Connection"] = "close" + headers = dict( + (name.title(), val) for name, val in headers.items()) + + if req._tunnel_host: + tunnel_headers = {} + proxy_auth_hdr = "Proxy-Authorization" + if proxy_auth_hdr in headers: + tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] + # Proxy-Authorization should not be sent to origin + # server. + del headers[proxy_auth_hdr] + h.set_tunnel(req._tunnel_host, headers=tunnel_headers) + + try: + h.request(req.get_method(), req.get_selector(), req.data, headers) + except socket.error, err: # XXX what error? + h.close() + raise URLError(err) + else: + try: + r = h.getresponse(buffering=True) + except TypeError: # buffering kw not supported + r = h.getresponse() + + # Pick apart the HTTPResponse object to get the addinfourl + # object initialized properly. + + # Wrap the HTTPResponse object in socket's file object adapter + # for Windows. That adapter calls recv(), so delegate recv() + # to read(). This weird wrapping allows the returned object to + # have readline() and readlines() methods. + + # XXX It might be better to extract the read buffering code + # out of socket._fileobject() and into a base class. + + r.recv = r.read + fp = socket._fileobject(r, close=True) + + resp = addinfourl(fp, r.msg, req.get_full_url()) + resp.code = r.status + resp.msg = r.reason + return resp + + +class HTTPHandler(AbstractHTTPHandler): + + def http_open(self, req): + return self.do_open(httplib.HTTPConnection, req) + + http_request = AbstractHTTPHandler.do_request_ + +if hasattr(httplib, 'HTTPS'): + class HTTPSHandler(AbstractHTTPHandler): + + def __init__(self, debuglevel=0, context=None): + AbstractHTTPHandler.__init__(self, debuglevel) + self._context = context + + def https_open(self, req): + return self.do_open(httplib.HTTPSConnection, req, + context=self._context) + + https_request = AbstractHTTPHandler.do_request_ + +class HTTPCookieProcessor(BaseHandler): + def __init__(self, cookiejar=None): + import cookielib + if cookiejar is None: + cookiejar = cookielib.CookieJar() + self.cookiejar = cookiejar + + def http_request(self, request): + self.cookiejar.add_cookie_header(request) + return request + + def http_response(self, request, response): + self.cookiejar.extract_cookies(response, request) + return response + + https_request = http_request + https_response = http_response + +class UnknownHandler(BaseHandler): + def unknown_open(self, req): + type = req.get_type() + raise URLError('unknown url type: %s' % type) + +def parse_keqv_list(l): + """Parse list of key=value strings where keys are not duplicated.""" + parsed = {} + for elt in l: + k, v = elt.split('=', 1) + if v[0] == '"' and v[-1] == '"': + v = v[1:-1] + parsed[k] = v + return parsed + +def parse_http_list(s): + """Parse lists as described by RFC 2068 Section 2. + + In particular, parse comma-separated lists where the elements of + the list may include quoted-strings. A quoted-string could + contain a comma. A non-quoted string could have quotes in the + middle. Neither commas nor quotes count if they are escaped. + Only double-quotes count, not single-quotes. + """ + res = [] + part = '' + + escape = quote = False + for cur in s: + if escape: + part += cur + escape = False + continue + if quote: + if cur == '\\': + escape = True + continue + elif cur == '"': + quote = False + part += cur + continue + + if cur == ',': + res.append(part) + part = '' + continue + + if cur == '"': + quote = True + + part += cur + + # append last part + if part: + res.append(part) + + return [part.strip() for part in res] + +def _safe_gethostbyname(host): + try: + return socket.gethostbyname(host) + except socket.gaierror: + return None + +class FileHandler(BaseHandler): + # Use local file or FTP depending on form of URL + def file_open(self, req): + url = req.get_selector() + if url[:2] == '//' and url[2:3] != '/' and (req.host and + req.host != 'localhost'): + req.type = 'ftp' + return self.parent.open(req) + else: + return self.open_local_file(req) + + # names for the localhost + names = None + def get_names(self): + if FileHandler.names is None: + try: + FileHandler.names = tuple( + socket.gethostbyname_ex('localhost')[2] + + socket.gethostbyname_ex(socket.gethostname())[2]) + except socket.gaierror: + FileHandler.names = (socket.gethostbyname('localhost'),) + return FileHandler.names + + # not entirely sure what the rules are here + def open_local_file(self, req): + import email.utils + import mimetypes + host = req.get_host() + filename = req.get_selector() + localfile = url2pathname(filename) + try: + stats = os.stat(localfile) + size = stats.st_size + modified = email.utils.formatdate(stats.st_mtime, usegmt=True) + mtype = mimetypes.guess_type(filename)[0] + headers = mimetools.Message(StringIO( + 'Content-type: %s\nContent-length: %d\nLast-modified: %s\n' % + (mtype or 'text/plain', size, modified))) + if host: + host, port = splitport(host) + if not host or \ + (not port and _safe_gethostbyname(host) in self.get_names()): + if host: + origurl = 'file://' + host + filename + else: + origurl = 'file://' + filename + return addinfourl(open(localfile, 'rb'), headers, origurl) + except OSError, msg: + # urllib2 users shouldn't expect OSErrors coming from urlopen() + raise URLError(msg) + raise URLError('file not on local host') + +class FTPHandler(BaseHandler): + def ftp_open(self, req): + import ftplib + import mimetypes + host = req.get_host() + if not host: + raise URLError('ftp error: no host given') + host, port = splitport(host) + if port is None: + port = ftplib.FTP_PORT + else: + port = int(port) + + # username/password handling + user, host = splituser(host) + if user: + user, passwd = splitpasswd(user) + else: + passwd = None + host = unquote(host) + user = user or '' + passwd = passwd or '' + + try: + host = socket.gethostbyname(host) + except socket.error, msg: + raise URLError(msg) + path, attrs = splitattr(req.get_selector()) + dirs = path.split('/') + dirs = map(unquote, dirs) + dirs, file = dirs[:-1], dirs[-1] + if dirs and not dirs[0]: + dirs = dirs[1:] + try: + fw = self.connect_ftp(user, passwd, host, port, dirs, req.timeout) + type = file and 'I' or 'D' + for attr in attrs: + attr, value = splitvalue(attr) + if attr.lower() == 'type' and \ + value in ('a', 'A', 'i', 'I', 'd', 'D'): + type = value.upper() + fp, retrlen = fw.retrfile(file, type) + headers = "" + mtype = mimetypes.guess_type(req.get_full_url())[0] + if mtype: + headers += "Content-type: %s\n" % mtype + if retrlen is not None and retrlen >= 0: + headers += "Content-length: %d\n" % retrlen + sf = StringIO(headers) + headers = mimetools.Message(sf) + return addinfourl(fp, headers, req.get_full_url()) + except ftplib.all_errors, msg: + raise URLError, ('ftp error: %s' % msg), sys.exc_info()[2] + + def connect_ftp(self, user, passwd, host, port, dirs, timeout): + fw = ftpwrapper(user, passwd, host, port, dirs, timeout, + persistent=False) +## fw.ftp.set_debuglevel(1) + return fw + +class CacheFTPHandler(FTPHandler): + # XXX would be nice to have pluggable cache strategies + # XXX this stuff is definitely not thread safe + def __init__(self): + self.cache = {} + self.timeout = {} + self.soonest = 0 + self.delay = 60 + self.max_conns = 16 + + def setTimeout(self, t): + self.delay = t + + def setMaxConns(self, m): + self.max_conns = m + + def connect_ftp(self, user, passwd, host, port, dirs, timeout): + key = user, host, port, '/'.join(dirs), timeout + if key in self.cache: + self.timeout[key] = time.time() + self.delay + else: + self.cache[key] = ftpwrapper(user, passwd, host, port, dirs, timeout) + self.timeout[key] = time.time() + self.delay + self.check_cache() + return self.cache[key] + + def check_cache(self): + # first check for old ones + t = time.time() + if self.soonest <= t: + for k, v in self.timeout.items(): + if v < t: + self.cache[k].close() + del self.cache[k] + del self.timeout[k] + self.soonest = min(self.timeout.values()) + + # then check the size + if len(self.cache) == self.max_conns: + for k, v in self.timeout.items(): + if v == self.soonest: + del self.cache[k] + del self.timeout[k] + break + self.soonest = min(self.timeout.values()) + + def clear_cache(self): + for conn in self.cache.values(): + conn.close() + self.cache.clear() + self.timeout.clear() +
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/Architecture_c++.rst.txt b/personal/api-docs/_sources/Architecture_c++.rst.txt new file mode 100644 index 0000000..07f4f32 --- /dev/null +++ b/personal/api-docs/_sources/Architecture_c++.rst.txt @@ -0,0 +1,5 @@ +Architecture +============ +.. doxygenclass:: BinaryNinja::Architecture + :members: + :protected-members: diff --git a/personal/api-docs/_sources/BinaryView_c++.rst.txt b/personal/api-docs/_sources/BinaryView_c++.rst.txt new file mode 100644 index 0000000..8320fe2 --- /dev/null +++ b/personal/api-docs/_sources/BinaryView_c++.rst.txt @@ -0,0 +1,4 @@ +BinaryView +=========== +.. doxygenclass:: BinaryNinja::BinaryView + :members: diff --git a/personal/api-docs/_sources/ConsoleLogging_c++.rst.txt b/personal/api-docs/_sources/ConsoleLogging_c++.rst.txt new file mode 100644 index 0000000..f5b0bcc --- /dev/null +++ b/personal/api-docs/_sources/ConsoleLogging_c++.rst.txt @@ -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 diff --git a/personal/api-docs/_sources/Platform_c++.rst.txt b/personal/api-docs/_sources/Platform_c++.rst.txt new file mode 100644 index 0000000..02108bd --- /dev/null +++ b/personal/api-docs/_sources/Platform_c++.rst.txt @@ -0,0 +1,3 @@ +Platform +========= +.. doxygenclass:: BinaryNinja::Platform diff --git a/personal/api-docs/_sources/binaryninja.architecture-module.rst.txt b/personal/api-docs/_sources/binaryninja.architecture-module.rst.txt new file mode 100644 index 0000000..5b6349f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.architecture-module.rst.txt @@ -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: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.architecture.Architecture.rst.txt b/personal/api-docs/_sources/binaryninja.architecture.Architecture.rst.txt new file mode 100644 index 0000000..3573856 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.architecture.Architecture.rst.txt @@ -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 + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.architecture.ArchitectureHook.rst.txt b/personal/api-docs/_sources/binaryninja.architecture.ArchitectureHook.rst.txt new file mode 100644 index 0000000..817138a --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.architecture.ArchitectureHook.rst.txt @@ -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 + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.architecture.CoreArchitecture.rst.txt b/personal/api-docs/_sources/binaryninja.architecture.CoreArchitecture.rst.txt new file mode 100644 index 0000000..06f9a69 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.architecture.CoreArchitecture.rst.txt @@ -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 + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.architecture.ReferenceSource.rst.txt b/personal/api-docs/_sources/binaryninja.architecture.ReferenceSource.rst.txt new file mode 100644 index 0000000..3765ac5 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.architecture.ReferenceSource.rst.txt @@ -0,0 +1,22 @@ +binaryninja.architecture.ReferenceSource +======================================== + +.. currentmodule:: binaryninja.architecture + +.. autoclass:: ReferenceSource + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ReferenceSource.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.architecture.long.rst.txt b/personal/api-docs/_sources/binaryninja.architecture.long.rst.txt new file mode 100644 index 0000000..8cba313 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.architecture.long.rst.txt @@ -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 + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.architecture.range.rst.txt b/personal/api-docs/_sources/binaryninja.architecture.range.rst.txt new file mode 100644 index 0000000..055e5d1 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.architecture.range.rst.txt @@ -0,0 +1,6 @@ +binaryninja.architecture.range +============================== + +.. currentmodule:: binaryninja.architecture + +.. autofunction:: range \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.architecture.with_metaclass.rst.txt b/personal/api-docs/_sources/binaryninja.architecture.with_metaclass.rst.txt new file mode 100644 index 0000000..10b9344 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.architecture.with_metaclass.rst.txt @@ -0,0 +1,6 @@ +binaryninja.architecture.with\_metaclass +======================================== + +.. currentmodule:: binaryninja.architecture + +.. autofunction:: with_metaclass \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.atexit-module.rst.txt b/personal/api-docs/_sources/binaryninja.atexit-module.rst.txt new file mode 100644 index 0000000..2cadb14 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.atexit-module.rst.txt @@ -0,0 +1,16 @@ +atexit module +===================== + +.. autosummary:: + :toctree: + + binaryninja.atexit.register + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.atexit + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.atexit.register.rst.txt b/personal/api-docs/_sources/binaryninja.atexit.register.rst.txt new file mode 100644 index 0000000..26d6126 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.atexit.register.rst.txt @@ -0,0 +1,6 @@ +binaryninja.atexit.register +=========================== + +.. currentmodule:: binaryninja.atexit + +.. autofunction:: register \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.basicblock-module.rst.txt b/personal/api-docs/_sources/binaryninja.basicblock-module.rst.txt new file mode 100644 index 0000000..dbfe34b --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.basicblock-module.rst.txt @@ -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: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.basicblock.BasicBlock.rst.txt b/personal/api-docs/_sources/binaryninja.basicblock.BasicBlock.rst.txt new file mode 100644 index 0000000..2d0349a --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.basicblock.BasicBlock.rst.txt @@ -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 + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.basicblock.BasicBlockEdge.rst.txt b/personal/api-docs/_sources/binaryninja.basicblock.BasicBlockEdge.rst.txt new file mode 100644 index 0000000..38bbecf --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.basicblock.BasicBlockEdge.rst.txt @@ -0,0 +1,22 @@ +binaryninja.basicblock.BasicBlockEdge +===================================== + +.. currentmodule:: binaryninja.basicblock + +.. autoclass:: BasicBlockEdge + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~BasicBlockEdge.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.basicblock.range.rst.txt b/personal/api-docs/_sources/binaryninja.basicblock.range.rst.txt new file mode 100644 index 0000000..056e4ae --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.basicblock.range.rst.txt @@ -0,0 +1,6 @@ +binaryninja.basicblock.range +============================ + +.. currentmodule:: binaryninja.basicblock + +.. autofunction:: range \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview-module.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview-module.rst.txt new file mode 100644 index 0000000..13dc503 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview-module.rst.txt @@ -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: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview.ActiveAnalysisInfo.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview.ActiveAnalysisInfo.rst.txt new file mode 100644 index 0000000..1965da5 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview.ActiveAnalysisInfo.rst.txt @@ -0,0 +1,22 @@ +binaryninja.binaryview.ActiveAnalysisInfo +========================================= + +.. currentmodule:: binaryninja.binaryview + +.. autoclass:: ActiveAnalysisInfo + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ActiveAnalysisInfo.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview.AddressRange.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview.AddressRange.rst.txt new file mode 100644 index 0000000..2501d6c --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview.AddressRange.rst.txt @@ -0,0 +1,28 @@ +binaryninja.binaryview.AddressRange +=================================== + +.. currentmodule:: binaryninja.binaryview + +.. autoclass:: AddressRange + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~AddressRange.__init__ + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~AddressRange.length + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview.AnalysisCompletionEvent.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview.AnalysisCompletionEvent.rst.txt new file mode 100644 index 0000000..faabe4f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview.AnalysisCompletionEvent.rst.txt @@ -0,0 +1,23 @@ +binaryninja.binaryview.AnalysisCompletionEvent +============================================== + +.. currentmodule:: binaryninja.binaryview + +.. autoclass:: AnalysisCompletionEvent + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~AnalysisCompletionEvent.__init__ + ~AnalysisCompletionEvent.cancel + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview.AnalysisInfo.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview.AnalysisInfo.rst.txt new file mode 100644 index 0000000..d83f424 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview.AnalysisInfo.rst.txt @@ -0,0 +1,22 @@ +binaryninja.binaryview.AnalysisInfo +=================================== + +.. currentmodule:: binaryninja.binaryview + +.. autoclass:: AnalysisInfo + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~AnalysisInfo.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview.AnalysisProgress.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview.AnalysisProgress.rst.txt new file mode 100644 index 0000000..4854e7b --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview.AnalysisProgress.rst.txt @@ -0,0 +1,22 @@ +binaryninja.binaryview.AnalysisProgress +======================================= + +.. currentmodule:: binaryninja.binaryview + +.. autoclass:: AnalysisProgress + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~AnalysisProgress.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview.BinaryDataNotification.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview.BinaryDataNotification.rst.txt new file mode 100644 index 0000000..f13bb4d --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview.BinaryDataNotification.rst.txt @@ -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 + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview.BinaryDataNotificationCallbacks.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview.BinaryDataNotificationCallbacks.rst.txt new file mode 100644 index 0000000..bd26a54 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview.BinaryDataNotificationCallbacks.rst.txt @@ -0,0 +1,22 @@ +binaryninja.binaryview.BinaryDataNotificationCallbacks +====================================================== + +.. currentmodule:: binaryninja.binaryview + +.. autoclass:: BinaryDataNotificationCallbacks + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~BinaryDataNotificationCallbacks.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview.BinaryReader.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview.BinaryReader.rst.txt new file mode 100644 index 0000000..2913393 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview.BinaryReader.rst.txt @@ -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 + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview.BinaryView.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview.BinaryView.rst.txt new file mode 100644 index 0000000..2458b8a --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview.BinaryView.rst.txt @@ -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 + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview.BinaryViewType.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview.BinaryViewType.rst.txt new file mode 100644 index 0000000..963b613 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview.BinaryViewType.rst.txt @@ -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 + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview.BinaryWriter.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview.BinaryWriter.rst.txt new file mode 100644 index 0000000..b3592ec --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview.BinaryWriter.rst.txt @@ -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 + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview.DataVariable.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview.DataVariable.rst.txt new file mode 100644 index 0000000..d214e71 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview.DataVariable.rst.txt @@ -0,0 +1,22 @@ +binaryninja.binaryview.DataVariable +=================================== + +.. currentmodule:: binaryninja.binaryview + +.. autoclass:: DataVariable + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~DataVariable.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview.OrderedDict.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview.OrderedDict.rst.txt new file mode 100644 index 0000000..30fb903 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview.OrderedDict.rst.txt @@ -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 + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview.Section.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview.Section.rst.txt new file mode 100644 index 0000000..2c5ca49 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview.Section.rst.txt @@ -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 + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview.Segment.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview.Segment.rst.txt new file mode 100644 index 0000000..7cfd71b --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview.Segment.rst.txt @@ -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 + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview.StringReference.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview.StringReference.rst.txt new file mode 100644 index 0000000..ce41852 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview.StringReference.rst.txt @@ -0,0 +1,28 @@ +binaryninja.binaryview.StringReference +====================================== + +.. currentmodule:: binaryninja.binaryview + +.. autoclass:: StringReference + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~StringReference.__init__ + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~StringReference.value + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview.StructuredDataValue.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview.StructuredDataValue.rst.txt new file mode 100644 index 0000000..0059d20 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview.StructuredDataValue.rst.txt @@ -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 + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview.StructuredDataView.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview.StructuredDataView.rst.txt new file mode 100644 index 0000000..dd55daa --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview.StructuredDataView.rst.txt @@ -0,0 +1,22 @@ +binaryninja.binaryview.StructuredDataView +========================================= + +.. currentmodule:: binaryninja.binaryview + +.. autoclass:: StructuredDataView + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~StructuredDataView.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview.range.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview.range.rst.txt new file mode 100644 index 0000000..e8f03a2 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview.range.rst.txt @@ -0,0 +1,6 @@ +binaryninja.binaryview.range +============================ + +.. currentmodule:: binaryninja.binaryview + +.. autofunction:: range \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.binaryview.with_metaclass.rst.txt b/personal/api-docs/_sources/binaryninja.binaryview.with_metaclass.rst.txt new file mode 100644 index 0000000..3baec53 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.binaryview.with_metaclass.rst.txt @@ -0,0 +1,6 @@ +binaryninja.binaryview.with\_metaclass +====================================== + +.. currentmodule:: binaryninja.binaryview + +.. autofunction:: with_metaclass \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.callingconvention-module.rst.txt b/personal/api-docs/_sources/binaryninja.callingconvention-module.rst.txt new file mode 100644 index 0000000..dbaeaa2 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.callingconvention-module.rst.txt @@ -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: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.callingconvention.CallingConvention.rst.txt b/personal/api-docs/_sources/binaryninja.callingconvention.CallingConvention.rst.txt new file mode 100644 index 0000000..8d9d7bf --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.callingconvention.CallingConvention.rst.txt @@ -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 + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.callingconvention.range.rst.txt b/personal/api-docs/_sources/binaryninja.callingconvention.range.rst.txt new file mode 100644 index 0000000..c63c1b8 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.callingconvention.range.rst.txt @@ -0,0 +1,6 @@ +binaryninja.callingconvention.range +=================================== + +.. currentmodule:: binaryninja.callingconvention + +.. autofunction:: range \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.databuffer-module.rst.txt b/personal/api-docs/_sources/binaryninja.databuffer-module.rst.txt new file mode 100644 index 0000000..a836299 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.databuffer-module.rst.txt @@ -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: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.databuffer.DataBuffer.rst.txt b/personal/api-docs/_sources/binaryninja.databuffer.DataBuffer.rst.txt new file mode 100644 index 0000000..431b94b --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.databuffer.DataBuffer.rst.txt @@ -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 + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.databuffer.escape_string.rst.txt b/personal/api-docs/_sources/binaryninja.databuffer.escape_string.rst.txt new file mode 100644 index 0000000..877349c --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.databuffer.escape_string.rst.txt @@ -0,0 +1,6 @@ +binaryninja.databuffer.escape\_string +===================================== + +.. currentmodule:: binaryninja.databuffer + +.. autofunction:: escape_string \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.databuffer.long.rst.txt b/personal/api-docs/_sources/binaryninja.databuffer.long.rst.txt new file mode 100644 index 0000000..5705516 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.databuffer.long.rst.txt @@ -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 + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.databuffer.pyNativeStr.rst.txt b/personal/api-docs/_sources/binaryninja.databuffer.pyNativeStr.rst.txt new file mode 100644 index 0000000..6edfb22 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.databuffer.pyNativeStr.rst.txt @@ -0,0 +1,6 @@ +binaryninja.databuffer.pyNativeStr +================================== + +.. currentmodule:: binaryninja.databuffer + +.. autofunction:: pyNativeStr \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.databuffer.unescape_string.rst.txt b/personal/api-docs/_sources/binaryninja.databuffer.unescape_string.rst.txt new file mode 100644 index 0000000..2b1873d --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.databuffer.unescape_string.rst.txt @@ -0,0 +1,6 @@ +binaryninja.databuffer.unescape\_string +======================================= + +.. currentmodule:: binaryninja.databuffer + +.. autofunction:: unescape_string \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.datarender-module.rst.txt b/personal/api-docs/_sources/binaryninja.datarender-module.rst.txt new file mode 100644 index 0000000..4e36650 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.datarender-module.rst.txt @@ -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: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.datarender.BinaryView.rst.txt b/personal/api-docs/_sources/binaryninja.datarender.BinaryView.rst.txt new file mode 100644 index 0000000..2fe233a --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.datarender.BinaryView.rst.txt @@ -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 + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.datarender.DataRenderer.rst.txt b/personal/api-docs/_sources/binaryninja.datarender.DataRenderer.rst.txt new file mode 100644 index 0000000..c119d65 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.datarender.DataRenderer.rst.txt @@ -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 + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.datarender.DisassemblyTextLine.rst.txt b/personal/api-docs/_sources/binaryninja.datarender.DisassemblyTextLine.rst.txt new file mode 100644 index 0000000..63a8c87 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.datarender.DisassemblyTextLine.rst.txt @@ -0,0 +1,22 @@ +binaryninja.datarender.DisassemblyTextLine +========================================== + +.. currentmodule:: binaryninja.datarender + +.. autoclass:: DisassemblyTextLine + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~DisassemblyTextLine.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.datarender.FileMetadata.rst.txt b/personal/api-docs/_sources/binaryninja.datarender.FileMetadata.rst.txt new file mode 100644 index 0000000..989d6e4 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.datarender.FileMetadata.rst.txt @@ -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 + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.datarender.InstructionTextToken.rst.txt b/personal/api-docs/_sources/binaryninja.datarender.InstructionTextToken.rst.txt new file mode 100644 index 0000000..d0eab56 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.datarender.InstructionTextToken.rst.txt @@ -0,0 +1,23 @@ +binaryninja.datarender.InstructionTextToken +=========================================== + +.. currentmodule:: binaryninja.datarender + +.. autoclass:: InstructionTextToken + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~InstructionTextToken.__init__ + ~InstructionTextToken.get_instruction_lines + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.datarender.Type.rst.txt b/personal/api-docs/_sources/binaryninja.datarender.Type.rst.txt new file mode 100644 index 0000000..d9a5526 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.datarender.Type.rst.txt @@ -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 + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.datarender.log_error.rst.txt b/personal/api-docs/_sources/binaryninja.datarender.log_error.rst.txt new file mode 100644 index 0000000..b132335 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.datarender.log_error.rst.txt @@ -0,0 +1,6 @@ +binaryninja.datarender.log\_error +================================= + +.. currentmodule:: binaryninja.datarender + +.. autofunction:: log_error \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.demangle-module.rst.txt b/personal/api-docs/_sources/binaryninja.demangle-module.rst.txt new file mode 100644 index 0000000..b5ffa05 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.demangle-module.rst.txt @@ -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: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.demangle.demangle_gnu3.rst.txt b/personal/api-docs/_sources/binaryninja.demangle.demangle_gnu3.rst.txt new file mode 100644 index 0000000..7c1c2e0 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.demangle.demangle_gnu3.rst.txt @@ -0,0 +1,6 @@ +binaryninja.demangle.demangle\_gnu3 +=================================== + +.. currentmodule:: binaryninja.demangle + +.. autofunction:: demangle_gnu3 \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.demangle.demangle_ms.rst.txt b/personal/api-docs/_sources/binaryninja.demangle.demangle_ms.rst.txt new file mode 100644 index 0000000..bb72e5f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.demangle.demangle_ms.rst.txt @@ -0,0 +1,6 @@ +binaryninja.demangle.demangle\_ms +================================= + +.. currentmodule:: binaryninja.demangle + +.. autofunction:: demangle_ms \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.demangle.get_qualified_name.rst.txt b/personal/api-docs/_sources/binaryninja.demangle.get_qualified_name.rst.txt new file mode 100644 index 0000000..ba7e85e --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.demangle.get_qualified_name.rst.txt @@ -0,0 +1,6 @@ +binaryninja.demangle.get\_qualified\_name +========================================= + +.. currentmodule:: binaryninja.demangle + +.. autofunction:: get_qualified_name \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.demangle.pyNativeStr.rst.txt b/personal/api-docs/_sources/binaryninja.demangle.pyNativeStr.rst.txt new file mode 100644 index 0000000..0c603fa --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.demangle.pyNativeStr.rst.txt @@ -0,0 +1,6 @@ +binaryninja.demangle.pyNativeStr +================================ + +.. currentmodule:: binaryninja.demangle + +.. autofunction:: pyNativeStr \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.demangle.range.rst.txt b/personal/api-docs/_sources/binaryninja.demangle.range.rst.txt new file mode 100644 index 0000000..69f9c7c --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.demangle.range.rst.txt @@ -0,0 +1,6 @@ +binaryninja.demangle.range +========================== + +.. currentmodule:: binaryninja.demangle + +.. autofunction:: range \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.downloadprovider-module.rst.txt b/personal/api-docs/_sources/binaryninja.downloadprovider-module.rst.txt new file mode 100644 index 0000000..4f41eed --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.downloadprovider-module.rst.txt @@ -0,0 +1,28 @@ +downloadprovider module +===================== + +.. autosummary:: + :toctree: + + binaryninja.downloadprovider.DownloadInstance + binaryninja.downloadprovider.DownloadProvider + binaryninja.downloadprovider.ProxyHandler + binaryninja.downloadprovider.PythonDownloadInstance + binaryninja.downloadprovider.PythonDownloadProvider + binaryninja.downloadprovider.Settings + binaryninja.downloadprovider.URLError + binaryninja.downloadprovider.build_opener + binaryninja.downloadprovider.install_opener + binaryninja.downloadprovider.pyNativeStr + binaryninja.downloadprovider.range + binaryninja.downloadprovider.urlopen + binaryninja.downloadprovider.with_metaclass + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.downloadprovider + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.downloadprovider.DownloadInstance.rst.txt b/personal/api-docs/_sources/binaryninja.downloadprovider.DownloadInstance.rst.txt new file mode 100644 index 0000000..9194a08 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.downloadprovider.DownloadInstance.rst.txt @@ -0,0 +1,24 @@ +binaryninja.downloadprovider.DownloadInstance +============================================= + +.. currentmodule:: binaryninja.downloadprovider + +.. autoclass:: DownloadInstance + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~DownloadInstance.__init__ + ~DownloadInstance.perform_destroy_instance + ~DownloadInstance.perform_request + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.downloadprovider.DownloadProvider.rst.txt b/personal/api-docs/_sources/binaryninja.downloadprovider.DownloadProvider.rst.txt new file mode 100644 index 0000000..1c9e283 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.downloadprovider.DownloadProvider.rst.txt @@ -0,0 +1,31 @@ +binaryninja.downloadprovider.DownloadProvider +============================================= + +.. currentmodule:: binaryninja.downloadprovider + +.. autoclass:: DownloadProvider + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~DownloadProvider.__init__ + ~DownloadProvider.create_instance + ~DownloadProvider.register + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~DownloadProvider.instance_class + ~DownloadProvider.name + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.downloadprovider.ProxyHandler.rst.txt b/personal/api-docs/_sources/binaryninja.downloadprovider.ProxyHandler.rst.txt new file mode 100644 index 0000000..9b46320 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.downloadprovider.ProxyHandler.rst.txt @@ -0,0 +1,31 @@ +binaryninja.downloadprovider.ProxyHandler +========================================= + +.. currentmodule:: binaryninja.downloadprovider + +.. autoclass:: ProxyHandler + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ProxyHandler.__init__ + ~ProxyHandler.add_parent + ~ProxyHandler.close + ~ProxyHandler.proxy_open + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~ProxyHandler.handler_order + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.downloadprovider.PythonDownloadInstance.rst.txt b/personal/api-docs/_sources/binaryninja.downloadprovider.PythonDownloadInstance.rst.txt new file mode 100644 index 0000000..145369a --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.downloadprovider.PythonDownloadInstance.rst.txt @@ -0,0 +1,24 @@ +binaryninja.downloadprovider.PythonDownloadInstance +=================================================== + +.. currentmodule:: binaryninja.downloadprovider + +.. autoclass:: PythonDownloadInstance + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~PythonDownloadInstance.__init__ + ~PythonDownloadInstance.perform_destroy_instance + ~PythonDownloadInstance.perform_request + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.downloadprovider.PythonDownloadProvider.rst.txt b/personal/api-docs/_sources/binaryninja.downloadprovider.PythonDownloadProvider.rst.txt new file mode 100644 index 0000000..70fb1ef --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.downloadprovider.PythonDownloadProvider.rst.txt @@ -0,0 +1,30 @@ +binaryninja.downloadprovider.PythonDownloadProvider +=================================================== + +.. currentmodule:: binaryninja.downloadprovider + +.. autoclass:: PythonDownloadProvider + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~PythonDownloadProvider.__init__ + ~PythonDownloadProvider.create_instance + ~PythonDownloadProvider.register + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~PythonDownloadProvider.name + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.downloadprovider.Settings.rst.txt b/personal/api-docs/_sources/binaryninja.downloadprovider.Settings.rst.txt new file mode 100644 index 0000000..597c55d --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.downloadprovider.Settings.rst.txt @@ -0,0 +1,43 @@ +binaryninja.downloadprovider.Settings +===================================== + +.. currentmodule:: binaryninja.downloadprovider + +.. autoclass:: Settings + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Settings.__init__ + ~Settings.get_bool + ~Settings.get_bool_with_scope + ~Settings.get_double + ~Settings.get_double_with_scope + ~Settings.get_integer + ~Settings.get_integer_with_scope + ~Settings.get_schema + ~Settings.get_string + ~Settings.get_string_list + ~Settings.get_string_list_with_scope + ~Settings.get_string_with_scope + ~Settings.register_group + ~Settings.register_setting + ~Settings.reset + ~Settings.reset_all + ~Settings.set_bool + ~Settings.set_double + ~Settings.set_integer + ~Settings.set_string + ~Settings.set_string_list + ~Settings.update_property + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.downloadprovider.URLError.rst.txt b/personal/api-docs/_sources/binaryninja.downloadprovider.URLError.rst.txt new file mode 100644 index 0000000..021533b --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.downloadprovider.URLError.rst.txt @@ -0,0 +1,6 @@ +binaryninja.downloadprovider.URLError +===================================== + +.. currentmodule:: binaryninja.downloadprovider + +.. autoexception:: URLError \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.downloadprovider.build_opener.rst.txt b/personal/api-docs/_sources/binaryninja.downloadprovider.build_opener.rst.txt new file mode 100644 index 0000000..43a7da0 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.downloadprovider.build_opener.rst.txt @@ -0,0 +1,6 @@ +binaryninja.downloadprovider.build\_opener +========================================== + +.. currentmodule:: binaryninja.downloadprovider + +.. autofunction:: build_opener \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.downloadprovider.install_opener.rst.txt b/personal/api-docs/_sources/binaryninja.downloadprovider.install_opener.rst.txt new file mode 100644 index 0000000..70c5f7c --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.downloadprovider.install_opener.rst.txt @@ -0,0 +1,6 @@ +binaryninja.downloadprovider.install\_opener +============================================ + +.. currentmodule:: binaryninja.downloadprovider + +.. autofunction:: install_opener \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.downloadprovider.pyNativeStr.rst.txt b/personal/api-docs/_sources/binaryninja.downloadprovider.pyNativeStr.rst.txt new file mode 100644 index 0000000..65766b5 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.downloadprovider.pyNativeStr.rst.txt @@ -0,0 +1,6 @@ +binaryninja.downloadprovider.pyNativeStr +======================================== + +.. currentmodule:: binaryninja.downloadprovider + +.. autofunction:: pyNativeStr \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.downloadprovider.range.rst.txt b/personal/api-docs/_sources/binaryninja.downloadprovider.range.rst.txt new file mode 100644 index 0000000..499ae7f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.downloadprovider.range.rst.txt @@ -0,0 +1,6 @@ +binaryninja.downloadprovider.range +================================== + +.. currentmodule:: binaryninja.downloadprovider + +.. autofunction:: range \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.downloadprovider.urlopen.rst.txt b/personal/api-docs/_sources/binaryninja.downloadprovider.urlopen.rst.txt new file mode 100644 index 0000000..d362b5f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.downloadprovider.urlopen.rst.txt @@ -0,0 +1,6 @@ +binaryninja.downloadprovider.urlopen +==================================== + +.. currentmodule:: binaryninja.downloadprovider + +.. autofunction:: urlopen \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.downloadprovider.with_metaclass.rst.txt b/personal/api-docs/_sources/binaryninja.downloadprovider.with_metaclass.rst.txt new file mode 100644 index 0000000..62dd0f4 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.downloadprovider.with_metaclass.rst.txt @@ -0,0 +1,6 @@ +binaryninja.downloadprovider.with\_metaclass +============================================ + +.. currentmodule:: binaryninja.downloadprovider + +.. autofunction:: with_metaclass \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums-module.rst.txt b/personal/api-docs/_sources/binaryninja.enums-module.rst.txt new file mode 100644 index 0000000..a4d15d6 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums-module.rst.txt @@ -0,0 +1,71 @@ +enums module +===================== + +.. autosummary:: + :toctree: + + binaryninja.enums.ActionType + binaryninja.enums.AnalysisSkipReason + binaryninja.enums.AnalysisState + binaryninja.enums.BranchType + binaryninja.enums.CallingConventionName + binaryninja.enums.DisassemblyOption + binaryninja.enums.Endianness + binaryninja.enums.FindFlag + binaryninja.enums.FlagRole + binaryninja.enums.FormInputFieldType + binaryninja.enums.FunctionAnalysisSkipOverride + binaryninja.enums.FunctionGraphType + binaryninja.enums.HighlightColorStyle + binaryninja.enums.HighlightStandardColor + binaryninja.enums.ILBranchDependence + binaryninja.enums.ImplicitRegisterExtend + binaryninja.enums.InstructionTextTokenContext + binaryninja.enums.InstructionTextTokenType + binaryninja.enums.IntegerDisplayType + binaryninja.enums.LinearDisassemblyLineType + binaryninja.enums.LogLevel + binaryninja.enums.LowLevelILFlagCondition + binaryninja.enums.LowLevelILOperation + binaryninja.enums.MediumLevelILOperation + binaryninja.enums.MemberAccess + binaryninja.enums.MemberScope + binaryninja.enums.MessageBoxButtonResult + binaryninja.enums.MessageBoxButtonSet + binaryninja.enums.MessageBoxIcon + binaryninja.enums.MetadataType + binaryninja.enums.ModificationStatus + binaryninja.enums.NameType + binaryninja.enums.NamedTypeReferenceClass + binaryninja.enums.PluginCommandType + binaryninja.enums.PluginLoadOrder + binaryninja.enums.PluginOrigin + binaryninja.enums.PluginType + binaryninja.enums.PluginUpdateStatus + binaryninja.enums.PointerSuffix + binaryninja.enums.ReferenceType + binaryninja.enums.RegisterValueType + binaryninja.enums.RelocationType + binaryninja.enums.ReportType + binaryninja.enums.ScriptingProviderExecuteResult + binaryninja.enums.ScriptingProviderInputReadyState + binaryninja.enums.SectionSemantics + binaryninja.enums.SegmentFlag + binaryninja.enums.SettingsScope + binaryninja.enums.StringType + binaryninja.enums.StructureType + binaryninja.enums.SymbolBinding + binaryninja.enums.SymbolType + binaryninja.enums.TransformType + binaryninja.enums.TypeClass + binaryninja.enums.UpdateResult + binaryninja.enums.VariableSourceType + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.enums + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.ActionType.rst.txt b/personal/api-docs/_sources/binaryninja.enums.ActionType.rst.txt new file mode 100644 index 0000000..244c281 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.ActionType.rst.txt @@ -0,0 +1,25 @@ +binaryninja.enums.ActionType +============================ + +.. currentmodule:: binaryninja.enums + +.. autoclass:: ActionType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~ActionType.AnalysisAction + ~ActionType.DataModificationAction + ~ActionType.DataModificationAndAnalysisAction + ~ActionType.TemporaryAction + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.AnalysisSkipReason.rst.txt b/personal/api-docs/_sources/binaryninja.enums.AnalysisSkipReason.rst.txt new file mode 100644 index 0000000..13b7ebc --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.AnalysisSkipReason.rst.txt @@ -0,0 +1,27 @@ +binaryninja.enums.AnalysisSkipReason +==================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: AnalysisSkipReason + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~AnalysisSkipReason.AlwaysSkipReason + ~AnalysisSkipReason.ExceedFunctionAnalysisTimeSkipReason + ~AnalysisSkipReason.ExceedFunctionSizeSkipReason + ~AnalysisSkipReason.ExceedFunctionUpdateCountSkipReason + ~AnalysisSkipReason.NewAutoFunctionAnalysisSuppressedReason + ~AnalysisSkipReason.NoSkipReason + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.AnalysisState.rst.txt b/personal/api-docs/_sources/binaryninja.enums.AnalysisState.rst.txt new file mode 100644 index 0000000..8027fd4 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.AnalysisState.rst.txt @@ -0,0 +1,25 @@ +binaryninja.enums.AnalysisState +=============================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: AnalysisState + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~AnalysisState.AnalyzeState + ~AnalysisState.DisassembleState + ~AnalysisState.ExtendedAnalyzeState + ~AnalysisState.IdleState + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.BranchType.rst.txt b/personal/api-docs/_sources/binaryninja.enums.BranchType.rst.txt new file mode 100644 index 0000000..00e659f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.BranchType.rst.txt @@ -0,0 +1,29 @@ +binaryninja.enums.BranchType +============================ + +.. currentmodule:: binaryninja.enums + +.. autoclass:: BranchType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~BranchType.CallDestination + ~BranchType.FalseBranch + ~BranchType.FunctionReturn + ~BranchType.IndirectBranch + ~BranchType.SystemCall + ~BranchType.TrueBranch + ~BranchType.UnconditionalBranch + ~BranchType.UnresolvedBranch + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.CallingConventionName.rst.txt b/personal/api-docs/_sources/binaryninja.enums.CallingConventionName.rst.txt new file mode 100644 index 0000000..1024dc4 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.CallingConventionName.rst.txt @@ -0,0 +1,30 @@ +binaryninja.enums.CallingConventionName +======================================= + +.. currentmodule:: binaryninja.enums + +.. autoclass:: CallingConventionName + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~CallingConventionName.CLRCallCallingConvention + ~CallingConventionName.CdeclCallingConvention + ~CallingConventionName.EabiCallCallingConvention + ~CallingConventionName.FastcallCallingConvention + ~CallingConventionName.NoCallingConvention + ~CallingConventionName.PascalCallingConvention + ~CallingConventionName.STDCallCallingConvention + ~CallingConventionName.ThisCallCallingConvention + ~CallingConventionName.VectorCallCallingConvention + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.DisassemblyOption.rst.txt b/personal/api-docs/_sources/binaryninja.enums.DisassemblyOption.rst.txt new file mode 100644 index 0000000..2e21c5d --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.DisassemblyOption.rst.txt @@ -0,0 +1,31 @@ +binaryninja.enums.DisassemblyOption +=================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: DisassemblyOption + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~DisassemblyOption.ExpandLongOpcode + ~DisassemblyOption.GroupLinearDisassemblyFunctions + ~DisassemblyOption.ShowAddress + ~DisassemblyOption.ShowCallParameterNames + ~DisassemblyOption.ShowDefaultRegisterTypes + ~DisassemblyOption.ShowFlagUsage + ~DisassemblyOption.ShowOpcode + ~DisassemblyOption.ShowRegisterHighlight + ~DisassemblyOption.ShowVariableTypesWhenAssigned + ~DisassemblyOption.ShowVariablesAtTopOfGraph + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.Endianness.rst.txt b/personal/api-docs/_sources/binaryninja.enums.Endianness.rst.txt new file mode 100644 index 0000000..e36a4c4 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.Endianness.rst.txt @@ -0,0 +1,23 @@ +binaryninja.enums.Endianness +============================ + +.. currentmodule:: binaryninja.enums + +.. autoclass:: Endianness + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Endianness.BigEndian + ~Endianness.LittleEndian + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.FindFlag.rst.txt b/personal/api-docs/_sources/binaryninja.enums.FindFlag.rst.txt new file mode 100644 index 0000000..02e0103 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.FindFlag.rst.txt @@ -0,0 +1,23 @@ +binaryninja.enums.FindFlag +========================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: FindFlag + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~FindFlag.FindCaseInsensitive + ~FindFlag.FindCaseSensitive + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.FlagRole.rst.txt b/personal/api-docs/_sources/binaryninja.enums.FlagRole.rst.txt new file mode 100644 index 0000000..723c8ff --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.FlagRole.rst.txt @@ -0,0 +1,32 @@ +binaryninja.enums.FlagRole +========================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: FlagRole + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~FlagRole.CarryFlagRole + ~FlagRole.EvenParityFlagRole + ~FlagRole.HalfCarryFlagRole + ~FlagRole.NegativeSignFlagRole + ~FlagRole.OddParityFlagRole + ~FlagRole.OrderedFlagRole + ~FlagRole.OverflowFlagRole + ~FlagRole.PositiveSignFlagRole + ~FlagRole.SpecialFlagRole + ~FlagRole.UnorderedFlagRole + ~FlagRole.ZeroFlagRole + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.FormInputFieldType.rst.txt b/personal/api-docs/_sources/binaryninja.enums.FormInputFieldType.rst.txt new file mode 100644 index 0000000..954751b --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.FormInputFieldType.rst.txt @@ -0,0 +1,31 @@ +binaryninja.enums.FormInputFieldType +==================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: FormInputFieldType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~FormInputFieldType.AddressFormField + ~FormInputFieldType.ChoiceFormField + ~FormInputFieldType.DirectoryNameFormField + ~FormInputFieldType.IntegerFormField + ~FormInputFieldType.LabelFormField + ~FormInputFieldType.MultilineTextFormField + ~FormInputFieldType.OpenFileNameFormField + ~FormInputFieldType.SaveFileNameFormField + ~FormInputFieldType.SeparatorFormField + ~FormInputFieldType.TextLineFormField + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.FunctionAnalysisSkipOverride.rst.txt b/personal/api-docs/_sources/binaryninja.enums.FunctionAnalysisSkipOverride.rst.txt new file mode 100644 index 0000000..01ef400 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.FunctionAnalysisSkipOverride.rst.txt @@ -0,0 +1,24 @@ +binaryninja.enums.FunctionAnalysisSkipOverride +============================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: FunctionAnalysisSkipOverride + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~FunctionAnalysisSkipOverride.AlwaysSkipFunctionAnalysis + ~FunctionAnalysisSkipOverride.DefaultFunctionAnalysisSkip + ~FunctionAnalysisSkipOverride.NeverSkipFunctionAnalysis + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.FunctionGraphType.rst.txt b/personal/api-docs/_sources/binaryninja.enums.FunctionGraphType.rst.txt new file mode 100644 index 0000000..f93d953 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.FunctionGraphType.rst.txt @@ -0,0 +1,29 @@ +binaryninja.enums.FunctionGraphType +=================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: FunctionGraphType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~FunctionGraphType.LiftedILFunctionGraph + ~FunctionGraphType.LowLevelILFunctionGraph + ~FunctionGraphType.LowLevelILSSAFormFunctionGraph + ~FunctionGraphType.MappedMediumLevelILFunctionGraph + ~FunctionGraphType.MappedMediumLevelILSSAFormFunctionGraph + ~FunctionGraphType.MediumLevelILFunctionGraph + ~FunctionGraphType.MediumLevelILSSAFormFunctionGraph + ~FunctionGraphType.NormalFunctionGraph + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.HighlightColorStyle.rst.txt b/personal/api-docs/_sources/binaryninja.enums.HighlightColorStyle.rst.txt new file mode 100644 index 0000000..0ae9282 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.HighlightColorStyle.rst.txt @@ -0,0 +1,24 @@ +binaryninja.enums.HighlightColorStyle +===================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: HighlightColorStyle + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~HighlightColorStyle.CustomHighlightColor + ~HighlightColorStyle.MixedHighlightColor + ~HighlightColorStyle.StandardHighlightColor + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.HighlightStandardColor.rst.txt b/personal/api-docs/_sources/binaryninja.enums.HighlightStandardColor.rst.txt new file mode 100644 index 0000000..2592d1a --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.HighlightStandardColor.rst.txt @@ -0,0 +1,31 @@ +binaryninja.enums.HighlightStandardColor +======================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: HighlightStandardColor + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~HighlightStandardColor.BlackHighlightColor + ~HighlightStandardColor.BlueHighlightColor + ~HighlightStandardColor.CyanHighlightColor + ~HighlightStandardColor.GreenHighlightColor + ~HighlightStandardColor.MagentaHighlightColor + ~HighlightStandardColor.NoHighlightColor + ~HighlightStandardColor.OrangeHighlightColor + ~HighlightStandardColor.RedHighlightColor + ~HighlightStandardColor.WhiteHighlightColor + ~HighlightStandardColor.YellowHighlightColor + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.ILBranchDependence.rst.txt b/personal/api-docs/_sources/binaryninja.enums.ILBranchDependence.rst.txt new file mode 100644 index 0000000..ae26f25 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.ILBranchDependence.rst.txt @@ -0,0 +1,24 @@ +binaryninja.enums.ILBranchDependence +==================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: ILBranchDependence + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~ILBranchDependence.FalseBranchDependent + ~ILBranchDependence.NotBranchDependent + ~ILBranchDependence.TrueBranchDependent + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.ImplicitRegisterExtend.rst.txt b/personal/api-docs/_sources/binaryninja.enums.ImplicitRegisterExtend.rst.txt new file mode 100644 index 0000000..94283f5 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.ImplicitRegisterExtend.rst.txt @@ -0,0 +1,24 @@ +binaryninja.enums.ImplicitRegisterExtend +======================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: ImplicitRegisterExtend + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~ImplicitRegisterExtend.NoExtend + ~ImplicitRegisterExtend.SignExtendToFullWidth + ~ImplicitRegisterExtend.ZeroExtendToFullWidth + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.InstructionTextTokenContext.rst.txt b/personal/api-docs/_sources/binaryninja.enums.InstructionTextTokenContext.rst.txt new file mode 100644 index 0000000..fc3c413 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.InstructionTextTokenContext.rst.txt @@ -0,0 +1,25 @@ +binaryninja.enums.InstructionTextTokenContext +============================================= + +.. currentmodule:: binaryninja.enums + +.. autoclass:: InstructionTextTokenContext + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~InstructionTextTokenContext.DataVariableTokenContext + ~InstructionTextTokenContext.FunctionReturnTokenContext + ~InstructionTextTokenContext.LocalVariableTokenContext + ~InstructionTextTokenContext.NoTokenContext + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.InstructionTextTokenType.rst.txt b/personal/api-docs/_sources/binaryninja.enums.InstructionTextTokenType.rst.txt new file mode 100644 index 0000000..f79e16b --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.InstructionTextTokenType.rst.txt @@ -0,0 +1,52 @@ +binaryninja.enums.InstructionTextTokenType +========================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: InstructionTextTokenType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~InstructionTextTokenType.AddressDisplayToken + ~InstructionTextTokenType.AnnotationToken + ~InstructionTextTokenType.ArgumentNameToken + ~InstructionTextTokenType.BeginMemoryOperandToken + ~InstructionTextTokenType.CharacterConstantToken + ~InstructionTextTokenType.CodeRelativeAddressToken + ~InstructionTextTokenType.CodeSymbolToken + ~InstructionTextTokenType.DataSymbolToken + ~InstructionTextTokenType.EndMemoryOperandToken + ~InstructionTextTokenType.ExternalSymbolToken + ~InstructionTextTokenType.FieldNameToken + ~InstructionTextTokenType.FloatingPointToken + ~InstructionTextTokenType.HexDumpByteValueToken + ~InstructionTextTokenType.HexDumpInvalidByteToken + ~InstructionTextTokenType.HexDumpSkippedByteToken + ~InstructionTextTokenType.HexDumpTextToken + ~InstructionTextTokenType.ImportToken + ~InstructionTextTokenType.IndirectImportToken + ~InstructionTextTokenType.InstructionToken + ~InstructionTextTokenType.IntegerToken + ~InstructionTextTokenType.KeywordToken + ~InstructionTextTokenType.LocalVariableToken + ~InstructionTextTokenType.NameSpaceSeparatorToken + ~InstructionTextTokenType.NameSpaceToken + ~InstructionTextTokenType.OpcodeToken + ~InstructionTextTokenType.OperandSeparatorToken + ~InstructionTextTokenType.PossibleAddressToken + ~InstructionTextTokenType.RegisterToken + ~InstructionTextTokenType.StringToken + ~InstructionTextTokenType.TextToken + ~InstructionTextTokenType.TypeNameToken + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.IntegerDisplayType.rst.txt b/personal/api-docs/_sources/binaryninja.enums.IntegerDisplayType.rst.txt new file mode 100644 index 0000000..ce2e9eb --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.IntegerDisplayType.rst.txt @@ -0,0 +1,31 @@ +binaryninja.enums.IntegerDisplayType +==================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: IntegerDisplayType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~IntegerDisplayType.BinaryDisplayType + ~IntegerDisplayType.CharacterConstantDisplayType + ~IntegerDisplayType.DefaultIntegerDisplayType + ~IntegerDisplayType.PointerDisplayType + ~IntegerDisplayType.SignedDecimalDisplayType + ~IntegerDisplayType.SignedHexadecimalDisplayType + ~IntegerDisplayType.SignedOctalDisplayType + ~IntegerDisplayType.UnsignedDecimalDisplayType + ~IntegerDisplayType.UnsignedHexadecimalDisplayType + ~IntegerDisplayType.UnsignedOctalDisplayType + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.LinearDisassemblyLineType.rst.txt b/personal/api-docs/_sources/binaryninja.enums.LinearDisassemblyLineType.rst.txt new file mode 100644 index 0000000..9d254e9 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.LinearDisassemblyLineType.rst.txt @@ -0,0 +1,39 @@ +binaryninja.enums.LinearDisassemblyLineType +=========================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: LinearDisassemblyLineType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~LinearDisassemblyLineType.BlankLineType + ~LinearDisassemblyLineType.CodeDisassemblyLineType + ~LinearDisassemblyLineType.DataVariableLineType + ~LinearDisassemblyLineType.FunctionContinuationLineType + ~LinearDisassemblyLineType.FunctionEndLineType + ~LinearDisassemblyLineType.FunctionHeaderEndLineType + ~LinearDisassemblyLineType.FunctionHeaderLineType + ~LinearDisassemblyLineType.FunctionHeaderStartLineType + ~LinearDisassemblyLineType.HexDumpLineType + ~LinearDisassemblyLineType.LocalVariableLineType + ~LinearDisassemblyLineType.LocalVariableListEndLineType + ~LinearDisassemblyLineType.NonContiguousSeparatorLineType + ~LinearDisassemblyLineType.NoteEndLineType + ~LinearDisassemblyLineType.NoteLineType + ~LinearDisassemblyLineType.NoteStartLineType + ~LinearDisassemblyLineType.SectionEndLineType + ~LinearDisassemblyLineType.SectionSeparatorLineType + ~LinearDisassemblyLineType.SectionStartLineType + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.LogLevel.rst.txt b/personal/api-docs/_sources/binaryninja.enums.LogLevel.rst.txt new file mode 100644 index 0000000..7f86895 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.LogLevel.rst.txt @@ -0,0 +1,26 @@ +binaryninja.enums.LogLevel +========================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: LogLevel + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~LogLevel.AlertLog + ~LogLevel.DebugLog + ~LogLevel.ErrorLog + ~LogLevel.InfoLog + ~LogLevel.WarningLog + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.LowLevelILFlagCondition.rst.txt b/personal/api-docs/_sources/binaryninja.enums.LowLevelILFlagCondition.rst.txt new file mode 100644 index 0000000..9836066 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.LowLevelILFlagCondition.rst.txt @@ -0,0 +1,43 @@ +binaryninja.enums.LowLevelILFlagCondition +========================================= + +.. currentmodule:: binaryninja.enums + +.. autoclass:: LowLevelILFlagCondition + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~LowLevelILFlagCondition.LLFC_E + ~LowLevelILFlagCondition.LLFC_FE + ~LowLevelILFlagCondition.LLFC_FGE + ~LowLevelILFlagCondition.LLFC_FGT + ~LowLevelILFlagCondition.LLFC_FLE + ~LowLevelILFlagCondition.LLFC_FLT + ~LowLevelILFlagCondition.LLFC_FNE + ~LowLevelILFlagCondition.LLFC_FO + ~LowLevelILFlagCondition.LLFC_FUO + ~LowLevelILFlagCondition.LLFC_NE + ~LowLevelILFlagCondition.LLFC_NEG + ~LowLevelILFlagCondition.LLFC_NO + ~LowLevelILFlagCondition.LLFC_O + ~LowLevelILFlagCondition.LLFC_POS + ~LowLevelILFlagCondition.LLFC_SGE + ~LowLevelILFlagCondition.LLFC_SGT + ~LowLevelILFlagCondition.LLFC_SLE + ~LowLevelILFlagCondition.LLFC_SLT + ~LowLevelILFlagCondition.LLFC_UGE + ~LowLevelILFlagCondition.LLFC_UGT + ~LowLevelILFlagCondition.LLFC_ULE + ~LowLevelILFlagCondition.LLFC_ULT + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.LowLevelILOperation.rst.txt b/personal/api-docs/_sources/binaryninja.enums.LowLevelILOperation.rst.txt new file mode 100644 index 0000000..a7581de --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.LowLevelILOperation.rst.txt @@ -0,0 +1,156 @@ +binaryninja.enums.LowLevelILOperation +===================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: LowLevelILOperation + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~LowLevelILOperation.LLIL_ADC + ~LowLevelILOperation.LLIL_ADD + ~LowLevelILOperation.LLIL_ADD_OVERFLOW + ~LowLevelILOperation.LLIL_AND + ~LowLevelILOperation.LLIL_ASR + ~LowLevelILOperation.LLIL_BOOL_TO_INT + ~LowLevelILOperation.LLIL_BP + ~LowLevelILOperation.LLIL_CALL + ~LowLevelILOperation.LLIL_CALL_OUTPUT_SSA + ~LowLevelILOperation.LLIL_CALL_PARAM + ~LowLevelILOperation.LLIL_CALL_SSA + ~LowLevelILOperation.LLIL_CALL_STACK_ADJUST + ~LowLevelILOperation.LLIL_CALL_STACK_SSA + ~LowLevelILOperation.LLIL_CEIL + ~LowLevelILOperation.LLIL_CMP_E + ~LowLevelILOperation.LLIL_CMP_NE + ~LowLevelILOperation.LLIL_CMP_SGE + ~LowLevelILOperation.LLIL_CMP_SGT + ~LowLevelILOperation.LLIL_CMP_SLE + ~LowLevelILOperation.LLIL_CMP_SLT + ~LowLevelILOperation.LLIL_CMP_UGE + ~LowLevelILOperation.LLIL_CMP_UGT + ~LowLevelILOperation.LLIL_CMP_ULE + ~LowLevelILOperation.LLIL_CMP_ULT + ~LowLevelILOperation.LLIL_CONST + ~LowLevelILOperation.LLIL_CONST_PTR + ~LowLevelILOperation.LLIL_DIVS + ~LowLevelILOperation.LLIL_DIVS_DP + ~LowLevelILOperation.LLIL_DIVU + ~LowLevelILOperation.LLIL_DIVU_DP + ~LowLevelILOperation.LLIL_EXTERN_PTR + ~LowLevelILOperation.LLIL_FABS + ~LowLevelILOperation.LLIL_FADD + ~LowLevelILOperation.LLIL_FCMP_E + ~LowLevelILOperation.LLIL_FCMP_GE + ~LowLevelILOperation.LLIL_FCMP_GT + ~LowLevelILOperation.LLIL_FCMP_LE + ~LowLevelILOperation.LLIL_FCMP_LT + ~LowLevelILOperation.LLIL_FCMP_NE + ~LowLevelILOperation.LLIL_FCMP_O + ~LowLevelILOperation.LLIL_FCMP_UO + ~LowLevelILOperation.LLIL_FDIV + ~LowLevelILOperation.LLIL_FLAG + ~LowLevelILOperation.LLIL_FLAG_BIT + ~LowLevelILOperation.LLIL_FLAG_BIT_SSA + ~LowLevelILOperation.LLIL_FLAG_COND + ~LowLevelILOperation.LLIL_FLAG_GROUP + ~LowLevelILOperation.LLIL_FLAG_PHI + ~LowLevelILOperation.LLIL_FLAG_SSA + ~LowLevelILOperation.LLIL_FLOAT_CONST + ~LowLevelILOperation.LLIL_FLOAT_CONV + ~LowLevelILOperation.LLIL_FLOAT_TO_INT + ~LowLevelILOperation.LLIL_FLOOR + ~LowLevelILOperation.LLIL_FMUL + ~LowLevelILOperation.LLIL_FNEG + ~LowLevelILOperation.LLIL_FSQRT + ~LowLevelILOperation.LLIL_FSUB + ~LowLevelILOperation.LLIL_FTRUNC + ~LowLevelILOperation.LLIL_GOTO + ~LowLevelILOperation.LLIL_IF + ~LowLevelILOperation.LLIL_INTRINSIC + ~LowLevelILOperation.LLIL_INTRINSIC_SSA + ~LowLevelILOperation.LLIL_INT_TO_FLOAT + ~LowLevelILOperation.LLIL_JUMP + ~LowLevelILOperation.LLIL_JUMP_TO + ~LowLevelILOperation.LLIL_LOAD + ~LowLevelILOperation.LLIL_LOAD_SSA + ~LowLevelILOperation.LLIL_LOW_PART + ~LowLevelILOperation.LLIL_LSL + ~LowLevelILOperation.LLIL_LSR + ~LowLevelILOperation.LLIL_MEM_PHI + ~LowLevelILOperation.LLIL_MODS + ~LowLevelILOperation.LLIL_MODS_DP + ~LowLevelILOperation.LLIL_MODU + ~LowLevelILOperation.LLIL_MODU_DP + ~LowLevelILOperation.LLIL_MUL + ~LowLevelILOperation.LLIL_MULS_DP + ~LowLevelILOperation.LLIL_MULU_DP + ~LowLevelILOperation.LLIL_NEG + ~LowLevelILOperation.LLIL_NOP + ~LowLevelILOperation.LLIL_NORET + ~LowLevelILOperation.LLIL_NOT + ~LowLevelILOperation.LLIL_OR + ~LowLevelILOperation.LLIL_POP + ~LowLevelILOperation.LLIL_PUSH + ~LowLevelILOperation.LLIL_REG + ~LowLevelILOperation.LLIL_REG_PHI + ~LowLevelILOperation.LLIL_REG_SPLIT + ~LowLevelILOperation.LLIL_REG_SPLIT_DEST_SSA + ~LowLevelILOperation.LLIL_REG_SPLIT_SSA + ~LowLevelILOperation.LLIL_REG_SSA + ~LowLevelILOperation.LLIL_REG_SSA_PARTIAL + ~LowLevelILOperation.LLIL_REG_STACK_ABS_SSA + ~LowLevelILOperation.LLIL_REG_STACK_DEST_SSA + ~LowLevelILOperation.LLIL_REG_STACK_FREE_ABS_SSA + ~LowLevelILOperation.LLIL_REG_STACK_FREE_REG + ~LowLevelILOperation.LLIL_REG_STACK_FREE_REL + ~LowLevelILOperation.LLIL_REG_STACK_FREE_REL_SSA + ~LowLevelILOperation.LLIL_REG_STACK_PHI + ~LowLevelILOperation.LLIL_REG_STACK_POP + ~LowLevelILOperation.LLIL_REG_STACK_PUSH + ~LowLevelILOperation.LLIL_REG_STACK_REL + ~LowLevelILOperation.LLIL_REG_STACK_REL_SSA + ~LowLevelILOperation.LLIL_RET + ~LowLevelILOperation.LLIL_RLC + ~LowLevelILOperation.LLIL_ROL + ~LowLevelILOperation.LLIL_ROR + ~LowLevelILOperation.LLIL_ROUND_TO_INT + ~LowLevelILOperation.LLIL_RRC + ~LowLevelILOperation.LLIL_SBB + ~LowLevelILOperation.LLIL_SET_FLAG + ~LowLevelILOperation.LLIL_SET_FLAG_SSA + ~LowLevelILOperation.LLIL_SET_REG + ~LowLevelILOperation.LLIL_SET_REG_SPLIT + ~LowLevelILOperation.LLIL_SET_REG_SPLIT_SSA + ~LowLevelILOperation.LLIL_SET_REG_SSA + ~LowLevelILOperation.LLIL_SET_REG_SSA_PARTIAL + ~LowLevelILOperation.LLIL_SET_REG_STACK_ABS_SSA + ~LowLevelILOperation.LLIL_SET_REG_STACK_REL + ~LowLevelILOperation.LLIL_SET_REG_STACK_REL_SSA + ~LowLevelILOperation.LLIL_STORE + ~LowLevelILOperation.LLIL_STORE_SSA + ~LowLevelILOperation.LLIL_SUB + ~LowLevelILOperation.LLIL_SX + ~LowLevelILOperation.LLIL_SYSCALL + ~LowLevelILOperation.LLIL_SYSCALL_SSA + ~LowLevelILOperation.LLIL_TAILCALL + ~LowLevelILOperation.LLIL_TAILCALL_SSA + ~LowLevelILOperation.LLIL_TEST_BIT + ~LowLevelILOperation.LLIL_TRAP + ~LowLevelILOperation.LLIL_UNDEF + ~LowLevelILOperation.LLIL_UNIMPL + ~LowLevelILOperation.LLIL_UNIMPL_MEM + ~LowLevelILOperation.LLIL_XOR + ~LowLevelILOperation.LLIL_ZX + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.MediumLevelILOperation.rst.txt b/personal/api-docs/_sources/binaryninja.enums.MediumLevelILOperation.rst.txt new file mode 100644 index 0000000..be2277b --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.MediumLevelILOperation.rst.txt @@ -0,0 +1,152 @@ +binaryninja.enums.MediumLevelILOperation +======================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: MediumLevelILOperation + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~MediumLevelILOperation.MLIL_ADC + ~MediumLevelILOperation.MLIL_ADD + ~MediumLevelILOperation.MLIL_ADDRESS_OF + ~MediumLevelILOperation.MLIL_ADDRESS_OF_FIELD + ~MediumLevelILOperation.MLIL_ADD_OVERFLOW + ~MediumLevelILOperation.MLIL_AND + ~MediumLevelILOperation.MLIL_ASR + ~MediumLevelILOperation.MLIL_BOOL_TO_INT + ~MediumLevelILOperation.MLIL_BP + ~MediumLevelILOperation.MLIL_CALL + ~MediumLevelILOperation.MLIL_CALL_OUTPUT + ~MediumLevelILOperation.MLIL_CALL_OUTPUT_SSA + ~MediumLevelILOperation.MLIL_CALL_PARAM + ~MediumLevelILOperation.MLIL_CALL_PARAM_SSA + ~MediumLevelILOperation.MLIL_CALL_SSA + ~MediumLevelILOperation.MLIL_CALL_UNTYPED + ~MediumLevelILOperation.MLIL_CALL_UNTYPED_SSA + ~MediumLevelILOperation.MLIL_CEIL + ~MediumLevelILOperation.MLIL_CMP_E + ~MediumLevelILOperation.MLIL_CMP_NE + ~MediumLevelILOperation.MLIL_CMP_SGE + ~MediumLevelILOperation.MLIL_CMP_SGT + ~MediumLevelILOperation.MLIL_CMP_SLE + ~MediumLevelILOperation.MLIL_CMP_SLT + ~MediumLevelILOperation.MLIL_CMP_UGE + ~MediumLevelILOperation.MLIL_CMP_UGT + ~MediumLevelILOperation.MLIL_CMP_ULE + ~MediumLevelILOperation.MLIL_CMP_ULT + ~MediumLevelILOperation.MLIL_CONST + ~MediumLevelILOperation.MLIL_CONST_PTR + ~MediumLevelILOperation.MLIL_DIVS + ~MediumLevelILOperation.MLIL_DIVS_DP + ~MediumLevelILOperation.MLIL_DIVU + ~MediumLevelILOperation.MLIL_DIVU_DP + ~MediumLevelILOperation.MLIL_EXTERN_PTR + ~MediumLevelILOperation.MLIL_FABS + ~MediumLevelILOperation.MLIL_FADD + ~MediumLevelILOperation.MLIL_FCMP_E + ~MediumLevelILOperation.MLIL_FCMP_GE + ~MediumLevelILOperation.MLIL_FCMP_GT + ~MediumLevelILOperation.MLIL_FCMP_LE + ~MediumLevelILOperation.MLIL_FCMP_LT + ~MediumLevelILOperation.MLIL_FCMP_NE + ~MediumLevelILOperation.MLIL_FCMP_O + ~MediumLevelILOperation.MLIL_FCMP_UO + ~MediumLevelILOperation.MLIL_FDIV + ~MediumLevelILOperation.MLIL_FLOAT_CONST + ~MediumLevelILOperation.MLIL_FLOAT_CONV + ~MediumLevelILOperation.MLIL_FLOAT_TO_INT + ~MediumLevelILOperation.MLIL_FLOOR + ~MediumLevelILOperation.MLIL_FMUL + ~MediumLevelILOperation.MLIL_FNEG + ~MediumLevelILOperation.MLIL_FREE_VAR_SLOT + ~MediumLevelILOperation.MLIL_FREE_VAR_SLOT_SSA + ~MediumLevelILOperation.MLIL_FSQRT + ~MediumLevelILOperation.MLIL_FSUB + ~MediumLevelILOperation.MLIL_FTRUNC + ~MediumLevelILOperation.MLIL_GOTO + ~MediumLevelILOperation.MLIL_IF + ~MediumLevelILOperation.MLIL_IMPORT + ~MediumLevelILOperation.MLIL_INTRINSIC + ~MediumLevelILOperation.MLIL_INTRINSIC_SSA + ~MediumLevelILOperation.MLIL_INT_TO_FLOAT + ~MediumLevelILOperation.MLIL_JUMP + ~MediumLevelILOperation.MLIL_JUMP_TO + ~MediumLevelILOperation.MLIL_LOAD + ~MediumLevelILOperation.MLIL_LOAD_SSA + ~MediumLevelILOperation.MLIL_LOAD_STRUCT + ~MediumLevelILOperation.MLIL_LOAD_STRUCT_SSA + ~MediumLevelILOperation.MLIL_LOW_PART + ~MediumLevelILOperation.MLIL_LSL + ~MediumLevelILOperation.MLIL_LSR + ~MediumLevelILOperation.MLIL_MEM_PHI + ~MediumLevelILOperation.MLIL_MODS + ~MediumLevelILOperation.MLIL_MODS_DP + ~MediumLevelILOperation.MLIL_MODU + ~MediumLevelILOperation.MLIL_MODU_DP + ~MediumLevelILOperation.MLIL_MUL + ~MediumLevelILOperation.MLIL_MULS_DP + ~MediumLevelILOperation.MLIL_MULU_DP + ~MediumLevelILOperation.MLIL_NEG + ~MediumLevelILOperation.MLIL_NOP + ~MediumLevelILOperation.MLIL_NORET + ~MediumLevelILOperation.MLIL_NOT + ~MediumLevelILOperation.MLIL_OR + ~MediumLevelILOperation.MLIL_RET + ~MediumLevelILOperation.MLIL_RET_HINT + ~MediumLevelILOperation.MLIL_RLC + ~MediumLevelILOperation.MLIL_ROL + ~MediumLevelILOperation.MLIL_ROR + ~MediumLevelILOperation.MLIL_ROUND_TO_INT + ~MediumLevelILOperation.MLIL_RRC + ~MediumLevelILOperation.MLIL_SBB + ~MediumLevelILOperation.MLIL_SET_VAR + ~MediumLevelILOperation.MLIL_SET_VAR_ALIASED + ~MediumLevelILOperation.MLIL_SET_VAR_ALIASED_FIELD + ~MediumLevelILOperation.MLIL_SET_VAR_FIELD + ~MediumLevelILOperation.MLIL_SET_VAR_SPLIT + ~MediumLevelILOperation.MLIL_SET_VAR_SPLIT_SSA + ~MediumLevelILOperation.MLIL_SET_VAR_SSA + ~MediumLevelILOperation.MLIL_SET_VAR_SSA_FIELD + ~MediumLevelILOperation.MLIL_STORE + ~MediumLevelILOperation.MLIL_STORE_SSA + ~MediumLevelILOperation.MLIL_STORE_STRUCT + ~MediumLevelILOperation.MLIL_STORE_STRUCT_SSA + ~MediumLevelILOperation.MLIL_SUB + ~MediumLevelILOperation.MLIL_SX + ~MediumLevelILOperation.MLIL_SYSCALL + ~MediumLevelILOperation.MLIL_SYSCALL_SSA + ~MediumLevelILOperation.MLIL_SYSCALL_UNTYPED + ~MediumLevelILOperation.MLIL_SYSCALL_UNTYPED_SSA + ~MediumLevelILOperation.MLIL_TAILCALL + ~MediumLevelILOperation.MLIL_TAILCALL_SSA + ~MediumLevelILOperation.MLIL_TAILCALL_UNTYPED + ~MediumLevelILOperation.MLIL_TAILCALL_UNTYPED_SSA + ~MediumLevelILOperation.MLIL_TEST_BIT + ~MediumLevelILOperation.MLIL_TRAP + ~MediumLevelILOperation.MLIL_UNDEF + ~MediumLevelILOperation.MLIL_UNIMPL + ~MediumLevelILOperation.MLIL_UNIMPL_MEM + ~MediumLevelILOperation.MLIL_VAR + ~MediumLevelILOperation.MLIL_VAR_ALIASED + ~MediumLevelILOperation.MLIL_VAR_ALIASED_FIELD + ~MediumLevelILOperation.MLIL_VAR_FIELD + ~MediumLevelILOperation.MLIL_VAR_PHI + ~MediumLevelILOperation.MLIL_VAR_SPLIT + ~MediumLevelILOperation.MLIL_VAR_SPLIT_SSA + ~MediumLevelILOperation.MLIL_VAR_SSA + ~MediumLevelILOperation.MLIL_VAR_SSA_FIELD + ~MediumLevelILOperation.MLIL_XOR + ~MediumLevelILOperation.MLIL_ZX + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.MemberAccess.rst.txt b/personal/api-docs/_sources/binaryninja.enums.MemberAccess.rst.txt new file mode 100644 index 0000000..793f4bf --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.MemberAccess.rst.txt @@ -0,0 +1,25 @@ +binaryninja.enums.MemberAccess +============================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: MemberAccess + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~MemberAccess.NoAccess + ~MemberAccess.PrivateAccess + ~MemberAccess.ProtectedAccess + ~MemberAccess.PublicAccess + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.MemberScope.rst.txt b/personal/api-docs/_sources/binaryninja.enums.MemberScope.rst.txt new file mode 100644 index 0000000..332bf7b --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.MemberScope.rst.txt @@ -0,0 +1,26 @@ +binaryninja.enums.MemberScope +============================= + +.. currentmodule:: binaryninja.enums + +.. autoclass:: MemberScope + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~MemberScope.FriendScope + ~MemberScope.NoScope + ~MemberScope.StaticScope + ~MemberScope.ThunkScope + ~MemberScope.VirtualScope + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.MessageBoxButtonResult.rst.txt b/personal/api-docs/_sources/binaryninja.enums.MessageBoxButtonResult.rst.txt new file mode 100644 index 0000000..3f061ad --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.MessageBoxButtonResult.rst.txt @@ -0,0 +1,25 @@ +binaryninja.enums.MessageBoxButtonResult +======================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: MessageBoxButtonResult + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~MessageBoxButtonResult.CancelButton + ~MessageBoxButtonResult.NoButton + ~MessageBoxButtonResult.OKButton + ~MessageBoxButtonResult.YesButton + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.MessageBoxButtonSet.rst.txt b/personal/api-docs/_sources/binaryninja.enums.MessageBoxButtonSet.rst.txt new file mode 100644 index 0000000..11b4fab --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.MessageBoxButtonSet.rst.txt @@ -0,0 +1,24 @@ +binaryninja.enums.MessageBoxButtonSet +===================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: MessageBoxButtonSet + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~MessageBoxButtonSet.OKButtonSet + ~MessageBoxButtonSet.YesNoButtonSet + ~MessageBoxButtonSet.YesNoCancelButtonSet + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.MessageBoxIcon.rst.txt b/personal/api-docs/_sources/binaryninja.enums.MessageBoxIcon.rst.txt new file mode 100644 index 0000000..42bed20 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.MessageBoxIcon.rst.txt @@ -0,0 +1,25 @@ +binaryninja.enums.MessageBoxIcon +================================ + +.. currentmodule:: binaryninja.enums + +.. autoclass:: MessageBoxIcon + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~MessageBoxIcon.ErrorIcon + ~MessageBoxIcon.InformationIcon + ~MessageBoxIcon.QuestionIcon + ~MessageBoxIcon.WarningIcon + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.MetadataType.rst.txt b/personal/api-docs/_sources/binaryninja.enums.MetadataType.rst.txt new file mode 100644 index 0000000..57539a3 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.MetadataType.rst.txt @@ -0,0 +1,30 @@ +binaryninja.enums.MetadataType +============================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: MetadataType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~MetadataType.ArrayDataType + ~MetadataType.BooleanDataType + ~MetadataType.DoubleDataType + ~MetadataType.InvalidDataType + ~MetadataType.KeyValueDataType + ~MetadataType.RawDataType + ~MetadataType.SignedIntegerDataType + ~MetadataType.StringDataType + ~MetadataType.UnsignedIntegerDataType + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.ModificationStatus.rst.txt b/personal/api-docs/_sources/binaryninja.enums.ModificationStatus.rst.txt new file mode 100644 index 0000000..9e44698 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.ModificationStatus.rst.txt @@ -0,0 +1,24 @@ +binaryninja.enums.ModificationStatus +==================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: ModificationStatus + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~ModificationStatus.Changed + ~ModificationStatus.Inserted + ~ModificationStatus.Original + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.NameType.rst.txt b/personal/api-docs/_sources/binaryninja.enums.NameType.rst.txt new file mode 100644 index 0000000..26b3435 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.NameType.rst.txt @@ -0,0 +1,99 @@ +binaryninja.enums.NameType +========================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: NameType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~NameType.ConstructorNameType + ~NameType.CopyConstructorClosureNameType + ~NameType.DefaultConstructorClosureNameType + ~NameType.DestructorNameType + ~NameType.EHVectorConstructorIteratorNameType + ~NameType.EHVectorDestructorIteratorNameType + ~NameType.EHVectorVBaseConstructorIteratorNameType + ~NameType.LocalStaticGuardNameType + ~NameType.LocalVFTableConstructorClosureNameType + ~NameType.LocalVFTableNameType + ~NameType.NoNameType + ~NameType.OperatorAndEqualNameType + ~NameType.OperatorArrayNameType + ~NameType.OperatorArrowNameType + ~NameType.OperatorArrowStarNameType + ~NameType.OperatorAssignNameType + ~NameType.OperatorBitAndNameType + ~NameType.OperatorBitOrNameType + ~NameType.OperatorCommaNameType + ~NameType.OperatorDecrementNameType + ~NameType.OperatorDeleteArrayNameType + ~NameType.OperatorDeleteNameType + ~NameType.OperatorDivideEqualNameType + ~NameType.OperatorDivideNameType + ~NameType.OperatorEqualNameType + ~NameType.OperatorGreaterThanEqualNameType + ~NameType.OperatorGreaterThanNameType + ~NameType.OperatorIncrementNameType + ~NameType.OperatorLeftShiftEqualNameType + ~NameType.OperatorLeftShiftNameType + ~NameType.OperatorLessThanEqualNameType + ~NameType.OperatorLessThanNameType + ~NameType.OperatorLogicalAndNameType + ~NameType.OperatorLogicalOrNameType + ~NameType.OperatorMinusEqualNameType + ~NameType.OperatorMinusNameType + ~NameType.OperatorModulusEqualNameType + ~NameType.OperatorModulusNameType + ~NameType.OperatorNewArrayNameType + ~NameType.OperatorNewNameType + ~NameType.OperatorNotEqualNameType + ~NameType.OperatorNotNameType + ~NameType.OperatorOrEqualNameType + ~NameType.OperatorParenthesesNameType + ~NameType.OperatorPlusEqualNameType + ~NameType.OperatorPlusNameType + ~NameType.OperatorReturnTypeNameType + ~NameType.OperatorRightShiftEqualNameType + ~NameType.OperatorRightShiftNameType + ~NameType.OperatorStarEqualNameType + ~NameType.OperatorStarNameType + ~NameType.OperatorTildeNameType + ~NameType.OperatorUnaryBitAndNameType + ~NameType.OperatorUnaryMinusNameType + ~NameType.OperatorUnaryPlusNameType + ~NameType.OperatorUnaryStarNameType + ~NameType.OperatorXorEqualNameType + ~NameType.OperatorXorNameType + ~NameType.PlacementDeleteClosureArrayNameType + ~NameType.PlacementDeleteClosureNameType + ~NameType.RttiBaseClassArray + ~NameType.RttiBaseClassDescriptor + ~NameType.RttiClassHeirarchyDescriptor + ~NameType.RttiCompleteObjectLocator + ~NameType.RttiTypeDescriptor + ~NameType.ScalarDeletingDestructorNameType + ~NameType.StringNameType + ~NameType.TypeofNameType + ~NameType.UDTReturningNameType + ~NameType.VBTableNameType + ~NameType.VBaseDestructorNameType + ~NameType.VCallNameType + ~NameType.VFTableNameType + ~NameType.VectorConstructorIteratorNameType + ~NameType.VectorDeletingDestructorNameType + ~NameType.VectorDestructorIteratorNameType + ~NameType.VectorVBaseConstructorIteratoreNameType + ~NameType.VirtualDisplacementMapNameType + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.NamedTypeReferenceClass.rst.txt b/personal/api-docs/_sources/binaryninja.enums.NamedTypeReferenceClass.rst.txt new file mode 100644 index 0000000..be0263f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.NamedTypeReferenceClass.rst.txt @@ -0,0 +1,27 @@ +binaryninja.enums.NamedTypeReferenceClass +========================================= + +.. currentmodule:: binaryninja.enums + +.. autoclass:: NamedTypeReferenceClass + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~NamedTypeReferenceClass.ClassNamedTypeClass + ~NamedTypeReferenceClass.EnumNamedTypeClass + ~NamedTypeReferenceClass.StructNamedTypeClass + ~NamedTypeReferenceClass.TypedefNamedTypeClass + ~NamedTypeReferenceClass.UnionNamedTypeClass + ~NamedTypeReferenceClass.UnknownNamedTypeClass + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.PluginCommandType.rst.txt b/personal/api-docs/_sources/binaryninja.enums.PluginCommandType.rst.txt new file mode 100644 index 0000000..c982bc3 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.PluginCommandType.rst.txt @@ -0,0 +1,29 @@ +binaryninja.enums.PluginCommandType +=================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: PluginCommandType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~PluginCommandType.AddressPluginCommand + ~PluginCommandType.DefaultPluginCommand + ~PluginCommandType.FunctionPluginCommand + ~PluginCommandType.LowLevelILFunctionPluginCommand + ~PluginCommandType.LowLevelILInstructionPluginCommand + ~PluginCommandType.MediumLevelILFunctionPluginCommand + ~PluginCommandType.MediumLevelILInstructionPluginCommand + ~PluginCommandType.RangePluginCommand + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.PluginLoadOrder.rst.txt b/personal/api-docs/_sources/binaryninja.enums.PluginLoadOrder.rst.txt new file mode 100644 index 0000000..5bc1974 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.PluginLoadOrder.rst.txt @@ -0,0 +1,24 @@ +binaryninja.enums.PluginLoadOrder +================================= + +.. currentmodule:: binaryninja.enums + +.. autoclass:: PluginLoadOrder + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~PluginLoadOrder.EarlyPluginLoadOrder + ~PluginLoadOrder.LatePluginLoadOrder + ~PluginLoadOrder.NormalPluginLoadOrder + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.PluginOrigin.rst.txt b/personal/api-docs/_sources/binaryninja.enums.PluginOrigin.rst.txt new file mode 100644 index 0000000..a92ce70 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.PluginOrigin.rst.txt @@ -0,0 +1,24 @@ +binaryninja.enums.PluginOrigin +============================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: PluginOrigin + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~PluginOrigin.CommunityPluginOrigin + ~PluginOrigin.OfficialPluginOrigin + ~PluginOrigin.OtherPluginOrigin + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.PluginType.rst.txt b/personal/api-docs/_sources/binaryninja.enums.PluginType.rst.txt new file mode 100644 index 0000000..1c69f7a --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.PluginType.rst.txt @@ -0,0 +1,25 @@ +binaryninja.enums.PluginType +============================ + +.. currentmodule:: binaryninja.enums + +.. autoclass:: PluginType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~PluginType.ArchitecturePluginType + ~PluginType.BinaryViewPluginType + ~PluginType.CorePluginType + ~PluginType.UiPluginType + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.PluginUpdateStatus.rst.txt b/personal/api-docs/_sources/binaryninja.enums.PluginUpdateStatus.rst.txt new file mode 100644 index 0000000..e0efb16 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.PluginUpdateStatus.rst.txt @@ -0,0 +1,23 @@ +binaryninja.enums.PluginUpdateStatus +==================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: PluginUpdateStatus + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~PluginUpdateStatus.UpToDatePluginStatus + ~PluginUpdateStatus.UpdatesAvailablePluginStatus + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.PointerSuffix.rst.txt b/personal/api-docs/_sources/binaryninja.enums.PointerSuffix.rst.txt new file mode 100644 index 0000000..211f0ef --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.PointerSuffix.rst.txt @@ -0,0 +1,26 @@ +binaryninja.enums.PointerSuffix +=============================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: PointerSuffix + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~PointerSuffix.LvalueSuffix + ~PointerSuffix.Ptr64Suffix + ~PointerSuffix.ReferenceSuffix + ~PointerSuffix.RestrictSuffix + ~PointerSuffix.UnalignedSuffix + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.ReferenceType.rst.txt b/personal/api-docs/_sources/binaryninja.enums.ReferenceType.rst.txt new file mode 100644 index 0000000..20a7783 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.ReferenceType.rst.txt @@ -0,0 +1,25 @@ +binaryninja.enums.ReferenceType +=============================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: ReferenceType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~ReferenceType.NoReference + ~ReferenceType.PointerReferenceType + ~ReferenceType.RValueReferenceType + ~ReferenceType.ReferenceReferenceType + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.RegisterValueType.rst.txt b/personal/api-docs/_sources/binaryninja.enums.RegisterValueType.rst.txt new file mode 100644 index 0000000..d3f6929 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.RegisterValueType.rst.txt @@ -0,0 +1,34 @@ +binaryninja.enums.RegisterValueType +=================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: RegisterValueType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~RegisterValueType.ConstantPointerValue + ~RegisterValueType.ConstantValue + ~RegisterValueType.EntryValue + ~RegisterValueType.ExternalPointerValue + ~RegisterValueType.ImportedAddressValue + ~RegisterValueType.InSetOfValues + ~RegisterValueType.LookupTableValue + ~RegisterValueType.NotInSetOfValues + ~RegisterValueType.ReturnAddressValue + ~RegisterValueType.SignedRangeValue + ~RegisterValueType.StackFrameOffset + ~RegisterValueType.UndeterminedValue + ~RegisterValueType.UnsignedRangeValue + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.RelocationType.rst.txt b/personal/api-docs/_sources/binaryninja.enums.RelocationType.rst.txt new file mode 100644 index 0000000..1efacda --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.RelocationType.rst.txt @@ -0,0 +1,26 @@ +binaryninja.enums.RelocationType +================================ + +.. currentmodule:: binaryninja.enums + +.. autoclass:: RelocationType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~RelocationType.ELFCopyRelocationType + ~RelocationType.ELFGlobalRelocationType + ~RelocationType.ELFJumpSlotRelocationType + ~RelocationType.IgnoredRelocation + ~RelocationType.StandardRelocationType + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.ReportType.rst.txt b/personal/api-docs/_sources/binaryninja.enums.ReportType.rst.txt new file mode 100644 index 0000000..bf3be1d --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.ReportType.rst.txt @@ -0,0 +1,25 @@ +binaryninja.enums.ReportType +============================ + +.. currentmodule:: binaryninja.enums + +.. autoclass:: ReportType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~ReportType.FlowGraphReportType + ~ReportType.HTMLReportType + ~ReportType.MarkdownReportType + ~ReportType.PlainTextReportType + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.ScriptingProviderExecuteResult.rst.txt b/personal/api-docs/_sources/binaryninja.enums.ScriptingProviderExecuteResult.rst.txt new file mode 100644 index 0000000..6590c6c --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.ScriptingProviderExecuteResult.rst.txt @@ -0,0 +1,24 @@ +binaryninja.enums.ScriptingProviderExecuteResult +================================================ + +.. currentmodule:: binaryninja.enums + +.. autoclass:: ScriptingProviderExecuteResult + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~ScriptingProviderExecuteResult.IncompleteScriptInput + ~ScriptingProviderExecuteResult.InvalidScriptInput + ~ScriptingProviderExecuteResult.SuccessfulScriptExecution + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.ScriptingProviderInputReadyState.rst.txt b/personal/api-docs/_sources/binaryninja.enums.ScriptingProviderInputReadyState.rst.txt new file mode 100644 index 0000000..fd59345 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.ScriptingProviderInputReadyState.rst.txt @@ -0,0 +1,24 @@ +binaryninja.enums.ScriptingProviderInputReadyState +================================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: ScriptingProviderInputReadyState + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~ScriptingProviderInputReadyState.NotReadyForInput + ~ScriptingProviderInputReadyState.ReadyForScriptExecution + ~ScriptingProviderInputReadyState.ReadyForScriptProgramInput + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.SectionSemantics.rst.txt b/personal/api-docs/_sources/binaryninja.enums.SectionSemantics.rst.txt new file mode 100644 index 0000000..37b22e2 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.SectionSemantics.rst.txt @@ -0,0 +1,26 @@ +binaryninja.enums.SectionSemantics +================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: SectionSemantics + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~SectionSemantics.DefaultSectionSemantics + ~SectionSemantics.ExternalSectionSemantics + ~SectionSemantics.ReadOnlyCodeSectionSemantics + ~SectionSemantics.ReadOnlyDataSectionSemantics + ~SectionSemantics.ReadWriteDataSectionSemantics + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.SegmentFlag.rst.txt b/personal/api-docs/_sources/binaryninja.enums.SegmentFlag.rst.txt new file mode 100644 index 0000000..9ed8499 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.SegmentFlag.rst.txt @@ -0,0 +1,28 @@ +binaryninja.enums.SegmentFlag +============================= + +.. currentmodule:: binaryninja.enums + +.. autoclass:: SegmentFlag + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~SegmentFlag.SegmentContainsCode + ~SegmentFlag.SegmentContainsData + ~SegmentFlag.SegmentDenyExecute + ~SegmentFlag.SegmentDenyWrite + ~SegmentFlag.SegmentExecutable + ~SegmentFlag.SegmentReadable + ~SegmentFlag.SegmentWritable + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.SettingsScope.rst.txt b/personal/api-docs/_sources/binaryninja.enums.SettingsScope.rst.txt new file mode 100644 index 0000000..1e705b0 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.SettingsScope.rst.txt @@ -0,0 +1,27 @@ +binaryninja.enums.SettingsScope +=============================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: SettingsScope + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~SettingsScope.SettingsAutoScope + ~SettingsScope.SettingsContextScope + ~SettingsScope.SettingsDefaultScope + ~SettingsScope.SettingsInvalidScope + ~SettingsScope.SettingsUserScope + ~SettingsScope.SettingsWorkspaceScope + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.StringType.rst.txt b/personal/api-docs/_sources/binaryninja.enums.StringType.rst.txt new file mode 100644 index 0000000..7a5d6d8 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.StringType.rst.txt @@ -0,0 +1,25 @@ +binaryninja.enums.StringType +============================ + +.. currentmodule:: binaryninja.enums + +.. autoclass:: StringType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~StringType.AsciiString + ~StringType.Utf16String + ~StringType.Utf32String + ~StringType.Utf8String + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.StructureType.rst.txt b/personal/api-docs/_sources/binaryninja.enums.StructureType.rst.txt new file mode 100644 index 0000000..570357d --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.StructureType.rst.txt @@ -0,0 +1,24 @@ +binaryninja.enums.StructureType +=============================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: StructureType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~StructureType.ClassStructureType + ~StructureType.StructStructureType + ~StructureType.UnionStructureType + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.SymbolBinding.rst.txt b/personal/api-docs/_sources/binaryninja.enums.SymbolBinding.rst.txt new file mode 100644 index 0000000..d6db28d --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.SymbolBinding.rst.txt @@ -0,0 +1,25 @@ +binaryninja.enums.SymbolBinding +=============================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: SymbolBinding + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~SymbolBinding.GlobalBinding + ~SymbolBinding.LocalBinding + ~SymbolBinding.NoBinding + ~SymbolBinding.WeakBinding + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.SymbolType.rst.txt b/personal/api-docs/_sources/binaryninja.enums.SymbolType.rst.txt new file mode 100644 index 0000000..ee69753 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.SymbolType.rst.txt @@ -0,0 +1,27 @@ +binaryninja.enums.SymbolType +============================ + +.. currentmodule:: binaryninja.enums + +.. autoclass:: SymbolType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~SymbolType.DataSymbol + ~SymbolType.ExternalSymbol + ~SymbolType.FunctionSymbol + ~SymbolType.ImportAddressSymbol + ~SymbolType.ImportedDataSymbol + ~SymbolType.ImportedFunctionSymbol + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.TransformType.rst.txt b/personal/api-docs/_sources/binaryninja.enums.TransformType.rst.txt new file mode 100644 index 0000000..227fb65 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.TransformType.rst.txt @@ -0,0 +1,30 @@ +binaryninja.enums.TransformType +=============================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: TransformType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~TransformType.BinaryCodecTransform + ~TransformType.BinaryEncodeTransform + ~TransformType.DecodeTransform + ~TransformType.EncryptTransform + ~TransformType.HashTransform + ~TransformType.InvertingTransform + ~TransformType.TextCodecTransform + ~TransformType.TextEncodeTransform + ~TransformType.UnicodeCodecTransform + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.TypeClass.rst.txt b/personal/api-docs/_sources/binaryninja.enums.TypeClass.rst.txt new file mode 100644 index 0000000..ed89c5f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.TypeClass.rst.txt @@ -0,0 +1,34 @@ +binaryninja.enums.TypeClass +=========================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: TypeClass + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~TypeClass.ArrayTypeClass + ~TypeClass.BoolTypeClass + ~TypeClass.EnumerationTypeClass + ~TypeClass.FloatTypeClass + ~TypeClass.FunctionTypeClass + ~TypeClass.IntegerTypeClass + ~TypeClass.NamedTypeReferenceClass + ~TypeClass.PointerTypeClass + ~TypeClass.StructureTypeClass + ~TypeClass.ValueTypeClass + ~TypeClass.VarArgsTypeClass + ~TypeClass.VoidTypeClass + ~TypeClass.WideCharTypeClass + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.UpdateResult.rst.txt b/personal/api-docs/_sources/binaryninja.enums.UpdateResult.rst.txt new file mode 100644 index 0000000..b0d7c6e --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.UpdateResult.rst.txt @@ -0,0 +1,25 @@ +binaryninja.enums.UpdateResult +============================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: UpdateResult + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~UpdateResult.AlreadyUpToDate + ~UpdateResult.UpdateAvailable + ~UpdateResult.UpdateFailed + ~UpdateResult.UpdateSuccess + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.enums.VariableSourceType.rst.txt b/personal/api-docs/_sources/binaryninja.enums.VariableSourceType.rst.txt new file mode 100644 index 0000000..5c18b15 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.enums.VariableSourceType.rst.txt @@ -0,0 +1,24 @@ +binaryninja.enums.VariableSourceType +==================================== + +.. currentmodule:: binaryninja.enums + +.. autoclass:: VariableSourceType + + + .. automethod:: __init__ + + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~VariableSourceType.FlagVariableSourceType + ~VariableSourceType.RegisterVariableSourceType + ~VariableSourceType.StackVariableSourceType + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.fileaccessor-module.rst.txt b/personal/api-docs/_sources/binaryninja.fileaccessor-module.rst.txt new file mode 100644 index 0000000..4722729 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.fileaccessor-module.rst.txt @@ -0,0 +1,17 @@ +fileaccessor module +===================== + +.. autosummary:: + :toctree: + + binaryninja.fileaccessor.CoreFileAccessor + binaryninja.fileaccessor.FileAccessor + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.fileaccessor + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.fileaccessor.CoreFileAccessor.rst.txt b/personal/api-docs/_sources/binaryninja.fileaccessor.CoreFileAccessor.rst.txt new file mode 100644 index 0000000..1f72e5c --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.fileaccessor.CoreFileAccessor.rst.txt @@ -0,0 +1,25 @@ +binaryninja.fileaccessor.CoreFileAccessor +========================================= + +.. currentmodule:: binaryninja.fileaccessor + +.. autoclass:: CoreFileAccessor + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~CoreFileAccessor.__init__ + ~CoreFileAccessor.get_length + ~CoreFileAccessor.read + ~CoreFileAccessor.write + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.fileaccessor.FileAccessor.rst.txt b/personal/api-docs/_sources/binaryninja.fileaccessor.FileAccessor.rst.txt new file mode 100644 index 0000000..39c23cd --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.fileaccessor.FileAccessor.rst.txt @@ -0,0 +1,22 @@ +binaryninja.fileaccessor.FileAccessor +===================================== + +.. currentmodule:: binaryninja.fileaccessor + +.. autoclass:: FileAccessor + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~FileAccessor.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.filemetadata-module.rst.txt b/personal/api-docs/_sources/binaryninja.filemetadata-module.rst.txt new file mode 100644 index 0000000..2fae456 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.filemetadata-module.rst.txt @@ -0,0 +1,17 @@ +filemetadata module +===================== + +.. autosummary:: + :toctree: + + binaryninja.filemetadata.FileMetadata + binaryninja.filemetadata.NavigationHandler + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.filemetadata + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.filemetadata.FileMetadata.rst.txt b/personal/api-docs/_sources/binaryninja.filemetadata.FileMetadata.rst.txt new file mode 100644 index 0000000..49a67ac --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.filemetadata.FileMetadata.rst.txt @@ -0,0 +1,49 @@ +binaryninja.filemetadata.FileMetadata +===================================== + +.. currentmodule:: binaryninja.filemetadata + +.. 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 + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.filemetadata.NavigationHandler.rst.txt b/personal/api-docs/_sources/binaryninja.filemetadata.NavigationHandler.rst.txt new file mode 100644 index 0000000..52d799b --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.filemetadata.NavigationHandler.rst.txt @@ -0,0 +1,16 @@ +binaryninja.filemetadata.NavigationHandler +========================================== + +.. currentmodule:: binaryninja.filemetadata + +.. autoclass:: NavigationHandler + + + .. automethod:: __init__ + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.flowgraph-module.rst.txt b/personal/api-docs/_sources/binaryninja.flowgraph-module.rst.txt new file mode 100644 index 0000000..63048fb --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.flowgraph-module.rst.txt @@ -0,0 +1,21 @@ +flowgraph module +===================== + +.. autosummary:: + :toctree: + + binaryninja.flowgraph.CoreFlowGraph + binaryninja.flowgraph.FlowGraph + binaryninja.flowgraph.FlowGraphEdge + binaryninja.flowgraph.FlowGraphLayoutRequest + binaryninja.flowgraph.FlowGraphNode + binaryninja.flowgraph.range + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.flowgraph + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.flowgraph.CoreFlowGraph.rst.txt b/personal/api-docs/_sources/binaryninja.flowgraph.CoreFlowGraph.rst.txt new file mode 100644 index 0000000..e6f44ba --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.flowgraph.CoreFlowGraph.rst.txt @@ -0,0 +1,49 @@ +binaryninja.flowgraph.CoreFlowGraph +=================================== + +.. currentmodule:: binaryninja.flowgraph + +.. autoclass:: CoreFlowGraph + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~CoreFlowGraph.__init__ + ~CoreFlowGraph.append + ~CoreFlowGraph.complete_layout + ~CoreFlowGraph.finish_prepare_for_layout + ~CoreFlowGraph.get_nodes_in_region + ~CoreFlowGraph.layout + ~CoreFlowGraph.layout_and_wait + ~CoreFlowGraph.populate_nodes + ~CoreFlowGraph.prepare_for_layout + ~CoreFlowGraph.show + ~CoreFlowGraph.update + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~CoreFlowGraph.complete + ~CoreFlowGraph.function + ~CoreFlowGraph.has_nodes + ~CoreFlowGraph.height + ~CoreFlowGraph.horizontal_block_margin + ~CoreFlowGraph.il_function + ~CoreFlowGraph.is_il + ~CoreFlowGraph.is_low_level_il + ~CoreFlowGraph.is_medium_level_il + ~CoreFlowGraph.nodes + ~CoreFlowGraph.vertical_block_margin + ~CoreFlowGraph.width + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.flowgraph.FlowGraph.rst.txt b/personal/api-docs/_sources/binaryninja.flowgraph.FlowGraph.rst.txt new file mode 100644 index 0000000..d4e7df4 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.flowgraph.FlowGraph.rst.txt @@ -0,0 +1,49 @@ +binaryninja.flowgraph.FlowGraph +=============================== + +.. currentmodule:: binaryninja.flowgraph + +.. autoclass:: FlowGraph + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~FlowGraph.__init__ + ~FlowGraph.append + ~FlowGraph.complete_layout + ~FlowGraph.finish_prepare_for_layout + ~FlowGraph.get_nodes_in_region + ~FlowGraph.layout + ~FlowGraph.layout_and_wait + ~FlowGraph.populate_nodes + ~FlowGraph.prepare_for_layout + ~FlowGraph.show + ~FlowGraph.update + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~FlowGraph.complete + ~FlowGraph.function + ~FlowGraph.has_nodes + ~FlowGraph.height + ~FlowGraph.horizontal_block_margin + ~FlowGraph.il_function + ~FlowGraph.is_il + ~FlowGraph.is_low_level_il + ~FlowGraph.is_medium_level_il + ~FlowGraph.nodes + ~FlowGraph.vertical_block_margin + ~FlowGraph.width + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.flowgraph.FlowGraphEdge.rst.txt b/personal/api-docs/_sources/binaryninja.flowgraph.FlowGraphEdge.rst.txt new file mode 100644 index 0000000..8b159ec --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.flowgraph.FlowGraphEdge.rst.txt @@ -0,0 +1,22 @@ +binaryninja.flowgraph.FlowGraphEdge +=================================== + +.. currentmodule:: binaryninja.flowgraph + +.. autoclass:: FlowGraphEdge + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~FlowGraphEdge.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.flowgraph.FlowGraphLayoutRequest.rst.txt b/personal/api-docs/_sources/binaryninja.flowgraph.FlowGraphLayoutRequest.rst.txt new file mode 100644 index 0000000..e9755a9 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.flowgraph.FlowGraphLayoutRequest.rst.txt @@ -0,0 +1,30 @@ +binaryninja.flowgraph.FlowGraphLayoutRequest +============================================ + +.. currentmodule:: binaryninja.flowgraph + +.. autoclass:: FlowGraphLayoutRequest + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~FlowGraphLayoutRequest.__init__ + ~FlowGraphLayoutRequest.abort + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~FlowGraphLayoutRequest.complete + ~FlowGraphLayoutRequest.graph + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.flowgraph.FlowGraphNode.rst.txt b/personal/api-docs/_sources/binaryninja.flowgraph.FlowGraphNode.rst.txt new file mode 100644 index 0000000..3bfb3ad --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.flowgraph.FlowGraphNode.rst.txt @@ -0,0 +1,36 @@ +binaryninja.flowgraph.FlowGraphNode +=================================== + +.. currentmodule:: binaryninja.flowgraph + +.. autoclass:: FlowGraphNode + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~FlowGraphNode.__init__ + ~FlowGraphNode.add_outgoing_edge + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~FlowGraphNode.basic_block + ~FlowGraphNode.height + ~FlowGraphNode.highlight + ~FlowGraphNode.lines + ~FlowGraphNode.outgoing_edges + ~FlowGraphNode.width + ~FlowGraphNode.x + ~FlowGraphNode.y + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.flowgraph.range.rst.txt b/personal/api-docs/_sources/binaryninja.flowgraph.range.rst.txt new file mode 100644 index 0000000..cdc9904 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.flowgraph.range.rst.txt @@ -0,0 +1,6 @@ +binaryninja.flowgraph.range +=========================== + +.. currentmodule:: binaryninja.flowgraph + +.. autofunction:: range \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function-module.rst.txt b/personal/api-docs/_sources/binaryninja.function-module.rst.txt new file mode 100644 index 0000000..6ec4301 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function-module.rst.txt @@ -0,0 +1,37 @@ +function module +===================== + +.. autosummary:: + :toctree: + + binaryninja.function.AdvancedFunctionAnalysisDataRequestor + binaryninja.function.ConstantReference + binaryninja.function.DisassemblySettings + binaryninja.function.DisassemblyTextLine + binaryninja.function.DisassemblyTextRenderer + binaryninja.function.Function + binaryninja.function.IndirectBranchInfo + binaryninja.function.InstructionBranch + binaryninja.function.InstructionInfo + binaryninja.function.InstructionTextToken + binaryninja.function.IntrinsicInfo + binaryninja.function.IntrinsicInput + binaryninja.function.LookupTableEntry + binaryninja.function.ParameterVariables + binaryninja.function.PossibleValueSet + binaryninja.function.RegisterInfo + binaryninja.function.RegisterStackInfo + binaryninja.function.RegisterValue + binaryninja.function.StackVariableReference + binaryninja.function.ValueRange + binaryninja.function.Variable + binaryninja.function.range + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.function + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.AdvancedFunctionAnalysisDataRequestor.rst.txt b/personal/api-docs/_sources/binaryninja.function.AdvancedFunctionAnalysisDataRequestor.rst.txt new file mode 100644 index 0000000..80165d2 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.AdvancedFunctionAnalysisDataRequestor.rst.txt @@ -0,0 +1,29 @@ +binaryninja.function.AdvancedFunctionAnalysisDataRequestor +========================================================== + +.. currentmodule:: binaryninja.function + +.. autoclass:: AdvancedFunctionAnalysisDataRequestor + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~AdvancedFunctionAnalysisDataRequestor.__init__ + ~AdvancedFunctionAnalysisDataRequestor.close + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~AdvancedFunctionAnalysisDataRequestor.function + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.ConstantReference.rst.txt b/personal/api-docs/_sources/binaryninja.function.ConstantReference.rst.txt new file mode 100644 index 0000000..8bd4a74 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.ConstantReference.rst.txt @@ -0,0 +1,22 @@ +binaryninja.function.ConstantReference +====================================== + +.. currentmodule:: binaryninja.function + +.. autoclass:: ConstantReference + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ConstantReference.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.DisassemblySettings.rst.txt b/personal/api-docs/_sources/binaryninja.function.DisassemblySettings.rst.txt new file mode 100644 index 0000000..acb2774 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.DisassemblySettings.rst.txt @@ -0,0 +1,31 @@ +binaryninja.function.DisassemblySettings +======================================== + +.. currentmodule:: binaryninja.function + +.. autoclass:: DisassemblySettings + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~DisassemblySettings.__init__ + ~DisassemblySettings.is_option_set + ~DisassemblySettings.set_option + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~DisassemblySettings.max_symbol_width + ~DisassemblySettings.width + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.DisassemblyTextLine.rst.txt b/personal/api-docs/_sources/binaryninja.function.DisassemblyTextLine.rst.txt new file mode 100644 index 0000000..7493fe1 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.DisassemblyTextLine.rst.txt @@ -0,0 +1,22 @@ +binaryninja.function.DisassemblyTextLine +======================================== + +.. currentmodule:: binaryninja.function + +.. autoclass:: DisassemblyTextLine + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~DisassemblyTextLine.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.DisassemblyTextRenderer.rst.txt b/personal/api-docs/_sources/binaryninja.function.DisassemblyTextRenderer.rst.txt new file mode 100644 index 0000000..c2ef274 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.DisassemblyTextRenderer.rst.txt @@ -0,0 +1,43 @@ +binaryninja.function.DisassemblyTextRenderer +============================================ + +.. currentmodule:: binaryninja.function + +.. autoclass:: DisassemblyTextRenderer + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~DisassemblyTextRenderer.__init__ + ~DisassemblyTextRenderer.add_integer_token + ~DisassemblyTextRenderer.add_stack_var_reference_tokens + ~DisassemblyTextRenderer.add_symbol_token + ~DisassemblyTextRenderer.get_disassembly_text + ~DisassemblyTextRenderer.get_instruction_annotations + ~DisassemblyTextRenderer.get_instruction_text + ~DisassemblyTextRenderer.is_integer_token + ~DisassemblyTextRenderer.reset_deduplicated_comments + ~DisassemblyTextRenderer.wrap_comment + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~DisassemblyTextRenderer.arch + ~DisassemblyTextRenderer.basic_block + ~DisassemblyTextRenderer.function + ~DisassemblyTextRenderer.has_data_flow + ~DisassemblyTextRenderer.il + ~DisassemblyTextRenderer.il_function + ~DisassemblyTextRenderer.settings + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.Function.rst.txt b/personal/api-docs/_sources/binaryninja.function.Function.rst.txt new file mode 100644 index 0000000..d574558 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.Function.rst.txt @@ -0,0 +1,142 @@ +binaryninja.function.Function +============================= + +.. currentmodule:: binaryninja.function + +.. autoclass:: Function + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Function.__init__ + ~Function.apply_auto_discovered_type + ~Function.apply_imported_types + ~Function.create_auto_stack_var + ~Function.create_auto_var + ~Function.create_graph + ~Function.create_user_stack_var + ~Function.create_user_var + ~Function.delete_auto_stack_var + ~Function.delete_auto_var + ~Function.delete_user_stack_var + ~Function.delete_user_var + ~Function.get_basic_block_at + ~Function.get_block_annotations + ~Function.get_call_reg_stack_adjustment + ~Function.get_call_reg_stack_adjustment_for_reg_stack + ~Function.get_call_stack_adjustment + ~Function.get_comment_at + ~Function.get_constants_referenced_by + ~Function.get_flags_read_by_lifted_il_instruction + ~Function.get_flags_written_by_lifted_il_instruction + ~Function.get_indirect_branches_at + ~Function.get_instr_highlight + ~Function.get_int_display_type + ~Function.get_lifted_il_at + ~Function.get_lifted_il_flag_definitions_for_use + ~Function.get_lifted_il_flag_uses_for_definition + ~Function.get_low_level_il_at + ~Function.get_low_level_il_exits_at + ~Function.get_parameter_at + ~Function.get_parameter_at_low_level_il_instruction + ~Function.get_reg_value_after + ~Function.get_reg_value_at + ~Function.get_reg_value_at_exit + ~Function.get_regs_read_by + ~Function.get_regs_written_by + ~Function.get_stack_contents_after + ~Function.get_stack_contents_at + ~Function.get_stack_var_at_frame_offset + ~Function.get_stack_vars_referenced_by + ~Function.get_type_tokens + ~Function.is_call_instruction + ~Function.mark_recent_use + ~Function.reanalyze + ~Function.release_advanced_analysis_data + ~Function.request_advanced_analysis_data + ~Function.request_debug_report + ~Function.set_auto_call_reg_stack_adjustment + ~Function.set_auto_call_reg_stack_adjustment_for_reg_stack + ~Function.set_auto_call_stack_adjustment + ~Function.set_auto_calling_convention + ~Function.set_auto_can_return + ~Function.set_auto_clobbered_regs + ~Function.set_auto_has_variable_arguments + ~Function.set_auto_indirect_branches + ~Function.set_auto_instr_highlight + ~Function.set_auto_parameter_vars + ~Function.set_auto_reg_stack_adjustments + ~Function.set_auto_return_regs + ~Function.set_auto_return_type + ~Function.set_auto_stack_adjustment + ~Function.set_auto_type + ~Function.set_call_reg_stack_adjustment + ~Function.set_call_reg_stack_adjustment_for_reg_stack + ~Function.set_call_stack_adjustment + ~Function.set_comment + ~Function.set_comment_at + ~Function.set_default_session_data + ~Function.set_int_display_type + ~Function.set_user_indirect_branches + ~Function.set_user_instr_highlight + ~Function.set_user_type + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Function.analysis_performance_info + ~Function.analysis_skip_override + ~Function.analysis_skip_reason + ~Function.analysis_skipped + ~Function.arch + ~Function.auto + ~Function.basic_blocks + ~Function.calling_convention + ~Function.can_return + ~Function.clobbered_regs + ~Function.comment + ~Function.comments + ~Function.explicitly_defined_type + ~Function.function_type + ~Function.global_pointer_value + ~Function.has_variable_arguments + ~Function.indirect_branches + ~Function.instructions + ~Function.lifted_il + ~Function.llil + ~Function.llil_basic_blocks + ~Function.llil_instructions + ~Function.low_level_il + ~Function.medium_level_il + ~Function.mlil + ~Function.mlil_basic_blocks + ~Function.mlil_instructions + ~Function.name + ~Function.needs_update + ~Function.parameter_vars + ~Function.platform + ~Function.reg_stack_adjustments + ~Function.return_regs + ~Function.return_type + ~Function.session_data + ~Function.stack_adjustment + ~Function.stack_layout + ~Function.start + ~Function.symbol + ~Function.too_large + ~Function.type_tokens + ~Function.unresolved_stack_adjustment_graph + ~Function.vars + ~Function.view + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.IndirectBranchInfo.rst.txt b/personal/api-docs/_sources/binaryninja.function.IndirectBranchInfo.rst.txt new file mode 100644 index 0000000..2214b5b --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.IndirectBranchInfo.rst.txt @@ -0,0 +1,22 @@ +binaryninja.function.IndirectBranchInfo +======================================= + +.. currentmodule:: binaryninja.function + +.. autoclass:: IndirectBranchInfo + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~IndirectBranchInfo.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.InstructionBranch.rst.txt b/personal/api-docs/_sources/binaryninja.function.InstructionBranch.rst.txt new file mode 100644 index 0000000..81ddf79 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.InstructionBranch.rst.txt @@ -0,0 +1,22 @@ +binaryninja.function.InstructionBranch +====================================== + +.. currentmodule:: binaryninja.function + +.. autoclass:: InstructionBranch + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~InstructionBranch.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.InstructionInfo.rst.txt b/personal/api-docs/_sources/binaryninja.function.InstructionInfo.rst.txt new file mode 100644 index 0000000..e2b25cf --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.InstructionInfo.rst.txt @@ -0,0 +1,23 @@ +binaryninja.function.InstructionInfo +==================================== + +.. currentmodule:: binaryninja.function + +.. autoclass:: InstructionInfo + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~InstructionInfo.__init__ + ~InstructionInfo.add_branch + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.InstructionTextToken.rst.txt b/personal/api-docs/_sources/binaryninja.function.InstructionTextToken.rst.txt new file mode 100644 index 0000000..5c4ffa4 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.InstructionTextToken.rst.txt @@ -0,0 +1,23 @@ +binaryninja.function.InstructionTextToken +========================================= + +.. currentmodule:: binaryninja.function + +.. autoclass:: InstructionTextToken + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~InstructionTextToken.__init__ + ~InstructionTextToken.get_instruction_lines + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.IntrinsicInfo.rst.txt b/personal/api-docs/_sources/binaryninja.function.IntrinsicInfo.rst.txt new file mode 100644 index 0000000..c218184 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.IntrinsicInfo.rst.txt @@ -0,0 +1,22 @@ +binaryninja.function.IntrinsicInfo +================================== + +.. currentmodule:: binaryninja.function + +.. autoclass:: IntrinsicInfo + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~IntrinsicInfo.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.IntrinsicInput.rst.txt b/personal/api-docs/_sources/binaryninja.function.IntrinsicInput.rst.txt new file mode 100644 index 0000000..87aeddc --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.IntrinsicInput.rst.txt @@ -0,0 +1,22 @@ +binaryninja.function.IntrinsicInput +=================================== + +.. currentmodule:: binaryninja.function + +.. autoclass:: IntrinsicInput + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~IntrinsicInput.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.LookupTableEntry.rst.txt b/personal/api-docs/_sources/binaryninja.function.LookupTableEntry.rst.txt new file mode 100644 index 0000000..3c4e7d6 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.LookupTableEntry.rst.txt @@ -0,0 +1,22 @@ +binaryninja.function.LookupTableEntry +===================================== + +.. currentmodule:: binaryninja.function + +.. autoclass:: LookupTableEntry + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~LookupTableEntry.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.ParameterVariables.rst.txt b/personal/api-docs/_sources/binaryninja.function.ParameterVariables.rst.txt new file mode 100644 index 0000000..5c690ac --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.ParameterVariables.rst.txt @@ -0,0 +1,23 @@ +binaryninja.function.ParameterVariables +======================================= + +.. currentmodule:: binaryninja.function + +.. autoclass:: ParameterVariables + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ParameterVariables.__init__ + ~ParameterVariables.with_confidence + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.PossibleValueSet.rst.txt b/personal/api-docs/_sources/binaryninja.function.PossibleValueSet.rst.txt new file mode 100644 index 0000000..b25f4db --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.PossibleValueSet.rst.txt @@ -0,0 +1,22 @@ +binaryninja.function.PossibleValueSet +===================================== + +.. currentmodule:: binaryninja.function + +.. autoclass:: PossibleValueSet + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~PossibleValueSet.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.RegisterInfo.rst.txt b/personal/api-docs/_sources/binaryninja.function.RegisterInfo.rst.txt new file mode 100644 index 0000000..82157e7 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.RegisterInfo.rst.txt @@ -0,0 +1,22 @@ +binaryninja.function.RegisterInfo +================================= + +.. currentmodule:: binaryninja.function + +.. autoclass:: RegisterInfo + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~RegisterInfo.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.RegisterStackInfo.rst.txt b/personal/api-docs/_sources/binaryninja.function.RegisterStackInfo.rst.txt new file mode 100644 index 0000000..3e7736c --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.RegisterStackInfo.rst.txt @@ -0,0 +1,22 @@ +binaryninja.function.RegisterStackInfo +====================================== + +.. currentmodule:: binaryninja.function + +.. autoclass:: RegisterStackInfo + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~RegisterStackInfo.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.RegisterValue.rst.txt b/personal/api-docs/_sources/binaryninja.function.RegisterValue.rst.txt new file mode 100644 index 0000000..51f464c --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.RegisterValue.rst.txt @@ -0,0 +1,29 @@ +binaryninja.function.RegisterValue +================================== + +.. currentmodule:: binaryninja.function + +.. autoclass:: RegisterValue + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~RegisterValue.__init__ + ~RegisterValue.constant + ~RegisterValue.constant_ptr + ~RegisterValue.entry_value + ~RegisterValue.imported_address + ~RegisterValue.return_address + ~RegisterValue.stack_frame_offset + ~RegisterValue.undetermined + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.StackVariableReference.rst.txt b/personal/api-docs/_sources/binaryninja.function.StackVariableReference.rst.txt new file mode 100644 index 0000000..f77d894 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.StackVariableReference.rst.txt @@ -0,0 +1,22 @@ +binaryninja.function.StackVariableReference +=========================================== + +.. currentmodule:: binaryninja.function + +.. autoclass:: StackVariableReference + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~StackVariableReference.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.ValueRange.rst.txt b/personal/api-docs/_sources/binaryninja.function.ValueRange.rst.txt new file mode 100644 index 0000000..fb2e41a --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.ValueRange.rst.txt @@ -0,0 +1,22 @@ +binaryninja.function.ValueRange +=============================== + +.. currentmodule:: binaryninja.function + +.. autoclass:: ValueRange + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ValueRange.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.Variable.rst.txt b/personal/api-docs/_sources/binaryninja.function.Variable.rst.txt new file mode 100644 index 0000000..e0b18b4 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.Variable.rst.txt @@ -0,0 +1,23 @@ +binaryninja.function.Variable +============================= + +.. currentmodule:: binaryninja.function + +.. autoclass:: Variable + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Variable.__init__ + ~Variable.from_identifier + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.function.range.rst.txt b/personal/api-docs/_sources/binaryninja.function.range.rst.txt new file mode 100644 index 0000000..a674543 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.function.range.rst.txt @@ -0,0 +1,6 @@ +binaryninja.function.range +========================== + +.. currentmodule:: binaryninja.function + +.. autofunction:: range \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.functionrecognizer-module.rst.txt b/personal/api-docs/_sources/binaryninja.functionrecognizer-module.rst.txt new file mode 100644 index 0000000..1a8f239 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.functionrecognizer-module.rst.txt @@ -0,0 +1,17 @@ +functionrecognizer module +===================== + +.. autosummary:: + :toctree: + + binaryninja.functionrecognizer.FunctionRecognizer + binaryninja.functionrecognizer.log + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.functionrecognizer + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.functionrecognizer.FunctionRecognizer.rst.txt b/personal/api-docs/_sources/binaryninja.functionrecognizer.FunctionRecognizer.rst.txt new file mode 100644 index 0000000..a5bd689 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.functionrecognizer.FunctionRecognizer.rst.txt @@ -0,0 +1,26 @@ +binaryninja.functionrecognizer.FunctionRecognizer +================================================= + +.. currentmodule:: binaryninja.functionrecognizer + +.. autoclass:: FunctionRecognizer + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~FunctionRecognizer.__init__ + ~FunctionRecognizer.recognize_low_level_il + ~FunctionRecognizer.recognize_medium_level_il + ~FunctionRecognizer.register_arch + ~FunctionRecognizer.register_global + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.functionrecognizer.log.rst.txt b/personal/api-docs/_sources/binaryninja.functionrecognizer.log.rst.txt new file mode 100644 index 0000000..7db2870 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.functionrecognizer.log.rst.txt @@ -0,0 +1,6 @@ +binaryninja.functionrecognizer.log +================================== + +.. currentmodule:: binaryninja.functionrecognizer + +.. autofunction:: log \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.highlight-module.rst.txt b/personal/api-docs/_sources/binaryninja.highlight-module.rst.txt new file mode 100644 index 0000000..7dfa198 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.highlight-module.rst.txt @@ -0,0 +1,16 @@ +highlight module +===================== + +.. autosummary:: + :toctree: + + binaryninja.highlight.HighlightColor + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.highlight + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.highlight.HighlightColor.rst.txt b/personal/api-docs/_sources/binaryninja.highlight.HighlightColor.rst.txt new file mode 100644 index 0000000..4bfd1df --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.highlight.HighlightColor.rst.txt @@ -0,0 +1,22 @@ +binaryninja.highlight.HighlightColor +==================================== + +.. currentmodule:: binaryninja.highlight + +.. autoclass:: HighlightColor + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~HighlightColor.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction-module.rst.txt b/personal/api-docs/_sources/binaryninja.interaction-module.rst.txt new file mode 100644 index 0000000..d7b2ce2 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction-module.rst.txt @@ -0,0 +1,47 @@ +interaction module +===================== + +.. autosummary:: + :toctree: + + binaryninja.interaction.AddressField + binaryninja.interaction.ChoiceField + binaryninja.interaction.DirectoryNameField + binaryninja.interaction.FlowGraphReport + binaryninja.interaction.HTMLReport + binaryninja.interaction.IntegerField + binaryninja.interaction.InteractionHandler + binaryninja.interaction.LabelField + binaryninja.interaction.MarkdownReport + binaryninja.interaction.MultilineTextField + binaryninja.interaction.OpenFileNameField + binaryninja.interaction.PlainTextReport + binaryninja.interaction.ReportCollection + binaryninja.interaction.SaveFileNameField + binaryninja.interaction.SeparatorField + binaryninja.interaction.TextLineField + binaryninja.interaction.get_address_input + binaryninja.interaction.get_choice_input + binaryninja.interaction.get_directory_name_input + binaryninja.interaction.get_form_input + binaryninja.interaction.get_int_input + binaryninja.interaction.get_open_filename_input + binaryninja.interaction.get_save_filename_input + binaryninja.interaction.get_text_line_input + binaryninja.interaction.markdown_to_html + binaryninja.interaction.range + binaryninja.interaction.show_graph_report + binaryninja.interaction.show_html_report + binaryninja.interaction.show_markdown_report + binaryninja.interaction.show_message_box + binaryninja.interaction.show_plain_text_report + binaryninja.interaction.show_report_collection + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.interaction + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.AddressField.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.AddressField.rst.txt new file mode 100644 index 0000000..76c6b82 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.AddressField.rst.txt @@ -0,0 +1,22 @@ +binaryninja.interaction.AddressField +==================================== + +.. currentmodule:: binaryninja.interaction + +.. autoclass:: AddressField + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~AddressField.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.ChoiceField.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.ChoiceField.rst.txt new file mode 100644 index 0000000..3acd35f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.ChoiceField.rst.txt @@ -0,0 +1,22 @@ +binaryninja.interaction.ChoiceField +=================================== + +.. currentmodule:: binaryninja.interaction + +.. autoclass:: ChoiceField + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ChoiceField.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.DirectoryNameField.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.DirectoryNameField.rst.txt new file mode 100644 index 0000000..578baa2 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.DirectoryNameField.rst.txt @@ -0,0 +1,22 @@ +binaryninja.interaction.DirectoryNameField +========================================== + +.. currentmodule:: binaryninja.interaction + +.. autoclass:: DirectoryNameField + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~DirectoryNameField.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.FlowGraphReport.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.FlowGraphReport.rst.txt new file mode 100644 index 0000000..ea68cc3 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.FlowGraphReport.rst.txt @@ -0,0 +1,22 @@ +binaryninja.interaction.FlowGraphReport +======================================= + +.. currentmodule:: binaryninja.interaction + +.. autoclass:: FlowGraphReport + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~FlowGraphReport.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.HTMLReport.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.HTMLReport.rst.txt new file mode 100644 index 0000000..d5b5ecc --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.HTMLReport.rst.txt @@ -0,0 +1,22 @@ +binaryninja.interaction.HTMLReport +================================== + +.. currentmodule:: binaryninja.interaction + +.. autoclass:: HTMLReport + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~HTMLReport.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.IntegerField.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.IntegerField.rst.txt new file mode 100644 index 0000000..6a7111a --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.IntegerField.rst.txt @@ -0,0 +1,22 @@ +binaryninja.interaction.IntegerField +==================================== + +.. currentmodule:: binaryninja.interaction + +.. autoclass:: IntegerField + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~IntegerField.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.InteractionHandler.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.InteractionHandler.rst.txt new file mode 100644 index 0000000..65d03f5 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.InteractionHandler.rst.txt @@ -0,0 +1,37 @@ +binaryninja.interaction.InteractionHandler +========================================== + +.. currentmodule:: binaryninja.interaction + +.. autoclass:: InteractionHandler + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~InteractionHandler.__init__ + ~InteractionHandler.get_address_input + ~InteractionHandler.get_choice_input + ~InteractionHandler.get_directory_name_input + ~InteractionHandler.get_form_input + ~InteractionHandler.get_int_input + ~InteractionHandler.get_open_filename_input + ~InteractionHandler.get_save_filename_input + ~InteractionHandler.get_text_line_input + ~InteractionHandler.register + ~InteractionHandler.show_graph_report + ~InteractionHandler.show_html_report + ~InteractionHandler.show_markdown_report + ~InteractionHandler.show_message_box + ~InteractionHandler.show_plain_text_report + ~InteractionHandler.show_report_collection + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.LabelField.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.LabelField.rst.txt new file mode 100644 index 0000000..57f9dcf --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.LabelField.rst.txt @@ -0,0 +1,22 @@ +binaryninja.interaction.LabelField +================================== + +.. currentmodule:: binaryninja.interaction + +.. autoclass:: LabelField + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~LabelField.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.MarkdownReport.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.MarkdownReport.rst.txt new file mode 100644 index 0000000..b86d03f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.MarkdownReport.rst.txt @@ -0,0 +1,22 @@ +binaryninja.interaction.MarkdownReport +====================================== + +.. currentmodule:: binaryninja.interaction + +.. autoclass:: MarkdownReport + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~MarkdownReport.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.MultilineTextField.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.MultilineTextField.rst.txt new file mode 100644 index 0000000..e55d68e --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.MultilineTextField.rst.txt @@ -0,0 +1,22 @@ +binaryninja.interaction.MultilineTextField +========================================== + +.. currentmodule:: binaryninja.interaction + +.. autoclass:: MultilineTextField + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~MultilineTextField.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.OpenFileNameField.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.OpenFileNameField.rst.txt new file mode 100644 index 0000000..04fe13c --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.OpenFileNameField.rst.txt @@ -0,0 +1,22 @@ +binaryninja.interaction.OpenFileNameField +========================================= + +.. currentmodule:: binaryninja.interaction + +.. autoclass:: OpenFileNameField + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~OpenFileNameField.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.PlainTextReport.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.PlainTextReport.rst.txt new file mode 100644 index 0000000..1970b7e --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.PlainTextReport.rst.txt @@ -0,0 +1,22 @@ +binaryninja.interaction.PlainTextReport +======================================= + +.. currentmodule:: binaryninja.interaction + +.. autoclass:: PlainTextReport + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~PlainTextReport.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.ReportCollection.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.ReportCollection.rst.txt new file mode 100644 index 0000000..7921a07 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.ReportCollection.rst.txt @@ -0,0 +1,23 @@ +binaryninja.interaction.ReportCollection +======================================== + +.. currentmodule:: binaryninja.interaction + +.. autoclass:: ReportCollection + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ReportCollection.__init__ + ~ReportCollection.append + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.SaveFileNameField.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.SaveFileNameField.rst.txt new file mode 100644 index 0000000..61e4bfb --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.SaveFileNameField.rst.txt @@ -0,0 +1,22 @@ +binaryninja.interaction.SaveFileNameField +========================================= + +.. currentmodule:: binaryninja.interaction + +.. autoclass:: SaveFileNameField + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~SaveFileNameField.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.SeparatorField.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.SeparatorField.rst.txt new file mode 100644 index 0000000..830851b --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.SeparatorField.rst.txt @@ -0,0 +1,16 @@ +binaryninja.interaction.SeparatorField +====================================== + +.. currentmodule:: binaryninja.interaction + +.. autoclass:: SeparatorField + + + .. automethod:: __init__ + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.TextLineField.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.TextLineField.rst.txt new file mode 100644 index 0000000..6433f49 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.TextLineField.rst.txt @@ -0,0 +1,22 @@ +binaryninja.interaction.TextLineField +===================================== + +.. currentmodule:: binaryninja.interaction + +.. autoclass:: TextLineField + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~TextLineField.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.get_address_input.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.get_address_input.rst.txt new file mode 100644 index 0000000..ea05c71 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.get_address_input.rst.txt @@ -0,0 +1,6 @@ +binaryninja.interaction.get\_address\_input +=========================================== + +.. currentmodule:: binaryninja.interaction + +.. autofunction:: get_address_input \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.get_choice_input.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.get_choice_input.rst.txt new file mode 100644 index 0000000..bd9bfdb --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.get_choice_input.rst.txt @@ -0,0 +1,6 @@ +binaryninja.interaction.get\_choice\_input +========================================== + +.. currentmodule:: binaryninja.interaction + +.. autofunction:: get_choice_input \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.get_directory_name_input.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.get_directory_name_input.rst.txt new file mode 100644 index 0000000..676622d --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.get_directory_name_input.rst.txt @@ -0,0 +1,6 @@ +binaryninja.interaction.get\_directory\_name\_input +=================================================== + +.. currentmodule:: binaryninja.interaction + +.. autofunction:: get_directory_name_input \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.get_form_input.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.get_form_input.rst.txt new file mode 100644 index 0000000..4ad1054 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.get_form_input.rst.txt @@ -0,0 +1,6 @@ +binaryninja.interaction.get\_form\_input +======================================== + +.. currentmodule:: binaryninja.interaction + +.. autofunction:: get_form_input \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.get_int_input.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.get_int_input.rst.txt new file mode 100644 index 0000000..0e2048f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.get_int_input.rst.txt @@ -0,0 +1,6 @@ +binaryninja.interaction.get\_int\_input +======================================= + +.. currentmodule:: binaryninja.interaction + +.. autofunction:: get_int_input \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.get_open_filename_input.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.get_open_filename_input.rst.txt new file mode 100644 index 0000000..6cfc215 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.get_open_filename_input.rst.txt @@ -0,0 +1,6 @@ +binaryninja.interaction.get\_open\_filename\_input +================================================== + +.. currentmodule:: binaryninja.interaction + +.. autofunction:: get_open_filename_input \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.get_save_filename_input.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.get_save_filename_input.rst.txt new file mode 100644 index 0000000..09c2a9d --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.get_save_filename_input.rst.txt @@ -0,0 +1,6 @@ +binaryninja.interaction.get\_save\_filename\_input +================================================== + +.. currentmodule:: binaryninja.interaction + +.. autofunction:: get_save_filename_input \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.get_text_line_input.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.get_text_line_input.rst.txt new file mode 100644 index 0000000..37cd023 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.get_text_line_input.rst.txt @@ -0,0 +1,6 @@ +binaryninja.interaction.get\_text\_line\_input +============================================== + +.. currentmodule:: binaryninja.interaction + +.. autofunction:: get_text_line_input \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.markdown_to_html.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.markdown_to_html.rst.txt new file mode 100644 index 0000000..c60d80a --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.markdown_to_html.rst.txt @@ -0,0 +1,6 @@ +binaryninja.interaction.markdown\_to\_html +========================================== + +.. currentmodule:: binaryninja.interaction + +.. autofunction:: markdown_to_html \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.range.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.range.rst.txt new file mode 100644 index 0000000..449eb99 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.range.rst.txt @@ -0,0 +1,6 @@ +binaryninja.interaction.range +============================= + +.. currentmodule:: binaryninja.interaction + +.. autofunction:: range \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.show_graph_report.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.show_graph_report.rst.txt new file mode 100644 index 0000000..603cb15 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.show_graph_report.rst.txt @@ -0,0 +1,6 @@ +binaryninja.interaction.show\_graph\_report +=========================================== + +.. currentmodule:: binaryninja.interaction + +.. autofunction:: show_graph_report \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.show_html_report.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.show_html_report.rst.txt new file mode 100644 index 0000000..f47182d --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.show_html_report.rst.txt @@ -0,0 +1,6 @@ +binaryninja.interaction.show\_html\_report +========================================== + +.. currentmodule:: binaryninja.interaction + +.. autofunction:: show_html_report \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.show_markdown_report.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.show_markdown_report.rst.txt new file mode 100644 index 0000000..6a356c0 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.show_markdown_report.rst.txt @@ -0,0 +1,6 @@ +binaryninja.interaction.show\_markdown\_report +============================================== + +.. currentmodule:: binaryninja.interaction + +.. autofunction:: show_markdown_report \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.show_message_box.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.show_message_box.rst.txt new file mode 100644 index 0000000..1b91630 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.show_message_box.rst.txt @@ -0,0 +1,6 @@ +binaryninja.interaction.show\_message\_box +========================================== + +.. currentmodule:: binaryninja.interaction + +.. autofunction:: show_message_box \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.show_plain_text_report.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.show_plain_text_report.rst.txt new file mode 100644 index 0000000..7c90c97 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.show_plain_text_report.rst.txt @@ -0,0 +1,6 @@ +binaryninja.interaction.show\_plain\_text\_report +================================================= + +.. currentmodule:: binaryninja.interaction + +.. autofunction:: show_plain_text_report \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.interaction.show_report_collection.rst.txt b/personal/api-docs/_sources/binaryninja.interaction.show_report_collection.rst.txt new file mode 100644 index 0000000..4a6b02d --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.interaction.show_report_collection.rst.txt @@ -0,0 +1,6 @@ +binaryninja.interaction.show\_report\_collection +================================================ + +.. currentmodule:: binaryninja.interaction + +.. autofunction:: show_report_collection \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lineardisassembly-module.rst.txt b/personal/api-docs/_sources/binaryninja.lineardisassembly-module.rst.txt new file mode 100644 index 0000000..1876686 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lineardisassembly-module.rst.txt @@ -0,0 +1,17 @@ +lineardisassembly module +===================== + +.. autosummary:: + :toctree: + + binaryninja.lineardisassembly.LinearDisassemblyLine + binaryninja.lineardisassembly.LinearDisassemblyPosition + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.lineardisassembly + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lineardisassembly.LinearDisassemblyLine.rst.txt b/personal/api-docs/_sources/binaryninja.lineardisassembly.LinearDisassemblyLine.rst.txt new file mode 100644 index 0000000..c23bdf2 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lineardisassembly.LinearDisassemblyLine.rst.txt @@ -0,0 +1,22 @@ +binaryninja.lineardisassembly.LinearDisassemblyLine +=================================================== + +.. currentmodule:: binaryninja.lineardisassembly + +.. autoclass:: LinearDisassemblyLine + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~LinearDisassemblyLine.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lineardisassembly.LinearDisassemblyPosition.rst.txt b/personal/api-docs/_sources/binaryninja.lineardisassembly.LinearDisassemblyPosition.rst.txt new file mode 100644 index 0000000..e54937a --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lineardisassembly.LinearDisassemblyPosition.rst.txt @@ -0,0 +1,22 @@ +binaryninja.lineardisassembly.LinearDisassemblyPosition +======================================================= + +.. currentmodule:: binaryninja.lineardisassembly + +.. autoclass:: LinearDisassemblyPosition + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~LinearDisassemblyPosition.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.log-module.rst.txt b/personal/api-docs/_sources/binaryninja.log-module.rst.txt new file mode 100644 index 0000000..df26d0f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.log-module.rst.txt @@ -0,0 +1,27 @@ +log module +===================== + +.. autosummary:: + :toctree: + + binaryninja.log.close_logs + binaryninja.log.is_output_redirected_to_log + binaryninja.log.log + binaryninja.log.log_alert + binaryninja.log.log_debug + binaryninja.log.log_error + binaryninja.log.log_info + binaryninja.log.log_to_file + binaryninja.log.log_to_stderr + binaryninja.log.log_to_stdout + binaryninja.log.log_warn + binaryninja.log.redirect_output_to_log + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.log + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.log.close_logs.rst.txt b/personal/api-docs/_sources/binaryninja.log.close_logs.rst.txt new file mode 100644 index 0000000..41c272a --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.log.close_logs.rst.txt @@ -0,0 +1,6 @@ +binaryninja.log.close\_logs +=========================== + +.. currentmodule:: binaryninja.log + +.. autofunction:: close_logs \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.log.is_output_redirected_to_log.rst.txt b/personal/api-docs/_sources/binaryninja.log.is_output_redirected_to_log.rst.txt new file mode 100644 index 0000000..5d1e23f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.log.is_output_redirected_to_log.rst.txt @@ -0,0 +1,6 @@ +binaryninja.log.is\_output\_redirected\_to\_log +=============================================== + +.. currentmodule:: binaryninja.log + +.. autofunction:: is_output_redirected_to_log \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.log.log.rst.txt b/personal/api-docs/_sources/binaryninja.log.log.rst.txt new file mode 100644 index 0000000..3b63d02 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.log.log.rst.txt @@ -0,0 +1,6 @@ +binaryninja.log.log +=================== + +.. currentmodule:: binaryninja.log + +.. autofunction:: log \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.log.log_alert.rst.txt b/personal/api-docs/_sources/binaryninja.log.log_alert.rst.txt new file mode 100644 index 0000000..a3b3fb2 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.log.log_alert.rst.txt @@ -0,0 +1,6 @@ +binaryninja.log.log\_alert +========================== + +.. currentmodule:: binaryninja.log + +.. autofunction:: log_alert \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.log.log_debug.rst.txt b/personal/api-docs/_sources/binaryninja.log.log_debug.rst.txt new file mode 100644 index 0000000..f39713e --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.log.log_debug.rst.txt @@ -0,0 +1,6 @@ +binaryninja.log.log\_debug +========================== + +.. currentmodule:: binaryninja.log + +.. autofunction:: log_debug \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.log.log_error.rst.txt b/personal/api-docs/_sources/binaryninja.log.log_error.rst.txt new file mode 100644 index 0000000..9195a7e --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.log.log_error.rst.txt @@ -0,0 +1,6 @@ +binaryninja.log.log\_error +========================== + +.. currentmodule:: binaryninja.log + +.. autofunction:: log_error \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.log.log_info.rst.txt b/personal/api-docs/_sources/binaryninja.log.log_info.rst.txt new file mode 100644 index 0000000..1a4e119 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.log.log_info.rst.txt @@ -0,0 +1,6 @@ +binaryninja.log.log\_info +========================= + +.. currentmodule:: binaryninja.log + +.. autofunction:: log_info \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.log.log_to_file.rst.txt b/personal/api-docs/_sources/binaryninja.log.log_to_file.rst.txt new file mode 100644 index 0000000..8476e47 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.log.log_to_file.rst.txt @@ -0,0 +1,6 @@ +binaryninja.log.log\_to\_file +============================= + +.. currentmodule:: binaryninja.log + +.. autofunction:: log_to_file \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.log.log_to_stderr.rst.txt b/personal/api-docs/_sources/binaryninja.log.log_to_stderr.rst.txt new file mode 100644 index 0000000..0e57e07 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.log.log_to_stderr.rst.txt @@ -0,0 +1,6 @@ +binaryninja.log.log\_to\_stderr +=============================== + +.. currentmodule:: binaryninja.log + +.. autofunction:: log_to_stderr \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.log.log_to_stdout.rst.txt b/personal/api-docs/_sources/binaryninja.log.log_to_stdout.rst.txt new file mode 100644 index 0000000..65b7e81 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.log.log_to_stdout.rst.txt @@ -0,0 +1,6 @@ +binaryninja.log.log\_to\_stdout +=============================== + +.. currentmodule:: binaryninja.log + +.. autofunction:: log_to_stdout \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.log.log_warn.rst.txt b/personal/api-docs/_sources/binaryninja.log.log_warn.rst.txt new file mode 100644 index 0000000..3208318 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.log.log_warn.rst.txt @@ -0,0 +1,6 @@ +binaryninja.log.log\_warn +========================= + +.. currentmodule:: binaryninja.log + +.. autofunction:: log_warn \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.log.redirect_output_to_log.rst.txt b/personal/api-docs/_sources/binaryninja.log.redirect_output_to_log.rst.txt new file mode 100644 index 0000000..06376e7 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.log.redirect_output_to_log.rst.txt @@ -0,0 +1,6 @@ +binaryninja.log.redirect\_output\_to\_log +========================================= + +.. currentmodule:: binaryninja.log + +.. autofunction:: redirect_output_to_log \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil-module.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil-module.rst.txt new file mode 100644 index 0000000..269adb8 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil-module.rst.txt @@ -0,0 +1,35 @@ +lowlevelil module +===================== + +.. autosummary:: + :toctree: + + binaryninja.lowlevelil.ILFlag + binaryninja.lowlevelil.ILIntrinsic + binaryninja.lowlevelil.ILRegister + binaryninja.lowlevelil.ILRegisterStack + binaryninja.lowlevelil.ILSemanticFlagClass + binaryninja.lowlevelil.ILSemanticFlagGroup + binaryninja.lowlevelil.LowLevelILBasicBlock + binaryninja.lowlevelil.LowLevelILExpr + binaryninja.lowlevelil.LowLevelILFunction + binaryninja.lowlevelil.LowLevelILInstruction + binaryninja.lowlevelil.LowLevelILLabel + binaryninja.lowlevelil.LowLevelILOperationAndSize + binaryninja.lowlevelil.SSAFlag + binaryninja.lowlevelil.SSARegister + binaryninja.lowlevelil.SSARegisterOrFlag + binaryninja.lowlevelil.SSARegisterStack + binaryninja.lowlevelil.LLIL_GET_TEMP_REG_INDEX + binaryninja.lowlevelil.LLIL_REG_IS_TEMP + binaryninja.lowlevelil.LLIL_TEMP + binaryninja.lowlevelil.range + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.lowlevelil + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil.ILFlag.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil.ILFlag.rst.txt new file mode 100644 index 0000000..7c5409f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil.ILFlag.rst.txt @@ -0,0 +1,22 @@ +binaryninja.lowlevelil.ILFlag +============================= + +.. currentmodule:: binaryninja.lowlevelil + +.. autoclass:: ILFlag + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ILFlag.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil.ILIntrinsic.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil.ILIntrinsic.rst.txt new file mode 100644 index 0000000..dc00745 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil.ILIntrinsic.rst.txt @@ -0,0 +1,22 @@ +binaryninja.lowlevelil.ILIntrinsic +================================== + +.. currentmodule:: binaryninja.lowlevelil + +.. autoclass:: ILIntrinsic + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ILIntrinsic.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil.ILRegister.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil.ILRegister.rst.txt new file mode 100644 index 0000000..98af114 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil.ILRegister.rst.txt @@ -0,0 +1,28 @@ +binaryninja.lowlevelil.ILRegister +================================= + +.. currentmodule:: binaryninja.lowlevelil + +.. autoclass:: ILRegister + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ILRegister.__init__ + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~ILRegister.info + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil.ILRegisterStack.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil.ILRegisterStack.rst.txt new file mode 100644 index 0000000..ecbeeb9 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil.ILRegisterStack.rst.txt @@ -0,0 +1,28 @@ +binaryninja.lowlevelil.ILRegisterStack +====================================== + +.. currentmodule:: binaryninja.lowlevelil + +.. autoclass:: ILRegisterStack + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ILRegisterStack.__init__ + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~ILRegisterStack.info + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil.ILSemanticFlagClass.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil.ILSemanticFlagClass.rst.txt new file mode 100644 index 0000000..b5b3e82 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil.ILSemanticFlagClass.rst.txt @@ -0,0 +1,22 @@ +binaryninja.lowlevelil.ILSemanticFlagClass +========================================== + +.. currentmodule:: binaryninja.lowlevelil + +.. autoclass:: ILSemanticFlagClass + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ILSemanticFlagClass.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil.ILSemanticFlagGroup.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil.ILSemanticFlagGroup.rst.txt new file mode 100644 index 0000000..3958662 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil.ILSemanticFlagGroup.rst.txt @@ -0,0 +1,22 @@ +binaryninja.lowlevelil.ILSemanticFlagGroup +========================================== + +.. currentmodule:: binaryninja.lowlevelil + +.. autoclass:: ILSemanticFlagGroup + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ILSemanticFlagGroup.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil.LLIL_GET_TEMP_REG_INDEX.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil.LLIL_GET_TEMP_REG_INDEX.rst.txt new file mode 100644 index 0000000..2e3a599 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil.LLIL_GET_TEMP_REG_INDEX.rst.txt @@ -0,0 +1,6 @@ +binaryninja.lowlevelil.LLIL\_GET\_TEMP\_REG\_INDEX +================================================== + +.. currentmodule:: binaryninja.lowlevelil + +.. autofunction:: LLIL_GET_TEMP_REG_INDEX \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil.LLIL_REG_IS_TEMP.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil.LLIL_REG_IS_TEMP.rst.txt new file mode 100644 index 0000000..6923452 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil.LLIL_REG_IS_TEMP.rst.txt @@ -0,0 +1,6 @@ +binaryninja.lowlevelil.LLIL\_REG\_IS\_TEMP +========================================== + +.. currentmodule:: binaryninja.lowlevelil + +.. autofunction:: LLIL_REG_IS_TEMP \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil.LLIL_TEMP.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil.LLIL_TEMP.rst.txt new file mode 100644 index 0000000..48f88fb --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil.LLIL_TEMP.rst.txt @@ -0,0 +1,6 @@ +binaryninja.lowlevelil.LLIL\_TEMP +================================= + +.. currentmodule:: binaryninja.lowlevelil + +.. autofunction:: LLIL_TEMP \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil.LowLevelILBasicBlock.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil.LowLevelILBasicBlock.rst.txt new file mode 100644 index 0000000..650859f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil.LowLevelILBasicBlock.rst.txt @@ -0,0 +1,53 @@ +binaryninja.lowlevelil.LowLevelILBasicBlock +=========================================== + +.. currentmodule:: binaryninja.lowlevelil + +.. autoclass:: LowLevelILBasicBlock + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~LowLevelILBasicBlock.__init__ + ~LowLevelILBasicBlock.get_disassembly_text + ~LowLevelILBasicBlock.get_iterated_dominance_frontier + ~LowLevelILBasicBlock.mark_recent_use + ~LowLevelILBasicBlock.set_auto_highlight + ~LowLevelILBasicBlock.set_user_highlight + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~LowLevelILBasicBlock.annotations + ~LowLevelILBasicBlock.arch + ~LowLevelILBasicBlock.can_exit + ~LowLevelILBasicBlock.disassembly_text + ~LowLevelILBasicBlock.dominance_frontier + ~LowLevelILBasicBlock.dominator_tree_children + ~LowLevelILBasicBlock.dominators + ~LowLevelILBasicBlock.end + ~LowLevelILBasicBlock.function + ~LowLevelILBasicBlock.has_undetermined_outgoing_edges + ~LowLevelILBasicBlock.highlight + ~LowLevelILBasicBlock.immediate_dominator + ~LowLevelILBasicBlock.incoming_edges + ~LowLevelILBasicBlock.index + ~LowLevelILBasicBlock.is_il + ~LowLevelILBasicBlock.is_low_level_il + ~LowLevelILBasicBlock.is_medium_level_il + ~LowLevelILBasicBlock.length + ~LowLevelILBasicBlock.outgoing_edges + ~LowLevelILBasicBlock.start + ~LowLevelILBasicBlock.strict_dominators + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil.LowLevelILExpr.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil.LowLevelILExpr.rst.txt new file mode 100644 index 0000000..3211ae5 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil.LowLevelILExpr.rst.txt @@ -0,0 +1,22 @@ +binaryninja.lowlevelil.LowLevelILExpr +===================================== + +.. currentmodule:: binaryninja.lowlevelil + +.. autoclass:: LowLevelILExpr + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~LowLevelILExpr.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil.LowLevelILFunction.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil.LowLevelILFunction.rst.txt new file mode 100644 index 0000000..178c2cb --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil.LowLevelILFunction.rst.txt @@ -0,0 +1,165 @@ +binaryninja.lowlevelil.LowLevelILFunction +========================================= + +.. currentmodule:: binaryninja.lowlevelil + +.. autoclass:: LowLevelILFunction + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~LowLevelILFunction.__init__ + ~LowLevelILFunction.add + ~LowLevelILFunction.add_carry + ~LowLevelILFunction.add_label_for_address + ~LowLevelILFunction.add_label_list + ~LowLevelILFunction.add_operand_list + ~LowLevelILFunction.and_expr + ~LowLevelILFunction.append + ~LowLevelILFunction.arith_shift_right + ~LowLevelILFunction.breakpoint + ~LowLevelILFunction.call + ~LowLevelILFunction.call_stack_adjust + ~LowLevelILFunction.ceil + ~LowLevelILFunction.clear_indirect_branches + ~LowLevelILFunction.compare_equal + ~LowLevelILFunction.compare_not_equal + ~LowLevelILFunction.compare_signed_greater_equal + ~LowLevelILFunction.compare_signed_greater_than + ~LowLevelILFunction.compare_signed_less_equal + ~LowLevelILFunction.compare_signed_less_than + ~LowLevelILFunction.compare_unsigned_greater_equal + ~LowLevelILFunction.compare_unsigned_greater_than + ~LowLevelILFunction.compare_unsigned_less_equal + ~LowLevelILFunction.compare_unsigned_less_than + ~LowLevelILFunction.const + ~LowLevelILFunction.const_pointer + ~LowLevelILFunction.create_graph + ~LowLevelILFunction.div_double_prec_signed + ~LowLevelILFunction.div_double_prec_unsigned + ~LowLevelILFunction.div_signed + ~LowLevelILFunction.div_unsigned + ~LowLevelILFunction.expr + ~LowLevelILFunction.finalize + ~LowLevelILFunction.flag + ~LowLevelILFunction.flag_bit + ~LowLevelILFunction.flag_condition + ~LowLevelILFunction.flag_group + ~LowLevelILFunction.float_abs + ~LowLevelILFunction.float_add + ~LowLevelILFunction.float_compare_equal + ~LowLevelILFunction.float_compare_greater_equal + ~LowLevelILFunction.float_compare_greater_than + ~LowLevelILFunction.float_compare_less_equal + ~LowLevelILFunction.float_compare_less_than + ~LowLevelILFunction.float_compare_not_equal + ~LowLevelILFunction.float_compare_unordered + ~LowLevelILFunction.float_const_double + ~LowLevelILFunction.float_const_raw + ~LowLevelILFunction.float_const_single + ~LowLevelILFunction.float_convert + ~LowLevelILFunction.float_div + ~LowLevelILFunction.float_mult + ~LowLevelILFunction.float_neg + ~LowLevelILFunction.float_sqrt + ~LowLevelILFunction.float_sub + ~LowLevelILFunction.float_to_int + ~LowLevelILFunction.float_trunc + ~LowLevelILFunction.floor + ~LowLevelILFunction.get_instruction_start + ~LowLevelILFunction.get_label_for_address + ~LowLevelILFunction.get_mapped_medium_level_il_expr_index + ~LowLevelILFunction.get_mapped_medium_level_il_instruction_index + ~LowLevelILFunction.get_medium_level_il_expr_index + ~LowLevelILFunction.get_medium_level_il_instruction_index + ~LowLevelILFunction.get_non_ssa_instruction_index + ~LowLevelILFunction.get_ssa_flag_definition + ~LowLevelILFunction.get_ssa_flag_uses + ~LowLevelILFunction.get_ssa_flag_value + ~LowLevelILFunction.get_ssa_instruction_index + ~LowLevelILFunction.get_ssa_memory_definition + ~LowLevelILFunction.get_ssa_memory_uses + ~LowLevelILFunction.get_ssa_reg_definition + ~LowLevelILFunction.get_ssa_reg_uses + ~LowLevelILFunction.get_ssa_reg_value + ~LowLevelILFunction.goto + ~LowLevelILFunction.if_expr + ~LowLevelILFunction.int_to_float + ~LowLevelILFunction.intrinsic + ~LowLevelILFunction.jump + ~LowLevelILFunction.load + ~LowLevelILFunction.logical_shift_right + ~LowLevelILFunction.low_part + ~LowLevelILFunction.mark_label + ~LowLevelILFunction.mod_double_prec_signed + ~LowLevelILFunction.mod_double_prec_unsigned + ~LowLevelILFunction.mod_signed + ~LowLevelILFunction.mod_unsigned + ~LowLevelILFunction.mult + ~LowLevelILFunction.mult_double_prec_signed + ~LowLevelILFunction.mult_double_prec_unsigned + ~LowLevelILFunction.neg_expr + ~LowLevelILFunction.no_ret + ~LowLevelILFunction.nop + ~LowLevelILFunction.not_expr + ~LowLevelILFunction.operand + ~LowLevelILFunction.or_expr + ~LowLevelILFunction.pop + ~LowLevelILFunction.push + ~LowLevelILFunction.reg + ~LowLevelILFunction.reg_split + ~LowLevelILFunction.reg_stack_pop + ~LowLevelILFunction.reg_stack_push + ~LowLevelILFunction.reg_stack_top_relative + ~LowLevelILFunction.reloc_pointer + ~LowLevelILFunction.ret + ~LowLevelILFunction.rotate_left + ~LowLevelILFunction.rotate_left_carry + ~LowLevelILFunction.rotate_right + ~LowLevelILFunction.rotate_right_carry + ~LowLevelILFunction.round_to_int + ~LowLevelILFunction.set_current_address + ~LowLevelILFunction.set_flag + ~LowLevelILFunction.set_indirect_branches + ~LowLevelILFunction.set_reg + ~LowLevelILFunction.set_reg_split + ~LowLevelILFunction.set_reg_stack_top_relative + ~LowLevelILFunction.shift_left + ~LowLevelILFunction.sign_extend + ~LowLevelILFunction.store + ~LowLevelILFunction.sub + ~LowLevelILFunction.sub_borrow + ~LowLevelILFunction.system_call + ~LowLevelILFunction.tailcall + ~LowLevelILFunction.test_bit + ~LowLevelILFunction.trap + ~LowLevelILFunction.undefined + ~LowLevelILFunction.unimplemented + ~LowLevelILFunction.unimplemented_memory_ref + ~LowLevelILFunction.xor_expr + ~LowLevelILFunction.zero_extend + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~LowLevelILFunction.basic_blocks + ~LowLevelILFunction.current_address + ~LowLevelILFunction.instructions + ~LowLevelILFunction.mapped_medium_level_il + ~LowLevelILFunction.medium_level_il + ~LowLevelILFunction.non_ssa_form + ~LowLevelILFunction.ssa_form + ~LowLevelILFunction.temp_flag_count + ~LowLevelILFunction.temp_reg_count + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil.LowLevelILInstruction.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil.LowLevelILInstruction.rst.txt new file mode 100644 index 0000000..8dff0e3 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil.LowLevelILInstruction.rst.txt @@ -0,0 +1,50 @@ +binaryninja.lowlevelil.LowLevelILInstruction +============================================ + +.. currentmodule:: binaryninja.lowlevelil + +.. autoclass:: LowLevelILInstruction + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~LowLevelILInstruction.__init__ + ~LowLevelILInstruction.get_flag_value + ~LowLevelILInstruction.get_flag_value_after + ~LowLevelILInstruction.get_possible_flag_values + ~LowLevelILInstruction.get_possible_flag_values_after + ~LowLevelILInstruction.get_possible_reg_values + ~LowLevelILInstruction.get_possible_reg_values_after + ~LowLevelILInstruction.get_possible_stack_contents + ~LowLevelILInstruction.get_possible_stack_contents_after + ~LowLevelILInstruction.get_reg_value + ~LowLevelILInstruction.get_reg_value_after + ~LowLevelILInstruction.get_stack_contents + ~LowLevelILInstruction.get_stack_contents_after + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~LowLevelILInstruction.ILOperations + ~LowLevelILInstruction.il_basic_block + ~LowLevelILInstruction.mapped_medium_level_il + ~LowLevelILInstruction.medium_level_il + ~LowLevelILInstruction.non_ssa_form + ~LowLevelILInstruction.possible_values + ~LowLevelILInstruction.postfix_operands + ~LowLevelILInstruction.prefix_operands + ~LowLevelILInstruction.ssa_form + ~LowLevelILInstruction.tokens + ~LowLevelILInstruction.value + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil.LowLevelILLabel.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil.LowLevelILLabel.rst.txt new file mode 100644 index 0000000..9b46de7 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil.LowLevelILLabel.rst.txt @@ -0,0 +1,22 @@ +binaryninja.lowlevelil.LowLevelILLabel +====================================== + +.. currentmodule:: binaryninja.lowlevelil + +.. autoclass:: LowLevelILLabel + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~LowLevelILLabel.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil.LowLevelILOperationAndSize.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil.LowLevelILOperationAndSize.rst.txt new file mode 100644 index 0000000..09e689d --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil.LowLevelILOperationAndSize.rst.txt @@ -0,0 +1,22 @@ +binaryninja.lowlevelil.LowLevelILOperationAndSize +================================================= + +.. currentmodule:: binaryninja.lowlevelil + +.. autoclass:: LowLevelILOperationAndSize + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~LowLevelILOperationAndSize.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil.SSAFlag.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil.SSAFlag.rst.txt new file mode 100644 index 0000000..8419e0f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil.SSAFlag.rst.txt @@ -0,0 +1,22 @@ +binaryninja.lowlevelil.SSAFlag +============================== + +.. currentmodule:: binaryninja.lowlevelil + +.. autoclass:: SSAFlag + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~SSAFlag.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil.SSARegister.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil.SSARegister.rst.txt new file mode 100644 index 0000000..2e9c84c --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil.SSARegister.rst.txt @@ -0,0 +1,22 @@ +binaryninja.lowlevelil.SSARegister +================================== + +.. currentmodule:: binaryninja.lowlevelil + +.. autoclass:: SSARegister + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~SSARegister.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil.SSARegisterOrFlag.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil.SSARegisterOrFlag.rst.txt new file mode 100644 index 0000000..9469e89 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil.SSARegisterOrFlag.rst.txt @@ -0,0 +1,22 @@ +binaryninja.lowlevelil.SSARegisterOrFlag +======================================== + +.. currentmodule:: binaryninja.lowlevelil + +.. autoclass:: SSARegisterOrFlag + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~SSARegisterOrFlag.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil.SSARegisterStack.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil.SSARegisterStack.rst.txt new file mode 100644 index 0000000..1a8c246 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil.SSARegisterStack.rst.txt @@ -0,0 +1,22 @@ +binaryninja.lowlevelil.SSARegisterStack +======================================= + +.. currentmodule:: binaryninja.lowlevelil + +.. autoclass:: SSARegisterStack + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~SSARegisterStack.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.lowlevelil.range.rst.txt b/personal/api-docs/_sources/binaryninja.lowlevelil.range.rst.txt new file mode 100644 index 0000000..d4ee33c --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.lowlevelil.range.rst.txt @@ -0,0 +1,6 @@ +binaryninja.lowlevelil.range +============================ + +.. currentmodule:: binaryninja.lowlevelil + +.. autofunction:: range \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.mainthread-module.rst.txt b/personal/api-docs/_sources/binaryninja.mainthread-module.rst.txt new file mode 100644 index 0000000..9241381 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.mainthread-module.rst.txt @@ -0,0 +1,22 @@ +mainthread module +===================== + +.. autosummary:: + :toctree: + + binaryninja.mainthread.execute_on_main_thread + binaryninja.mainthread.execute_on_main_thread_and_wait + binaryninja.mainthread.get_worker_thread_count + binaryninja.mainthread.set_worker_thread_count + binaryninja.mainthread.worker_enqueue + binaryninja.mainthread.worker_interactive_enqueue + binaryninja.mainthread.worker_priority_enqueue + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.mainthread + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.mainthread.execute_on_main_thread.rst.txt b/personal/api-docs/_sources/binaryninja.mainthread.execute_on_main_thread.rst.txt new file mode 100644 index 0000000..0267094 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.mainthread.execute_on_main_thread.rst.txt @@ -0,0 +1,6 @@ +binaryninja.mainthread.execute\_on\_main\_thread +================================================ + +.. currentmodule:: binaryninja.mainthread + +.. autofunction:: execute_on_main_thread \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.mainthread.execute_on_main_thread_and_wait.rst.txt b/personal/api-docs/_sources/binaryninja.mainthread.execute_on_main_thread_and_wait.rst.txt new file mode 100644 index 0000000..e87cf88 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.mainthread.execute_on_main_thread_and_wait.rst.txt @@ -0,0 +1,6 @@ +binaryninja.mainthread.execute\_on\_main\_thread\_and\_wait +=========================================================== + +.. currentmodule:: binaryninja.mainthread + +.. autofunction:: execute_on_main_thread_and_wait \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.mainthread.get_worker_thread_count.rst.txt b/personal/api-docs/_sources/binaryninja.mainthread.get_worker_thread_count.rst.txt new file mode 100644 index 0000000..ef25433 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.mainthread.get_worker_thread_count.rst.txt @@ -0,0 +1,6 @@ +binaryninja.mainthread.get\_worker\_thread\_count +================================================= + +.. currentmodule:: binaryninja.mainthread + +.. autofunction:: get_worker_thread_count \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.mainthread.set_worker_thread_count.rst.txt b/personal/api-docs/_sources/binaryninja.mainthread.set_worker_thread_count.rst.txt new file mode 100644 index 0000000..187a9a4 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.mainthread.set_worker_thread_count.rst.txt @@ -0,0 +1,6 @@ +binaryninja.mainthread.set\_worker\_thread\_count +================================================= + +.. currentmodule:: binaryninja.mainthread + +.. autofunction:: set_worker_thread_count \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.mainthread.worker_enqueue.rst.txt b/personal/api-docs/_sources/binaryninja.mainthread.worker_enqueue.rst.txt new file mode 100644 index 0000000..5d3b3a4 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.mainthread.worker_enqueue.rst.txt @@ -0,0 +1,6 @@ +binaryninja.mainthread.worker\_enqueue +====================================== + +.. currentmodule:: binaryninja.mainthread + +.. autofunction:: worker_enqueue \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.mainthread.worker_interactive_enqueue.rst.txt b/personal/api-docs/_sources/binaryninja.mainthread.worker_interactive_enqueue.rst.txt new file mode 100644 index 0000000..c735f56 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.mainthread.worker_interactive_enqueue.rst.txt @@ -0,0 +1,6 @@ +binaryninja.mainthread.worker\_interactive\_enqueue +=================================================== + +.. currentmodule:: binaryninja.mainthread + +.. autofunction:: worker_interactive_enqueue \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.mainthread.worker_priority_enqueue.rst.txt b/personal/api-docs/_sources/binaryninja.mainthread.worker_priority_enqueue.rst.txt new file mode 100644 index 0000000..5a51757 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.mainthread.worker_priority_enqueue.rst.txt @@ -0,0 +1,6 @@ +binaryninja.mainthread.worker\_priority\_enqueue +================================================ + +.. currentmodule:: binaryninja.mainthread + +.. autofunction:: worker_priority_enqueue \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.mediumlevelil-module.rst.txt b/personal/api-docs/_sources/binaryninja.mediumlevelil-module.rst.txt new file mode 100644 index 0000000..7d703c1 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.mediumlevelil-module.rst.txt @@ -0,0 +1,23 @@ +mediumlevelil module +===================== + +.. autosummary:: + :toctree: + + binaryninja.mediumlevelil.MediumLevelILBasicBlock + binaryninja.mediumlevelil.MediumLevelILExpr + binaryninja.mediumlevelil.MediumLevelILFunction + binaryninja.mediumlevelil.MediumLevelILInstruction + binaryninja.mediumlevelil.MediumLevelILLabel + binaryninja.mediumlevelil.MediumLevelILOperationAndSize + binaryninja.mediumlevelil.SSAVariable + binaryninja.mediumlevelil.range + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.mediumlevelil + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILBasicBlock.rst.txt b/personal/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILBasicBlock.rst.txt new file mode 100644 index 0000000..85316c1 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILBasicBlock.rst.txt @@ -0,0 +1,53 @@ +binaryninja.mediumlevelil.MediumLevelILBasicBlock +================================================= + +.. currentmodule:: binaryninja.mediumlevelil + +.. autoclass:: MediumLevelILBasicBlock + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~MediumLevelILBasicBlock.__init__ + ~MediumLevelILBasicBlock.get_disassembly_text + ~MediumLevelILBasicBlock.get_iterated_dominance_frontier + ~MediumLevelILBasicBlock.mark_recent_use + ~MediumLevelILBasicBlock.set_auto_highlight + ~MediumLevelILBasicBlock.set_user_highlight + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~MediumLevelILBasicBlock.annotations + ~MediumLevelILBasicBlock.arch + ~MediumLevelILBasicBlock.can_exit + ~MediumLevelILBasicBlock.disassembly_text + ~MediumLevelILBasicBlock.dominance_frontier + ~MediumLevelILBasicBlock.dominator_tree_children + ~MediumLevelILBasicBlock.dominators + ~MediumLevelILBasicBlock.end + ~MediumLevelILBasicBlock.function + ~MediumLevelILBasicBlock.has_undetermined_outgoing_edges + ~MediumLevelILBasicBlock.highlight + ~MediumLevelILBasicBlock.immediate_dominator + ~MediumLevelILBasicBlock.incoming_edges + ~MediumLevelILBasicBlock.index + ~MediumLevelILBasicBlock.is_il + ~MediumLevelILBasicBlock.is_low_level_il + ~MediumLevelILBasicBlock.is_medium_level_il + ~MediumLevelILBasicBlock.length + ~MediumLevelILBasicBlock.outgoing_edges + ~MediumLevelILBasicBlock.start + ~MediumLevelILBasicBlock.strict_dominators + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILExpr.rst.txt b/personal/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILExpr.rst.txt new file mode 100644 index 0000000..b648b4a --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILExpr.rst.txt @@ -0,0 +1,22 @@ +binaryninja.mediumlevelil.MediumLevelILExpr +=========================================== + +.. currentmodule:: binaryninja.mediumlevelil + +.. autoclass:: MediumLevelILExpr + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~MediumLevelILExpr.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILFunction.rst.txt b/personal/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILFunction.rst.txt new file mode 100644 index 0000000..8e8d81c --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILFunction.rst.txt @@ -0,0 +1,57 @@ +binaryninja.mediumlevelil.MediumLevelILFunction +=============================================== + +.. currentmodule:: binaryninja.mediumlevelil + +.. autoclass:: MediumLevelILFunction + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~MediumLevelILFunction.__init__ + ~MediumLevelILFunction.add_label_list + ~MediumLevelILFunction.add_operand_list + ~MediumLevelILFunction.append + ~MediumLevelILFunction.create_graph + ~MediumLevelILFunction.expr + ~MediumLevelILFunction.finalize + ~MediumLevelILFunction.get_instruction_start + ~MediumLevelILFunction.get_low_level_il_expr_index + ~MediumLevelILFunction.get_low_level_il_instruction_index + ~MediumLevelILFunction.get_non_ssa_instruction_index + ~MediumLevelILFunction.get_ssa_instruction_index + ~MediumLevelILFunction.get_ssa_memory_definition + ~MediumLevelILFunction.get_ssa_memory_uses + ~MediumLevelILFunction.get_ssa_var_definition + ~MediumLevelILFunction.get_ssa_var_uses + ~MediumLevelILFunction.get_ssa_var_value + ~MediumLevelILFunction.get_var_definitions + ~MediumLevelILFunction.get_var_uses + ~MediumLevelILFunction.goto + ~MediumLevelILFunction.if_expr + ~MediumLevelILFunction.is_ssa_var_live + ~MediumLevelILFunction.mark_label + ~MediumLevelILFunction.operand + ~MediumLevelILFunction.set_current_address + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~MediumLevelILFunction.basic_blocks + ~MediumLevelILFunction.current_address + ~MediumLevelILFunction.instructions + ~MediumLevelILFunction.low_level_il + ~MediumLevelILFunction.non_ssa_form + ~MediumLevelILFunction.ssa_form + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILInstruction.rst.txt b/personal/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILInstruction.rst.txt new file mode 100644 index 0000000..719383c --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILInstruction.rst.txt @@ -0,0 +1,60 @@ +binaryninja.mediumlevelil.MediumLevelILInstruction +================================================== + +.. currentmodule:: binaryninja.mediumlevelil + +.. autoclass:: MediumLevelILInstruction + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~MediumLevelILInstruction.__init__ + ~MediumLevelILInstruction.get_branch_dependence + ~MediumLevelILInstruction.get_flag_value + ~MediumLevelILInstruction.get_flag_value_after + ~MediumLevelILInstruction.get_possible_flag_values + ~MediumLevelILInstruction.get_possible_flag_values_after + ~MediumLevelILInstruction.get_possible_reg_values + ~MediumLevelILInstruction.get_possible_reg_values_after + ~MediumLevelILInstruction.get_possible_stack_contents + ~MediumLevelILInstruction.get_possible_stack_contents_after + ~MediumLevelILInstruction.get_reg_value + ~MediumLevelILInstruction.get_reg_value_after + ~MediumLevelILInstruction.get_ssa_var_possible_values + ~MediumLevelILInstruction.get_ssa_var_version + ~MediumLevelILInstruction.get_stack_contents + ~MediumLevelILInstruction.get_stack_contents_after + ~MediumLevelILInstruction.get_var_for_flag + ~MediumLevelILInstruction.get_var_for_reg + ~MediumLevelILInstruction.get_var_for_stack_location + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~MediumLevelILInstruction.ILOperations + ~MediumLevelILInstruction.branch_dependence + ~MediumLevelILInstruction.expr_type + ~MediumLevelILInstruction.il_basic_block + ~MediumLevelILInstruction.low_level_il + ~MediumLevelILInstruction.non_ssa_form + ~MediumLevelILInstruction.possible_values + ~MediumLevelILInstruction.postfix_operands + ~MediumLevelILInstruction.prefix_operands + ~MediumLevelILInstruction.ssa_form + ~MediumLevelILInstruction.ssa_memory_version + ~MediumLevelILInstruction.tokens + ~MediumLevelILInstruction.value + ~MediumLevelILInstruction.vars_read + ~MediumLevelILInstruction.vars_written + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILLabel.rst.txt b/personal/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILLabel.rst.txt new file mode 100644 index 0000000..1f989b7 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILLabel.rst.txt @@ -0,0 +1,22 @@ +binaryninja.mediumlevelil.MediumLevelILLabel +============================================ + +.. currentmodule:: binaryninja.mediumlevelil + +.. autoclass:: MediumLevelILLabel + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~MediumLevelILLabel.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILOperationAndSize.rst.txt b/personal/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILOperationAndSize.rst.txt new file mode 100644 index 0000000..42f24cc --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.mediumlevelil.MediumLevelILOperationAndSize.rst.txt @@ -0,0 +1,22 @@ +binaryninja.mediumlevelil.MediumLevelILOperationAndSize +======================================================= + +.. currentmodule:: binaryninja.mediumlevelil + +.. autoclass:: MediumLevelILOperationAndSize + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~MediumLevelILOperationAndSize.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.mediumlevelil.SSAVariable.rst.txt b/personal/api-docs/_sources/binaryninja.mediumlevelil.SSAVariable.rst.txt new file mode 100644 index 0000000..d267b0f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.mediumlevelil.SSAVariable.rst.txt @@ -0,0 +1,22 @@ +binaryninja.mediumlevelil.SSAVariable +===================================== + +.. currentmodule:: binaryninja.mediumlevelil + +.. autoclass:: SSAVariable + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~SSAVariable.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.mediumlevelil.range.rst.txt b/personal/api-docs/_sources/binaryninja.mediumlevelil.range.rst.txt new file mode 100644 index 0000000..d341a19 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.mediumlevelil.range.rst.txt @@ -0,0 +1,6 @@ +binaryninja.mediumlevelil.range +=============================== + +.. currentmodule:: binaryninja.mediumlevelil + +.. autofunction:: range \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.metadata-module.rst.txt b/personal/api-docs/_sources/binaryninja.metadata-module.rst.txt new file mode 100644 index 0000000..0b0f177 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.metadata-module.rst.txt @@ -0,0 +1,18 @@ +metadata module +===================== + +.. autosummary:: + :toctree: + + binaryninja.metadata.Metadata + binaryninja.metadata.pyNativeStr + binaryninja.metadata.range + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.metadata + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.metadata.Metadata.rst.txt b/personal/api-docs/_sources/binaryninja.metadata.Metadata.rst.txt new file mode 100644 index 0000000..8aec247 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.metadata.Metadata.rst.txt @@ -0,0 +1,40 @@ +binaryninja.metadata.Metadata +============================= + +.. currentmodule:: binaryninja.metadata + +.. autoclass:: Metadata + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Metadata.__init__ + ~Metadata.get_dict + ~Metadata.remove + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Metadata.is_array + ~Metadata.is_boolean + ~Metadata.is_dict + ~Metadata.is_float + ~Metadata.is_integer + ~Metadata.is_raw + ~Metadata.is_signed_integer + ~Metadata.is_string + ~Metadata.is_unsigned_integer + ~Metadata.type + ~Metadata.value + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.metadata.pyNativeStr.rst.txt b/personal/api-docs/_sources/binaryninja.metadata.pyNativeStr.rst.txt new file mode 100644 index 0000000..8dfd46f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.metadata.pyNativeStr.rst.txt @@ -0,0 +1,6 @@ +binaryninja.metadata.pyNativeStr +================================ + +.. currentmodule:: binaryninja.metadata + +.. autofunction:: pyNativeStr \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.metadata.range.rst.txt b/personal/api-docs/_sources/binaryninja.metadata.range.rst.txt new file mode 100644 index 0000000..936270a --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.metadata.range.rst.txt @@ -0,0 +1,6 @@ +binaryninja.metadata.range +========================== + +.. currentmodule:: binaryninja.metadata + +.. autofunction:: range \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.numbers-module.rst.txt b/personal/api-docs/_sources/binaryninja.numbers-module.rst.txt new file mode 100644 index 0000000..dc6c8cd --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.numbers-module.rst.txt @@ -0,0 +1,23 @@ +numbers module +===================== + +.. autosummary:: + :toctree: + + binaryninja.numbers.ABCMeta + binaryninja.numbers.Complex + binaryninja.numbers.Integral + binaryninja.numbers.Number + binaryninja.numbers.Rational + binaryninja.numbers.Real + binaryninja.numbers.abstractproperty + binaryninja.numbers.abstractmethod + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.numbers + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.numbers.ABCMeta.rst.txt b/personal/api-docs/_sources/binaryninja.numbers.ABCMeta.rst.txt new file mode 100644 index 0000000..b3803a8 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.numbers.ABCMeta.rst.txt @@ -0,0 +1,23 @@ +binaryninja.numbers.ABCMeta +=========================== + +.. currentmodule:: binaryninja.numbers + +.. autoclass:: ABCMeta + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ABCMeta.mro + ~ABCMeta.register + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.numbers.Complex.rst.txt b/personal/api-docs/_sources/binaryninja.numbers.Complex.rst.txt new file mode 100644 index 0000000..00f4cd6 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.numbers.Complex.rst.txt @@ -0,0 +1,29 @@ +binaryninja.numbers.Complex +=========================== + +.. currentmodule:: binaryninja.numbers + +.. autoclass:: Complex + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Complex.conjugate + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Complex.imag + ~Complex.real + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.numbers.Integral.rst.txt b/personal/api-docs/_sources/binaryninja.numbers.Integral.rst.txt new file mode 100644 index 0000000..d7d4672 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.numbers.Integral.rst.txt @@ -0,0 +1,31 @@ +binaryninja.numbers.Integral +============================ + +.. currentmodule:: binaryninja.numbers + +.. autoclass:: Integral + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Integral.conjugate + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Integral.denominator + ~Integral.imag + ~Integral.numerator + ~Integral.real + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.numbers.Number.rst.txt b/personal/api-docs/_sources/binaryninja.numbers.Number.rst.txt new file mode 100644 index 0000000..77c191b --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.numbers.Number.rst.txt @@ -0,0 +1,16 @@ +binaryninja.numbers.Number +========================== + +.. currentmodule:: binaryninja.numbers + +.. autoclass:: Number + + + .. automethod:: __init__ + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.numbers.Rational.rst.txt b/personal/api-docs/_sources/binaryninja.numbers.Rational.rst.txt new file mode 100644 index 0000000..abf4135 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.numbers.Rational.rst.txt @@ -0,0 +1,31 @@ +binaryninja.numbers.Rational +============================ + +.. currentmodule:: binaryninja.numbers + +.. autoclass:: Rational + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Rational.conjugate + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Rational.denominator + ~Rational.imag + ~Rational.numerator + ~Rational.real + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.numbers.Real.rst.txt b/personal/api-docs/_sources/binaryninja.numbers.Real.rst.txt new file mode 100644 index 0000000..3f14410 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.numbers.Real.rst.txt @@ -0,0 +1,29 @@ +binaryninja.numbers.Real +======================== + +.. currentmodule:: binaryninja.numbers + +.. autoclass:: Real + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Real.conjugate + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Real.imag + ~Real.real + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.numbers.abstractmethod.rst.txt b/personal/api-docs/_sources/binaryninja.numbers.abstractmethod.rst.txt new file mode 100644 index 0000000..0204099 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.numbers.abstractmethod.rst.txt @@ -0,0 +1,6 @@ +binaryninja.numbers.abstractmethod +================================== + +.. currentmodule:: binaryninja.numbers + +.. autofunction:: abstractmethod \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.numbers.abstractproperty.rst.txt b/personal/api-docs/_sources/binaryninja.numbers.abstractproperty.rst.txt new file mode 100644 index 0000000..85ebf07 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.numbers.abstractproperty.rst.txt @@ -0,0 +1,32 @@ +binaryninja.numbers.abstractproperty +==================================== + +.. currentmodule:: binaryninja.numbers + +.. autoclass:: abstractproperty + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~abstractproperty.deleter + ~abstractproperty.getter + ~abstractproperty.setter + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~abstractproperty.fdel + ~abstractproperty.fget + ~abstractproperty.fset + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.platform-module.rst.txt b/personal/api-docs/_sources/binaryninja.platform-module.rst.txt new file mode 100644 index 0000000..bce9272 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.platform-module.rst.txt @@ -0,0 +1,18 @@ +platform module +===================== + +.. autosummary:: + :toctree: + + binaryninja.platform.Platform + binaryninja.platform.range + binaryninja.platform.with_metaclass + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.platform + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.platform.Platform.rst.txt b/personal/api-docs/_sources/binaryninja.platform.Platform.rst.txt new file mode 100644 index 0000000..a0d305c --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.platform.Platform.rst.txt @@ -0,0 +1,54 @@ +binaryninja.platform.Platform +============================= + +.. currentmodule:: binaryninja.platform + +.. autoclass:: Platform + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Platform.__init__ + ~Platform.add_related_platform + ~Platform.generate_auto_platform_type_id + ~Platform.generate_auto_platform_type_ref + ~Platform.get_associated_platform_by_address + ~Platform.get_auto_platform_type_id_source + ~Platform.get_function_by_name + ~Platform.get_related_platform + ~Platform.get_system_call_name + ~Platform.get_system_call_type + ~Platform.get_type_by_name + ~Platform.get_variable_by_name + ~Platform.parse_types_from_source + ~Platform.parse_types_from_source_file + ~Platform.register + ~Platform.register_calling_convention + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Platform.calling_conventions + ~Platform.cdecl_calling_convention + ~Platform.default_calling_convention + ~Platform.fastcall_calling_convention + ~Platform.functions + ~Platform.list + ~Platform.name + ~Platform.stdcall_calling_convention + ~Platform.system_call_convention + ~Platform.system_calls + ~Platform.types + ~Platform.variables + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.platform.range.rst.txt b/personal/api-docs/_sources/binaryninja.platform.range.rst.txt new file mode 100644 index 0000000..4eb9cbd --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.platform.range.rst.txt @@ -0,0 +1,6 @@ +binaryninja.platform.range +========================== + +.. currentmodule:: binaryninja.platform + +.. autofunction:: range \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.platform.with_metaclass.rst.txt b/personal/api-docs/_sources/binaryninja.platform.with_metaclass.rst.txt new file mode 100644 index 0000000..64099ac --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.platform.with_metaclass.rst.txt @@ -0,0 +1,6 @@ +binaryninja.platform.with\_metaclass +==================================== + +.. currentmodule:: binaryninja.platform + +.. autofunction:: with_metaclass \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.plugin-module.rst.txt b/personal/api-docs/_sources/binaryninja.plugin-module.rst.txt new file mode 100644 index 0000000..a1e0156 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.plugin-module.rst.txt @@ -0,0 +1,23 @@ +plugin module +===================== + +.. autosummary:: + :toctree: + + binaryninja.plugin.BackgroundTask + binaryninja.plugin.BackgroundTaskThread + binaryninja.plugin.MainThreadAction + binaryninja.plugin.MainThreadActionHandler + binaryninja.plugin.PluginCommand + binaryninja.plugin.PluginCommandContext + binaryninja.plugin.range + binaryninja.plugin.with_metaclass + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.plugin + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.plugin.BackgroundTask.rst.txt b/personal/api-docs/_sources/binaryninja.plugin.BackgroundTask.rst.txt new file mode 100644 index 0000000..2b68d88 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.plugin.BackgroundTask.rst.txt @@ -0,0 +1,34 @@ +binaryninja.plugin.BackgroundTask +================================= + +.. currentmodule:: binaryninja.plugin + +.. autoclass:: BackgroundTask + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~BackgroundTask.__init__ + ~BackgroundTask.cancel + ~BackgroundTask.finish + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~BackgroundTask.can_cancel + ~BackgroundTask.cancelled + ~BackgroundTask.finished + ~BackgroundTask.list + ~BackgroundTask.progress + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.plugin.BackgroundTaskThread.rst.txt b/personal/api-docs/_sources/binaryninja.plugin.BackgroundTaskThread.rst.txt new file mode 100644 index 0000000..36bce1f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.plugin.BackgroundTaskThread.rst.txt @@ -0,0 +1,37 @@ +binaryninja.plugin.BackgroundTaskThread +======================================= + +.. currentmodule:: binaryninja.plugin + +.. autoclass:: BackgroundTaskThread + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~BackgroundTaskThread.__init__ + ~BackgroundTaskThread.cancel + ~BackgroundTaskThread.finish + ~BackgroundTaskThread.join + ~BackgroundTaskThread.run + ~BackgroundTaskThread.start + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~BackgroundTaskThread.can_cancel + ~BackgroundTaskThread.cancelled + ~BackgroundTaskThread.finished + ~BackgroundTaskThread.list + ~BackgroundTaskThread.progress + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.plugin.MainThreadAction.rst.txt b/personal/api-docs/_sources/binaryninja.plugin.MainThreadAction.rst.txt new file mode 100644 index 0000000..0597df9 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.plugin.MainThreadAction.rst.txt @@ -0,0 +1,30 @@ +binaryninja.plugin.MainThreadAction +=================================== + +.. currentmodule:: binaryninja.plugin + +.. autoclass:: MainThreadAction + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~MainThreadAction.__init__ + ~MainThreadAction.execute + ~MainThreadAction.wait + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~MainThreadAction.done + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.plugin.MainThreadActionHandler.rst.txt b/personal/api-docs/_sources/binaryninja.plugin.MainThreadActionHandler.rst.txt new file mode 100644 index 0000000..e166a15 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.plugin.MainThreadActionHandler.rst.txt @@ -0,0 +1,24 @@ +binaryninja.plugin.MainThreadActionHandler +========================================== + +.. currentmodule:: binaryninja.plugin + +.. autoclass:: MainThreadActionHandler + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~MainThreadActionHandler.__init__ + ~MainThreadActionHandler.add_action + ~MainThreadActionHandler.register + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.plugin.PluginCommand.rst.txt b/personal/api-docs/_sources/binaryninja.plugin.PluginCommand.rst.txt new file mode 100644 index 0000000..18c5e1f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.plugin.PluginCommand.rst.txt @@ -0,0 +1,39 @@ +binaryninja.plugin.PluginCommand +================================ + +.. currentmodule:: binaryninja.plugin + +.. autoclass:: PluginCommand + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~PluginCommand.__init__ + ~PluginCommand.execute + ~PluginCommand.get_valid_list + ~PluginCommand.is_valid + ~PluginCommand.register + ~PluginCommand.register_for_address + ~PluginCommand.register_for_function + ~PluginCommand.register_for_low_level_il_function + ~PluginCommand.register_for_low_level_il_instruction + ~PluginCommand.register_for_medium_level_il_function + ~PluginCommand.register_for_medium_level_il_instruction + ~PluginCommand.register_for_range + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~PluginCommand.list + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.plugin.PluginCommandContext.rst.txt b/personal/api-docs/_sources/binaryninja.plugin.PluginCommandContext.rst.txt new file mode 100644 index 0000000..cd3c426 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.plugin.PluginCommandContext.rst.txt @@ -0,0 +1,22 @@ +binaryninja.plugin.PluginCommandContext +======================================= + +.. currentmodule:: binaryninja.plugin + +.. autoclass:: PluginCommandContext + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~PluginCommandContext.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.plugin.range.rst.txt b/personal/api-docs/_sources/binaryninja.plugin.range.rst.txt new file mode 100644 index 0000000..7f87675 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.plugin.range.rst.txt @@ -0,0 +1,6 @@ +binaryninja.plugin.range +======================== + +.. currentmodule:: binaryninja.plugin + +.. autofunction:: range \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.plugin.with_metaclass.rst.txt b/personal/api-docs/_sources/binaryninja.plugin.with_metaclass.rst.txt new file mode 100644 index 0000000..3e6b8d5 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.plugin.with_metaclass.rst.txt @@ -0,0 +1,6 @@ +binaryninja.plugin.with\_metaclass +================================== + +.. currentmodule:: binaryninja.plugin + +.. autofunction:: with_metaclass \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.pluginmanager-module.rst.txt b/personal/api-docs/_sources/binaryninja.pluginmanager-module.rst.txt new file mode 100644 index 0000000..d3ccd0a --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.pluginmanager-module.rst.txt @@ -0,0 +1,19 @@ +pluginmanager module +===================== + +.. autosummary:: + :toctree: + + binaryninja.pluginmanager.RepoPlugin + binaryninja.pluginmanager.Repository + binaryninja.pluginmanager.RepositoryManager + binaryninja.pluginmanager.range + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.pluginmanager + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.pluginmanager.RepoPlugin.rst.txt b/personal/api-docs/_sources/binaryninja.pluginmanager.RepoPlugin.rst.txt new file mode 100644 index 0000000..2d94e90 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.pluginmanager.RepoPlugin.rst.txt @@ -0,0 +1,41 @@ +binaryninja.pluginmanager.RepoPlugin +==================================== + +.. currentmodule:: binaryninja.pluginmanager + +.. autoclass:: RepoPlugin + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~RepoPlugin.__init__ + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~RepoPlugin.api + ~RepoPlugin.description + ~RepoPlugin.enabled + ~RepoPlugin.installed + ~RepoPlugin.license + ~RepoPlugin.license_text + ~RepoPlugin.long_description + ~RepoPlugin.minimum_version + ~RepoPlugin.name + ~RepoPlugin.path + ~RepoPlugin.plugin_types + ~RepoPlugin.update_status + ~RepoPlugin.url + ~RepoPlugin.version + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.pluginmanager.Repository.rst.txt b/personal/api-docs/_sources/binaryninja.pluginmanager.Repository.rst.txt new file mode 100644 index 0000000..6c058f1 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.pluginmanager.Repository.rst.txt @@ -0,0 +1,34 @@ +binaryninja.pluginmanager.Repository +==================================== + +.. currentmodule:: binaryninja.pluginmanager + +.. autoclass:: Repository + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Repository.__init__ + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Repository.full_path + ~Repository.initialized + ~Repository.local_reference + ~Repository.path + ~Repository.plugins + ~Repository.remote_reference + ~Repository.url + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.pluginmanager.RepositoryManager.rst.txt b/personal/api-docs/_sources/binaryninja.pluginmanager.RepositoryManager.rst.txt new file mode 100644 index 0000000..9252a0a --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.pluginmanager.RepositoryManager.rst.txt @@ -0,0 +1,37 @@ +binaryninja.pluginmanager.RepositoryManager +=========================================== + +.. currentmodule:: binaryninja.pluginmanager + +.. autoclass:: RepositoryManager + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~RepositoryManager.__init__ + ~RepositoryManager.add_repository + ~RepositoryManager.check_for_updates + ~RepositoryManager.disable_plugin + ~RepositoryManager.enable_plugin + ~RepositoryManager.install_plugin + ~RepositoryManager.uninstall_plugin + ~RepositoryManager.update_plugin + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~RepositoryManager.default_repository + ~RepositoryManager.plugins + ~RepositoryManager.repositories + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.pluginmanager.range.rst.txt b/personal/api-docs/_sources/binaryninja.pluginmanager.range.rst.txt new file mode 100644 index 0000000..c87f0b7 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.pluginmanager.range.rst.txt @@ -0,0 +1,6 @@ +binaryninja.pluginmanager.range +=============================== + +.. currentmodule:: binaryninja.pluginmanager + +.. autofunction:: range \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.scriptingprovider-module.rst.txt b/personal/api-docs/_sources/binaryninja.scriptingprovider-module.rst.txt new file mode 100644 index 0000000..6bdc1d5 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.scriptingprovider-module.rst.txt @@ -0,0 +1,23 @@ +scriptingprovider module +===================== + +.. autosummary:: + :toctree: + + binaryninja.scriptingprovider.PythonScriptingInstance + binaryninja.scriptingprovider.PythonScriptingProvider + binaryninja.scriptingprovider.ScriptingInstance + binaryninja.scriptingprovider.ScriptingOutputListener + binaryninja.scriptingprovider.ScriptingProvider + binaryninja.scriptingprovider.range + binaryninja.scriptingprovider.redirect_stdio + binaryninja.scriptingprovider.with_metaclass + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.scriptingprovider + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.scriptingprovider.PythonScriptingInstance.rst.txt b/personal/api-docs/_sources/binaryninja.scriptingprovider.PythonScriptingInstance.rst.txt new file mode 100644 index 0000000..8b7a40a --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.scriptingprovider.PythonScriptingInstance.rst.txt @@ -0,0 +1,45 @@ +binaryninja.scriptingprovider.PythonScriptingInstance +===================================================== + +.. currentmodule:: binaryninja.scriptingprovider + +.. autoclass:: PythonScriptingInstance + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~PythonScriptingInstance.__init__ + ~PythonScriptingInstance.error + ~PythonScriptingInstance.execute_script_input + ~PythonScriptingInstance.output + ~PythonScriptingInstance.perform_destroy_instance + ~PythonScriptingInstance.perform_execute_script_input + ~PythonScriptingInstance.perform_set_current_address + ~PythonScriptingInstance.perform_set_current_basic_block + ~PythonScriptingInstance.perform_set_current_binary_view + ~PythonScriptingInstance.perform_set_current_function + ~PythonScriptingInstance.perform_set_current_selection + ~PythonScriptingInstance.register_output_listener + ~PythonScriptingInstance.set_current_address + ~PythonScriptingInstance.set_current_basic_block + ~PythonScriptingInstance.set_current_binary_view + ~PythonScriptingInstance.set_current_function + ~PythonScriptingInstance.set_current_selection + ~PythonScriptingInstance.unregister_output_listener + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~PythonScriptingInstance.input_ready_state + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.scriptingprovider.PythonScriptingProvider.rst.txt b/personal/api-docs/_sources/binaryninja.scriptingprovider.PythonScriptingProvider.rst.txt new file mode 100644 index 0000000..5c81a90 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.scriptingprovider.PythonScriptingProvider.rst.txt @@ -0,0 +1,31 @@ +binaryninja.scriptingprovider.PythonScriptingProvider +===================================================== + +.. currentmodule:: binaryninja.scriptingprovider + +.. autoclass:: PythonScriptingProvider + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~PythonScriptingProvider.__init__ + ~PythonScriptingProvider.create_instance + ~PythonScriptingProvider.register + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~PythonScriptingProvider.list + ~PythonScriptingProvider.name + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.scriptingprovider.ScriptingInstance.rst.txt b/personal/api-docs/_sources/binaryninja.scriptingprovider.ScriptingInstance.rst.txt new file mode 100644 index 0000000..25f4ff8 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.scriptingprovider.ScriptingInstance.rst.txt @@ -0,0 +1,45 @@ +binaryninja.scriptingprovider.ScriptingInstance +=============================================== + +.. currentmodule:: binaryninja.scriptingprovider + +.. autoclass:: ScriptingInstance + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ScriptingInstance.__init__ + ~ScriptingInstance.error + ~ScriptingInstance.execute_script_input + ~ScriptingInstance.output + ~ScriptingInstance.perform_destroy_instance + ~ScriptingInstance.perform_execute_script_input + ~ScriptingInstance.perform_set_current_address + ~ScriptingInstance.perform_set_current_basic_block + ~ScriptingInstance.perform_set_current_binary_view + ~ScriptingInstance.perform_set_current_function + ~ScriptingInstance.perform_set_current_selection + ~ScriptingInstance.register_output_listener + ~ScriptingInstance.set_current_address + ~ScriptingInstance.set_current_basic_block + ~ScriptingInstance.set_current_binary_view + ~ScriptingInstance.set_current_function + ~ScriptingInstance.set_current_selection + ~ScriptingInstance.unregister_output_listener + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~ScriptingInstance.input_ready_state + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.scriptingprovider.ScriptingOutputListener.rst.txt b/personal/api-docs/_sources/binaryninja.scriptingprovider.ScriptingOutputListener.rst.txt new file mode 100644 index 0000000..947822d --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.scriptingprovider.ScriptingOutputListener.rst.txt @@ -0,0 +1,24 @@ +binaryninja.scriptingprovider.ScriptingOutputListener +===================================================== + +.. currentmodule:: binaryninja.scriptingprovider + +.. autoclass:: ScriptingOutputListener + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ScriptingOutputListener.notify_error + ~ScriptingOutputListener.notify_input_ready_state_changed + ~ScriptingOutputListener.notify_output + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.scriptingprovider.ScriptingProvider.rst.txt b/personal/api-docs/_sources/binaryninja.scriptingprovider.ScriptingProvider.rst.txt new file mode 100644 index 0000000..7bf0b3d --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.scriptingprovider.ScriptingProvider.rst.txt @@ -0,0 +1,32 @@ +binaryninja.scriptingprovider.ScriptingProvider +=============================================== + +.. currentmodule:: binaryninja.scriptingprovider + +.. autoclass:: ScriptingProvider + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ScriptingProvider.__init__ + ~ScriptingProvider.create_instance + ~ScriptingProvider.register + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~ScriptingProvider.instance_class + ~ScriptingProvider.list + ~ScriptingProvider.name + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.scriptingprovider.range.rst.txt b/personal/api-docs/_sources/binaryninja.scriptingprovider.range.rst.txt new file mode 100644 index 0000000..9573171 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.scriptingprovider.range.rst.txt @@ -0,0 +1,6 @@ +binaryninja.scriptingprovider.range +=================================== + +.. currentmodule:: binaryninja.scriptingprovider + +.. autofunction:: range \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.scriptingprovider.redirect_stdio.rst.txt b/personal/api-docs/_sources/binaryninja.scriptingprovider.redirect_stdio.rst.txt new file mode 100644 index 0000000..f52a0ae --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.scriptingprovider.redirect_stdio.rst.txt @@ -0,0 +1,6 @@ +binaryninja.scriptingprovider.redirect\_stdio +============================================= + +.. currentmodule:: binaryninja.scriptingprovider + +.. autofunction:: redirect_stdio \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.scriptingprovider.with_metaclass.rst.txt b/personal/api-docs/_sources/binaryninja.scriptingprovider.with_metaclass.rst.txt new file mode 100644 index 0000000..1916c0b --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.scriptingprovider.with_metaclass.rst.txt @@ -0,0 +1,6 @@ +binaryninja.scriptingprovider.with\_metaclass +============================================= + +.. currentmodule:: binaryninja.scriptingprovider + +.. autofunction:: with_metaclass \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.settings-module.rst.txt b/personal/api-docs/_sources/binaryninja.settings-module.rst.txt new file mode 100644 index 0000000..fc7deaa --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.settings-module.rst.txt @@ -0,0 +1,18 @@ +settings module +===================== + +.. autosummary:: + :toctree: + + binaryninja.settings.Settings + binaryninja.settings.pyNativeStr + binaryninja.settings.range + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.settings + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.settings.Settings.rst.txt b/personal/api-docs/_sources/binaryninja.settings.Settings.rst.txt new file mode 100644 index 0000000..153d39f --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.settings.Settings.rst.txt @@ -0,0 +1,43 @@ +binaryninja.settings.Settings +============================= + +.. currentmodule:: binaryninja.settings + +.. autoclass:: Settings + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Settings.__init__ + ~Settings.get_bool + ~Settings.get_bool_with_scope + ~Settings.get_double + ~Settings.get_double_with_scope + ~Settings.get_integer + ~Settings.get_integer_with_scope + ~Settings.get_schema + ~Settings.get_string + ~Settings.get_string_list + ~Settings.get_string_list_with_scope + ~Settings.get_string_with_scope + ~Settings.register_group + ~Settings.register_setting + ~Settings.reset + ~Settings.reset_all + ~Settings.set_bool + ~Settings.set_double + ~Settings.set_integer + ~Settings.set_string + ~Settings.set_string_list + ~Settings.update_property + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.settings.pyNativeStr.rst.txt b/personal/api-docs/_sources/binaryninja.settings.pyNativeStr.rst.txt new file mode 100644 index 0000000..d1e5814 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.settings.pyNativeStr.rst.txt @@ -0,0 +1,6 @@ +binaryninja.settings.pyNativeStr +================================ + +.. currentmodule:: binaryninja.settings + +.. autofunction:: pyNativeStr \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.settings.range.rst.txt b/personal/api-docs/_sources/binaryninja.settings.range.rst.txt new file mode 100644 index 0000000..a293cda --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.settings.range.rst.txt @@ -0,0 +1,6 @@ +binaryninja.settings.range +========================== + +.. currentmodule:: binaryninja.settings + +.. autofunction:: range \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.transform-module.rst.txt b/personal/api-docs/_sources/binaryninja.transform-module.rst.txt new file mode 100644 index 0000000..a0e0417 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.transform-module.rst.txt @@ -0,0 +1,19 @@ +transform module +===================== + +.. autosummary:: + :toctree: + + binaryninja.transform.Transform + binaryninja.transform.TransformParameter + binaryninja.transform.range + binaryninja.transform.with_metaclass + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.transform + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.transform.Transform.rst.txt b/personal/api-docs/_sources/binaryninja.transform.Transform.rst.txt new file mode 100644 index 0000000..30d8321 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.transform.Transform.rst.txt @@ -0,0 +1,37 @@ +binaryninja.transform.Transform +=============================== + +.. currentmodule:: binaryninja.transform + +.. autoclass:: Transform + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Transform.__init__ + ~Transform.decode + ~Transform.encode + ~Transform.perform_decode + ~Transform.perform_encode + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Transform.group + ~Transform.list + ~Transform.long_name + ~Transform.name + ~Transform.parameters + ~Transform.transform_type + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.transform.TransformParameter.rst.txt b/personal/api-docs/_sources/binaryninja.transform.TransformParameter.rst.txt new file mode 100644 index 0000000..e5688fa --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.transform.TransformParameter.rst.txt @@ -0,0 +1,22 @@ +binaryninja.transform.TransformParameter +======================================== + +.. currentmodule:: binaryninja.transform + +.. autoclass:: TransformParameter + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~TransformParameter.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.transform.range.rst.txt b/personal/api-docs/_sources/binaryninja.transform.range.rst.txt new file mode 100644 index 0000000..a29667c --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.transform.range.rst.txt @@ -0,0 +1,6 @@ +binaryninja.transform.range +=========================== + +.. currentmodule:: binaryninja.transform + +.. autofunction:: range \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.transform.with_metaclass.rst.txt b/personal/api-docs/_sources/binaryninja.transform.with_metaclass.rst.txt new file mode 100644 index 0000000..aff59a0 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.transform.with_metaclass.rst.txt @@ -0,0 +1,6 @@ +binaryninja.transform.with\_metaclass +===================================== + +.. currentmodule:: binaryninja.transform + +.. autofunction:: with_metaclass \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.types-module.rst.txt b/personal/api-docs/_sources/binaryninja.types-module.rst.txt new file mode 100644 index 0000000..70d6c7b --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.types-module.rst.txt @@ -0,0 +1,34 @@ +types module +===================== + +.. autosummary:: + :toctree: + + binaryninja.types.BoolWithConfidence + binaryninja.types.Enumeration + binaryninja.types.EnumerationMember + binaryninja.types.FunctionParameter + binaryninja.types.NameSpace + binaryninja.types.NamedTypeReference + binaryninja.types.QualifiedName + binaryninja.types.ReferenceTypeWithConfidence + binaryninja.types.RegisterSet + binaryninja.types.RegisterStackAdjustmentWithConfidence + binaryninja.types.SizeWithConfidence + binaryninja.types.Structure + binaryninja.types.StructureMember + binaryninja.types.Symbol + binaryninja.types.Type + binaryninja.types.TypeParserResult + binaryninja.types.preprocess_source + binaryninja.types.pyNativeStr + binaryninja.types.range + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.types + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.types.BoolWithConfidence.rst.txt b/personal/api-docs/_sources/binaryninja.types.BoolWithConfidence.rst.txt new file mode 100644 index 0000000..2989443 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.types.BoolWithConfidence.rst.txt @@ -0,0 +1,22 @@ +binaryninja.types.BoolWithConfidence +==================================== + +.. currentmodule:: binaryninja.types + +.. autoclass:: BoolWithConfidence + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~BoolWithConfidence.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.types.Enumeration.rst.txt b/personal/api-docs/_sources/binaryninja.types.Enumeration.rst.txt new file mode 100644 index 0000000..7014fea --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.types.Enumeration.rst.txt @@ -0,0 +1,31 @@ +binaryninja.types.Enumeration +============================= + +.. currentmodule:: binaryninja.types + +.. autoclass:: Enumeration + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Enumeration.__init__ + ~Enumeration.append + ~Enumeration.remove + ~Enumeration.replace + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Enumeration.members + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.types.EnumerationMember.rst.txt b/personal/api-docs/_sources/binaryninja.types.EnumerationMember.rst.txt new file mode 100644 index 0000000..0b7d572 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.types.EnumerationMember.rst.txt @@ -0,0 +1,22 @@ +binaryninja.types.EnumerationMember +=================================== + +.. currentmodule:: binaryninja.types + +.. autoclass:: EnumerationMember + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~EnumerationMember.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.types.FunctionParameter.rst.txt b/personal/api-docs/_sources/binaryninja.types.FunctionParameter.rst.txt new file mode 100644 index 0000000..476dbd4 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.types.FunctionParameter.rst.txt @@ -0,0 +1,22 @@ +binaryninja.types.FunctionParameter +=================================== + +.. currentmodule:: binaryninja.types + +.. autoclass:: FunctionParameter + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~FunctionParameter.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.types.NameSpace.rst.txt b/personal/api-docs/_sources/binaryninja.types.NameSpace.rst.txt new file mode 100644 index 0000000..8635870 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.types.NameSpace.rst.txt @@ -0,0 +1,22 @@ +binaryninja.types.NameSpace +=========================== + +.. currentmodule:: binaryninja.types + +.. autoclass:: NameSpace + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~NameSpace.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.types.NamedTypeReference.rst.txt b/personal/api-docs/_sources/binaryninja.types.NamedTypeReference.rst.txt new file mode 100644 index 0000000..9a799f9 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.types.NamedTypeReference.rst.txt @@ -0,0 +1,32 @@ +binaryninja.types.NamedTypeReference +==================================== + +.. currentmodule:: binaryninja.types + +.. autoclass:: NamedTypeReference + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~NamedTypeReference.__init__ + ~NamedTypeReference.generate_auto_demangled_type_ref + ~NamedTypeReference.generate_auto_type_ref + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~NamedTypeReference.name + ~NamedTypeReference.type_class + ~NamedTypeReference.type_id + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.types.QualifiedName.rst.txt b/personal/api-docs/_sources/binaryninja.types.QualifiedName.rst.txt new file mode 100644 index 0000000..f3eaef5 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.types.QualifiedName.rst.txt @@ -0,0 +1,22 @@ +binaryninja.types.QualifiedName +=============================== + +.. currentmodule:: binaryninja.types + +.. autoclass:: QualifiedName + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~QualifiedName.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.types.ReferenceTypeWithConfidence.rst.txt b/personal/api-docs/_sources/binaryninja.types.ReferenceTypeWithConfidence.rst.txt new file mode 100644 index 0000000..0549627 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.types.ReferenceTypeWithConfidence.rst.txt @@ -0,0 +1,22 @@ +binaryninja.types.ReferenceTypeWithConfidence +============================================= + +.. currentmodule:: binaryninja.types + +.. autoclass:: ReferenceTypeWithConfidence + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~ReferenceTypeWithConfidence.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.types.RegisterSet.rst.txt b/personal/api-docs/_sources/binaryninja.types.RegisterSet.rst.txt new file mode 100644 index 0000000..ad2f903 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.types.RegisterSet.rst.txt @@ -0,0 +1,23 @@ +binaryninja.types.RegisterSet +============================= + +.. currentmodule:: binaryninja.types + +.. autoclass:: RegisterSet + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~RegisterSet.__init__ + ~RegisterSet.with_confidence + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.types.RegisterStackAdjustmentWithConfidence.rst.txt b/personal/api-docs/_sources/binaryninja.types.RegisterStackAdjustmentWithConfidence.rst.txt new file mode 100644 index 0000000..8e88ef1 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.types.RegisterStackAdjustmentWithConfidence.rst.txt @@ -0,0 +1,22 @@ +binaryninja.types.RegisterStackAdjustmentWithConfidence +======================================================= + +.. currentmodule:: binaryninja.types + +.. autoclass:: RegisterStackAdjustmentWithConfidence + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~RegisterStackAdjustmentWithConfidence.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.types.SizeWithConfidence.rst.txt b/personal/api-docs/_sources/binaryninja.types.SizeWithConfidence.rst.txt new file mode 100644 index 0000000..d368488 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.types.SizeWithConfidence.rst.txt @@ -0,0 +1,22 @@ +binaryninja.types.SizeWithConfidence +==================================== + +.. currentmodule:: binaryninja.types + +.. autoclass:: SizeWithConfidence + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~SizeWithConfidence.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.types.Structure.rst.txt b/personal/api-docs/_sources/binaryninja.types.Structure.rst.txt new file mode 100644 index 0000000..b0b4015 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.types.Structure.rst.txt @@ -0,0 +1,37 @@ +binaryninja.types.Structure +=========================== + +.. currentmodule:: binaryninja.types + +.. autoclass:: Structure + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Structure.__init__ + ~Structure.append + ~Structure.insert + ~Structure.remove + ~Structure.replace + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Structure.alignment + ~Structure.members + ~Structure.packed + ~Structure.type + ~Structure.union + ~Structure.width + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.types.StructureMember.rst.txt b/personal/api-docs/_sources/binaryninja.types.StructureMember.rst.txt new file mode 100644 index 0000000..05d1fbe --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.types.StructureMember.rst.txt @@ -0,0 +1,22 @@ +binaryninja.types.StructureMember +================================= + +.. currentmodule:: binaryninja.types + +.. autoclass:: StructureMember + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~StructureMember.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.types.Symbol.rst.txt b/personal/api-docs/_sources/binaryninja.types.Symbol.rst.txt new file mode 100644 index 0000000..eee4b82 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.types.Symbol.rst.txt @@ -0,0 +1,36 @@ +binaryninja.types.Symbol +======================== + +.. currentmodule:: binaryninja.types + +.. autoclass:: Symbol + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~Symbol.__init__ + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~Symbol.address + ~Symbol.auto + ~Symbol.binding + ~Symbol.full_name + ~Symbol.name + ~Symbol.namespace + ~Symbol.raw_name + ~Symbol.short_name + ~Symbol.type + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.types.Type.rst.txt b/personal/api-docs/_sources/binaryninja.types.Type.rst.txt new file mode 100644 index 0000000..1320e05 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.types.Type.rst.txt @@ -0,0 +1,70 @@ +binaryninja.types.Type +====================== + +.. currentmodule:: binaryninja.types + +.. 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 + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.types.TypeParserResult.rst.txt b/personal/api-docs/_sources/binaryninja.types.TypeParserResult.rst.txt new file mode 100644 index 0000000..c953472 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.types.TypeParserResult.rst.txt @@ -0,0 +1,22 @@ +binaryninja.types.TypeParserResult +================================== + +.. currentmodule:: binaryninja.types + +.. autoclass:: TypeParserResult + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~TypeParserResult.__init__ + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.types.preprocess_source.rst.txt b/personal/api-docs/_sources/binaryninja.types.preprocess_source.rst.txt new file mode 100644 index 0000000..cebe812 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.types.preprocess_source.rst.txt @@ -0,0 +1,6 @@ +binaryninja.types.preprocess\_source +==================================== + +.. currentmodule:: binaryninja.types + +.. autofunction:: preprocess_source \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.types.pyNativeStr.rst.txt b/personal/api-docs/_sources/binaryninja.types.pyNativeStr.rst.txt new file mode 100644 index 0000000..b0b35b3 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.types.pyNativeStr.rst.txt @@ -0,0 +1,6 @@ +binaryninja.types.pyNativeStr +============================= + +.. currentmodule:: binaryninja.types + +.. autofunction:: pyNativeStr \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.types.range.rst.txt b/personal/api-docs/_sources/binaryninja.types.range.rst.txt new file mode 100644 index 0000000..6fb4190 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.types.range.rst.txt @@ -0,0 +1,6 @@ +binaryninja.types.range +======================= + +.. currentmodule:: binaryninja.types + +.. autofunction:: range \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.undoaction-module.rst.txt b/personal/api-docs/_sources/binaryninja.undoaction-module.rst.txt new file mode 100644 index 0000000..af8f8da --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.undoaction-module.rst.txt @@ -0,0 +1,16 @@ +undoaction module +===================== + +.. autosummary:: + :toctree: + + binaryninja.undoaction.UndoAction + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.undoaction + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.undoaction.UndoAction.rst.txt b/personal/api-docs/_sources/binaryninja.undoaction.UndoAction.rst.txt new file mode 100644 index 0000000..db41caf --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.undoaction.UndoAction.rst.txt @@ -0,0 +1,30 @@ +binaryninja.undoaction.UndoAction +================================= + +.. currentmodule:: binaryninja.undoaction + +.. autoclass:: UndoAction + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~UndoAction.__init__ + ~UndoAction.register + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~UndoAction.action_type + ~UndoAction.name + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.update-module.rst.txt b/personal/api-docs/_sources/binaryninja.update-module.rst.txt new file mode 100644 index 0000000..c96d29c --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.update-module.rst.txt @@ -0,0 +1,26 @@ +update module +===================== + +.. autosummary:: + :toctree: + + binaryninja.update.UpdateChannel + binaryninja.update.UpdateProgressCallback + binaryninja.update.UpdateVersion + binaryninja.update.are_auto_updates_enabled + binaryninja.update.get_time_since_last_update_check + binaryninja.update.install_pending_update + binaryninja.update.is_update_installation_pending + binaryninja.update.range + binaryninja.update.set_auto_updates_enabled + binaryninja.update.updates_checked + binaryninja.update.with_metaclass + +.. toctree:: + :maxdepth: 2 + + +.. automodule:: binaryninja.update + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.update.UpdateChannel.rst.txt b/personal/api-docs/_sources/binaryninja.update.UpdateChannel.rst.txt new file mode 100644 index 0000000..09cf53b --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.update.UpdateChannel.rst.txt @@ -0,0 +1,31 @@ +binaryninja.update.UpdateChannel +================================ + +.. currentmodule:: binaryninja.update + +.. autoclass:: UpdateChannel + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~UpdateChannel.__init__ + ~UpdateChannel.update_to_latest + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~UpdateChannel.latest_version + ~UpdateChannel.updates_available + ~UpdateChannel.versions + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.update.UpdateProgressCallback.rst.txt b/personal/api-docs/_sources/binaryninja.update.UpdateProgressCallback.rst.txt new file mode 100644 index 0000000..b782d27 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.update.UpdateProgressCallback.rst.txt @@ -0,0 +1,23 @@ +binaryninja.update.UpdateProgressCallback +========================================= + +.. currentmodule:: binaryninja.update + +.. autoclass:: UpdateProgressCallback + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~UpdateProgressCallback.__init__ + ~UpdateProgressCallback.callback + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.update.UpdateVersion.rst.txt b/personal/api-docs/_sources/binaryninja.update.UpdateVersion.rst.txt new file mode 100644 index 0000000..8730471 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.update.UpdateVersion.rst.txt @@ -0,0 +1,23 @@ +binaryninja.update.UpdateVersion +================================ + +.. currentmodule:: binaryninja.update + +.. autoclass:: UpdateVersion + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~UpdateVersion.__init__ + ~UpdateVersion.update + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.update.are_auto_updates_enabled.rst.txt b/personal/api-docs/_sources/binaryninja.update.are_auto_updates_enabled.rst.txt new file mode 100644 index 0000000..b1a8135 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.update.are_auto_updates_enabled.rst.txt @@ -0,0 +1,6 @@ +binaryninja.update.are\_auto\_updates\_enabled +============================================== + +.. currentmodule:: binaryninja.update + +.. autofunction:: are_auto_updates_enabled \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.update.get_time_since_last_update_check.rst.txt b/personal/api-docs/_sources/binaryninja.update.get_time_since_last_update_check.rst.txt new file mode 100644 index 0000000..6f3a0cf --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.update.get_time_since_last_update_check.rst.txt @@ -0,0 +1,6 @@ +binaryninja.update.get\_time\_since\_last\_update\_check +======================================================== + +.. currentmodule:: binaryninja.update + +.. autofunction:: get_time_since_last_update_check \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.update.install_pending_update.rst.txt b/personal/api-docs/_sources/binaryninja.update.install_pending_update.rst.txt new file mode 100644 index 0000000..cb425fb --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.update.install_pending_update.rst.txt @@ -0,0 +1,6 @@ +binaryninja.update.install\_pending\_update +=========================================== + +.. currentmodule:: binaryninja.update + +.. autofunction:: install_pending_update \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.update.is_update_installation_pending.rst.txt b/personal/api-docs/_sources/binaryninja.update.is_update_installation_pending.rst.txt new file mode 100644 index 0000000..f87d1fe --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.update.is_update_installation_pending.rst.txt @@ -0,0 +1,6 @@ +binaryninja.update.is\_update\_installation\_pending +==================================================== + +.. currentmodule:: binaryninja.update + +.. autofunction:: is_update_installation_pending \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.update.range.rst.txt b/personal/api-docs/_sources/binaryninja.update.range.rst.txt new file mode 100644 index 0000000..4e6d238 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.update.range.rst.txt @@ -0,0 +1,6 @@ +binaryninja.update.range +======================== + +.. currentmodule:: binaryninja.update + +.. autofunction:: range \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.update.set_auto_updates_enabled.rst.txt b/personal/api-docs/_sources/binaryninja.update.set_auto_updates_enabled.rst.txt new file mode 100644 index 0000000..c230d75 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.update.set_auto_updates_enabled.rst.txt @@ -0,0 +1,6 @@ +binaryninja.update.set\_auto\_updates\_enabled +============================================== + +.. currentmodule:: binaryninja.update + +.. autofunction:: set_auto_updates_enabled \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.update.updates_checked.rst.txt b/personal/api-docs/_sources/binaryninja.update.updates_checked.rst.txt new file mode 100644 index 0000000..4bb3c67 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.update.updates_checked.rst.txt @@ -0,0 +1,6 @@ +binaryninja.update.updates\_checked +=================================== + +.. currentmodule:: binaryninja.update + +.. autofunction:: updates_checked \ No newline at end of file diff --git a/personal/api-docs/_sources/binaryninja.update.with_metaclass.rst.txt b/personal/api-docs/_sources/binaryninja.update.with_metaclass.rst.txt new file mode 100644 index 0000000..0bd4845 --- /dev/null +++ b/personal/api-docs/_sources/binaryninja.update.with_metaclass.rst.txt @@ -0,0 +1,6 @@ +binaryninja.update.with\_metaclass +================================== + +.. currentmodule:: binaryninja.update + +.. autofunction:: with_metaclass \ No newline at end of file diff --git a/personal/api-docs/_sources/c++.rst.txt b/personal/api-docs/_sources/c++.rst.txt new file mode 100644 index 0000000..6eec16b --- /dev/null +++ b/personal/api-docs/_sources/c++.rst.txt @@ -0,0 +1,10 @@ +Binary Ninja C++ API Documentation +================================== + +.. toctree:: + :maxdepth: 2 + + BinaryView_c++ + Architecture_c++ + Platform_c++ + ConsoleLogging_c++ diff --git a/personal/api-docs/_sources/c.rst.txt b/personal/api-docs/_sources/c.rst.txt new file mode 100644 index 0000000..4f4d597 --- /dev/null +++ b/personal/api-docs/_sources/c.rst.txt @@ -0,0 +1,3 @@ +Binary Ninja C API Documentation +================================ + diff --git a/personal/api-docs/_sources/index.rst.txt b/personal/api-docs/_sources/index.rst.txt new file mode 100644 index 0000000..ec4cc4d --- /dev/null +++ b/personal/api-docs/_sources/index.rst.txt @@ -0,0 +1,43 @@ +Binary Ninja Python API Documentation +===================================== + +.. toctree:: + :maxdepth: 2 + + architecture + atexit + basicblock + binaryview + callingconvention + databuffer + datarender + demangle + downloadprovider + enums + fileaccessor + filemetadata + flowgraph + function + functionrecognizer + highlight + interaction + lineardisassembly + log + lowlevelil + mainthread + mediumlevelil + metadata + numbers + platform + plugin + pluginmanager + scriptingprovider + settings + transform + types + undoaction + update +.. automodule:: binaryninja + :members: + :undoc-members: + :show-inheritance: diff --git a/personal/api-docs/_static/ajax-loader.gif b/personal/api-docs/_static/ajax-loader.gif new file mode 100644 index 0000000..61faf8c Binary files /dev/null and b/personal/api-docs/_static/ajax-loader.gif differ diff --git a/personal/api-docs/_static/basic.css b/personal/api-docs/_static/basic.css new file mode 100644 index 0000000..0807176 --- /dev/null +++ b/personal/api-docs/_static/basic.css @@ -0,0 +1,676 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist td { + vertical-align: top; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: relative; + left: 0px; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/personal/api-docs/_static/comment-bright.png b/personal/api-docs/_static/comment-bright.png new file mode 100644 index 0000000..15e27ed Binary files /dev/null and b/personal/api-docs/_static/comment-bright.png differ diff --git a/personal/api-docs/_static/comment-close.png b/personal/api-docs/_static/comment-close.png new file mode 100644 index 0000000..4d91bcf Binary files /dev/null and b/personal/api-docs/_static/comment-close.png differ diff --git a/personal/api-docs/_static/comment.png b/personal/api-docs/_static/comment.png new file mode 100644 index 0000000..dfbc0cb Binary files /dev/null and b/personal/api-docs/_static/comment.png differ diff --git a/personal/api-docs/_static/css/badge_only.css b/personal/api-docs/_static/css/badge_only.css new file mode 100644 index 0000000..90cc697 --- /dev/null +++ b/personal/api-docs/_static/css/badge_only.css @@ -0,0 +1,2 @@ +.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url("../font/fontawesome_webfont.eot");src:url("../font/fontawesome_webfont.eot?#iefix") format("embedded-opentype"),url("../font/fontawesome_webfont.woff") format("woff"),url("../font/fontawesome_webfont.ttf") format("truetype"),url("../font/fontawesome_webfont.svg#FontAwesome") format("svg")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:0.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:""}.icon-book:before{content:""}.fa-caret-down:before{content:""}.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.icon-caret-up:before{content:""}.fa-caret-left:before{content:""}.icon-caret-left:before{content:""}.fa-caret-right:before{content:""}.icon-caret-right:before{content:""}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;border-top:solid 10px #343131;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#d73726;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}img{width:100%;height:auto}} +/*# sourceMappingURL=badge_only.css.map */ diff --git a/personal/api-docs/_static/css/badge_only.css.map b/personal/api-docs/_static/css/badge_only.css.map new file mode 100644 index 0000000..9d07b87 --- /dev/null +++ b/personal/api-docs/_static/css/badge_only.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": "CAyDA,SAAY,EACV,qBAAsB,EAAE,UAAW,EAqDrC,QAAS,EARP,IAAK,EAAE,AAAC,EACR,+BAAS,EAEP,MAAO,EAAE,IAAK,EACd,MAAO,EAAE,CAAE,EACb,cAAO,EACL,IAAK,EAAE,GAAI,EC1Gb,SAkBC,EAjBC,UAAW,ECFJ,UAAW,EDGlB,UAAW,EAHqC,KAAM,EAItD,SAAU,EAJsD,KAAM,EAapE,EAAG,EAAE,qCAAwB,EAC7B,EAAG,EAAE,0PAAyE,ECZpF,SAAU,EACR,MAAO,EAAE,WAAY,EACrB,UAAW,EAAE,UAAW,EACxB,SAAU,EAAE,KAAM,EAClB,UAAW,EAAE,KAAM,EACnB,UAAW,EAAE,AAAC,EACd,cAAe,EAAE,MAAO,EAG1B,IAAK,EACH,MAAO,EAAE,WAAY,EACrB,cAAe,EAAE,MAAO,EAIxB,KAAG,EACD,MAAO,EAAE,WAAY,EACvB,sCAAiB,EAGf,IAAK,EAAE,MAAY,EAEvB,KAAM,EACJ,cAAe,EAAE,GAAI,EACrB,UAAW,EAAE,EAAG,EAChB,UAAW,EAAE,KAAM,EAEjB,YAAG,EACD,IAAK,EAAE,IAAI,EACb,oDAAiB,EAGf,aAAc,EAAE,OAAQ,EAG9B,cAAe,EACb,MAAO,EAAE,EAAO,EAElB,gBAAiB,EACf,MAAO,EAAE,EAAO,EAElB,oBAAqB,EACnB,MAAO,EAAE,EAAO,EAElB,sBAAuB,EACrB,MAAO,EAAE,EAAO,EAElB,kBAAmB,EACjB,MAAO,EAAE,EAAO,EAElB,oBAAqB,EACnB,MAAO,EAAE,EAAO,EAElB,oBAAqB,EACnB,MAAO,EAAE,EAAO,EAElB,sBAAuB,EACrB,MAAO,EAAE,EAAO,EAElB,qBAAsB,EACpB,MAAO,EAAE,EAAO,EAElB,uBAAwB,EACtB,MAAO,EAAE,EAAO,ECnElB,YAAa,EACX,OAAQ,EAAE,IAAK,EACf,KAAM,EAAE,AAAC,EACT,GAAI,EAAE,AAAC,EACP,IAAK,EC6E+B,IAAK,ED5EzC,IAAK,EEoC+B,MAAyB,EFnC7D,SAAU,EAAE,MAAkC,EAC9C,SAAU,EAAE,iBAAiC,EAC7C,UAAW,EE+CyB,sDAAM,EF9C1C,MAAO,EC+E6B,EAAG,ED9EvC,cAAC,EACC,IAAK,EE+B6B,MAAK,EF9BvC,cAAe,EAAE,GAAI,EACvB,6BAAgB,EACd,MAAO,EAAE,GAAI,EACf,iCAAoB,EAClB,MAAO,EAAE,GAAqB,EAC9B,eAAgB,EAAE,MAAkC,EACpD,MAAO,EAAE,IAAK,EACd,SAAU,EAAE,IAAK,EACjB,QAAS,EAAE,EAAG,EACd,KAAM,EAAE,MAAO,EACf,IAAK,EEX6B,MAAM,EL4F1C,IAAK,EAAE,AAAC,EACR,iFAAS,EAEP,MAAO,EAAE,IAAK,EACd,MAAO,EAAE,CAAE,EACb,uCAAO,EACL,IAAK,EAAE,GAAI,EGrFX,qCAAG,EACD,IAAK,EEgB2B,MAAyB,EFf3D,0CAAQ,EACN,IAAK,EAAE,GAAI,EACb,4CAAU,EACR,IAAK,EAAE,GAAI,EACb,iDAAiB,EACf,eAAgB,ECQgB,MAAI,EDPpC,IAAK,EEI2B,GAAM,EFHxC,wDAAwB,EACtB,eAAgB,EEmBgB,MAAO,EFlBvC,IAAK,ECzB2B,GAAI,ED0BxC,yCAA8B,EAC5B,MAAO,EAAE,IAAK,EAChB,gCAAmB,EACjB,QAAS,EAAE,EAAG,EACd,MAAO,EAAE,GAAqB,EAC9B,IAAK,EEP6B,GAAY,EFQ9C,MAAO,EAAE,GAAI,EACb,mCAAE,EACA,MAAO,EAAE,IAAK,EACd,KAAM,EAAE,EAAG,EACX,KAAM,EAAE,AAAC,EACT,KAAM,EAAE,KAAM,EACd,MAAO,EAAE,AAAC,EACV,SAAU,EAAE,gBAA6C,EAC3D,mCAAE,EACA,MAAO,EAAE,WAAY,EACrB,KAAM,EAAE,AAAC,EACT,qCAAC,EACC,MAAO,EAAE,WAAY,EACrB,MAAO,EAAE,EAAqB,EAC9B,IAAK,EEfyB,MAAyB,EFgB7D,sBAAW,EACT,IAAK,EAAE,GAAI,EACX,KAAM,EAAE,GAAI,EACZ,IAAK,EAAE,GAAI,EACX,GAAI,EAAE,GAAI,EACV,KAAM,EAAE,GAAI,EACZ,QAAS,ECkByB,IAAK,EDjBvC,iCAAU,EACR,IAAK,EAAE,GAAI,EACb,+BAAQ,EACN,IAAK,EAAE,GAAI,EACb,oDAA+B,EAC7B,SAAU,EAAE,IAAK,EACjB,6DAAQ,EACN,IAAK,EAAE,GAAI,EACb,+DAAU,EACR,IAAK,EAAE,GAAI,EACf,2CAAoB,EAClB,IAAK,EAAE,GAAI,EACX,KAAM,EAAE,GAAI,EACZ,UAAW,EAAE,GAAI,EACjB,MAAO,EAAE,IAAuB,EAChC,MAAO,EAAE,IAAK,EACd,SAAU,EAAE,KAAM,EGhDpB,mCAAsB,EHmDxB,YAAa,EACX,IAAK,EAAE,EAAG,EACV,MAAO,EAAE,GAAI,EACb,kBAAO,EACL,MAAO,EAAE,IAAK,EAClB,EAAG,EACD,IAAK,EAAE,GAAI,EACX,KAAM,EAAE,GAAI", +"sources": ["../../../bower_components/wyrm/sass/wyrm_core/_mixin.sass","../../../bower_components/bourbon/dist/css3/_font-face.scss","../../../sass/_theme_badge_fa.sass","../../../sass/_theme_badge.sass","../../../bower_components/wyrm/sass/wyrm_core/_wy_variables.sass","../../../sass/_theme_variables.sass","../../../bower_components/neat/app/assets/stylesheets/grid/_media.scss"], +"names": [], +"file": "badge_only.css" +} diff --git a/personal/api-docs/_static/css/other.css b/personal/api-docs/_static/css/other.css new file mode 100644 index 0000000..c9600b7 --- /dev/null +++ b/personal/api-docs/_static/css/other.css @@ -0,0 +1,3 @@ +.wy-nav-content { + max-width: 2000px !important; +} diff --git a/personal/api-docs/_static/css/theme.css b/personal/api-docs/_static/css/theme.css new file mode 100644 index 0000000..b4da021 --- /dev/null +++ b/personal/api-docs/_static/css/theme.css @@ -0,0 +1,5 @@ +*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}[hidden]{display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:hover,a:active{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;color:#000;text-decoration:none}mark{background:#ff0;color:#000;font-style:italic;font-weight:bold}pre,code,.rst-content tt,.rst-content code,kbd,samp{font-family:monospace,serif;_font-family:"courier new",monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:before,q:after{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}ul,ol,dl{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:0;margin:0;padding:0}label{cursor:pointer}legend{border:0;*margin-left:-7px;padding:0;white-space:normal}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top;resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:0.2em 0;background:#ccc;color:#000;padding:0.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none !important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{html,body,section{background:none !important}*{box-shadow:none !important;text-shadow:none !important;filter:none !important;-ms-filter:none !important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,.rst-content .toctree-wrapper p.caption,h3{orphans:3;widows:3}h2,.rst-content .toctree-wrapper p.caption,h3{page-break-after:avoid}}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.btn,input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"],select,textarea,.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a,.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a,.wy-nav-top a{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.2.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff?v=4.2.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.2.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:0.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:0.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.wy-menu-vertical li span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.rst-content .pull-left.admonition-title,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content dl dt .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.rst-content code.download span.pull-left:first-child,.pull-left.icon{margin-right:.3em}.fa.pull-right,.wy-menu-vertical li span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.rst-content .pull-right.admonition-title,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content dl dt .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.rst-content code.download span.pull-right:first-child,.pull-right.icon{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.rst-content .admonition-title:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.wy-dropdown .caret:before,.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context{font-family:inherit}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before{font-family:"FontAwesome";display:inline-block;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa,a .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,a .rst-content .admonition-title,.rst-content a .admonition-title,a .rst-content h1 .headerlink,.rst-content h1 a .headerlink,a .rst-content h2 .headerlink,.rst-content h2 a .headerlink,a .rst-content h3 .headerlink,.rst-content h3 a .headerlink,a .rst-content h4 .headerlink,.rst-content h4 a .headerlink,a .rst-content h5 .headerlink,.rst-content h5 a .headerlink,a .rst-content h6 .headerlink,.rst-content h6 a .headerlink,a .rst-content dl dt .headerlink,.rst-content dl dt a .headerlink,a .rst-content p.caption .headerlink,.rst-content p.caption a .headerlink,a .rst-content tt.download span:first-child,.rst-content tt.download a span:first-child,a .rst-content code.download span:first-child,.rst-content code.download a span:first-child,a .icon{display:inline-block;text-decoration:inherit}.btn .fa,.btn .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .btn span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.btn .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.btn .rst-content .admonition-title,.rst-content .btn .admonition-title,.btn .rst-content h1 .headerlink,.rst-content h1 .btn .headerlink,.btn .rst-content h2 .headerlink,.rst-content h2 .btn .headerlink,.btn .rst-content h3 .headerlink,.rst-content h3 .btn .headerlink,.btn .rst-content h4 .headerlink,.rst-content h4 .btn .headerlink,.btn .rst-content h5 .headerlink,.rst-content h5 .btn .headerlink,.btn .rst-content h6 .headerlink,.rst-content h6 .btn .headerlink,.btn .rst-content dl dt .headerlink,.rst-content dl dt .btn .headerlink,.btn .rst-content p.caption .headerlink,.rst-content p.caption .btn .headerlink,.btn .rst-content tt.download span:first-child,.rst-content tt.download .btn span:first-child,.btn .rst-content code.download span:first-child,.rst-content code.download .btn span:first-child,.btn .icon,.nav .fa,.nav .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand,.nav .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.nav .rst-content .admonition-title,.rst-content .nav .admonition-title,.nav .rst-content h1 .headerlink,.rst-content h1 .nav .headerlink,.nav .rst-content h2 .headerlink,.rst-content h2 .nav .headerlink,.nav .rst-content h3 .headerlink,.rst-content h3 .nav .headerlink,.nav .rst-content h4 .headerlink,.rst-content h4 .nav .headerlink,.nav .rst-content h5 .headerlink,.rst-content h5 .nav .headerlink,.nav .rst-content h6 .headerlink,.rst-content h6 .nav .headerlink,.nav .rst-content dl dt .headerlink,.rst-content dl dt .nav .headerlink,.nav .rst-content p.caption .headerlink,.rst-content p.caption .nav .headerlink,.nav .rst-content tt.download span:first-child,.rst-content tt.download .nav span:first-child,.nav .rst-content code.download span:first-child,.rst-content code.download .nav span:first-child,.nav .icon{display:inline}.btn .fa.fa-large,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.btn .rst-content .fa-large.admonition-title,.rst-content .btn .fa-large.admonition-title,.btn .rst-content h1 .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.btn .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .btn .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .btn span.fa-large:first-child,.btn .rst-content code.download span.fa-large:first-child,.rst-content code.download .btn span.fa-large:first-child,.btn .fa-large.icon,.nav .fa.fa-large,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand,.nav .rst-content .fa-large.admonition-title,.rst-content .nav .fa-large.admonition-title,.nav .rst-content h1 .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.nav .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.nav .rst-content code.download span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.nav .fa-large.icon{line-height:0.9em}.btn .fa.fa-spin,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.btn .rst-content .fa-spin.admonition-title,.rst-content .btn .fa-spin.admonition-title,.btn .rst-content h1 .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.btn .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .btn .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .btn span.fa-spin:first-child,.btn .rst-content code.download span.fa-spin:first-child,.rst-content code.download .btn span.fa-spin:first-child,.btn .fa-spin.icon,.nav .fa.fa-spin,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand,.nav .rst-content .fa-spin.admonition-title,.rst-content .nav .fa-spin.admonition-title,.nav .rst-content h1 .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.nav .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.nav .rst-content code.download span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.nav .fa-spin.icon{display:inline-block}.btn.fa:before,.wy-menu-vertical li span.btn.toctree-expand:before,.rst-content .btn.admonition-title:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content dl dt .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.rst-content code.download span.btn:first-child:before,.btn.icon:before{opacity:0.5;-webkit-transition:opacity 0.05s ease-in;-moz-transition:opacity 0.05s ease-in;transition:opacity 0.05s ease-in}.btn.fa:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.rst-content code.download span.btn:first-child:hover:before,.btn.icon:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before,.btn-mini .rst-content .admonition-title:before,.rst-content .btn-mini .admonition-title:before,.btn-mini .rst-content h1 .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.btn-mini .rst-content dl dt .headerlink:before,.rst-content dl dt .btn-mini .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.rst-content tt.download .btn-mini span:first-child:before,.btn-mini .rst-content code.download span:first-child:before,.rst-content code.download .btn-mini span:first-child:before,.btn-mini .icon:before{font-size:14px;vertical-align:-15%}.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo{padding:12px;line-height:24px;margin-bottom:24px;background:#fbebe9}.wy-alert-title,.rst-content .admonition-title{color:#fff;font-weight:bold;display:block;color:#fff;background:#e47467;margin:-12px;padding:6px 12px;margin-bottom:12px}.wy-alert.wy-alert-danger,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.admonition-todo{background:#fdf3f2}.wy-alert.wy-alert-danger .wy-alert-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .danger .wy-alert-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .danger .admonition-title,.rst-content .error .admonition-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title{background:#f29f97}.wy-alert.wy-alert-warning,.rst-content .wy-alert-warning.note,.rst-content .attention,.rst-content .caution,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.tip,.rst-content .warning,.rst-content .wy-alert-warning.seealso,.rst-content .admonition-todo{background:#ffedcc}.wy-alert.wy-alert-warning .wy-alert-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .attention .wy-alert-title,.rst-content .caution .wy-alert-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .admonition-todo .wy-alert-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .attention .admonition-title,.rst-content .caution .admonition-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .warning .admonition-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .admonition-todo .admonition-title{background:#f0b37e}.wy-alert.wy-alert-info,.rst-content .note,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.rst-content .seealso,.rst-content .wy-alert-info.admonition-todo{background:#fbebe9}.wy-alert.wy-alert-info .wy-alert-title,.rst-content .note .wy-alert-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.rst-content .note .admonition-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .seealso .admonition-title,.rst-content .wy-alert-info.admonition-todo .admonition-title{background:#e47467}.wy-alert.wy-alert-success,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.warning,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.admonition-todo{background:#dbfaf4}.wy-alert.wy-alert-success .wy-alert-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .hint .wy-alert-title,.rst-content .important .wy-alert-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .hint .admonition-title,.rst-content .important .admonition-title,.rst-content .tip .admonition-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.admonition-todo .admonition-title{background:#1abc9c}.wy-alert.wy-alert-neutral,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.admonition-todo{background:#f3f6f6}.wy-alert.wy-alert-neutral .wy-alert-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .admonition-title{color:#404040;background:#e1e4e5}.wy-alert.wy-alert-neutral a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.admonition-todo a{color:#d73726}.wy-alert p:last-child,.rst-content .note p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.rst-content .seealso p:last-child,.rst-content .admonition-todo p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0px;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,0.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all 0.3s ease-in;-moz-transition:all 0.3s ease-in;transition:all 0.3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27AE60}.wy-tray-container li.wy-tray-item-info{background:#d73726}.wy-tray-container li.wy-tray-item-warning{background:#E67E22}.wy-tray-container li.wy-tray-item-danger{background:#E74C3C}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width: 768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px 12px;color:#fff;border:1px solid rgba(0,0,0,0.1);background-color:#27AE60;text-decoration:none;font-weight:normal;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:0px 1px 2px -1px rgba(255,255,255,0.5) inset,0px -2px 0px 0px rgba(0,0,0,0.1) inset;outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all 0.1s linear;-moz-transition:all 0.1s linear;transition:all 0.1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:0px -1px 0px 0px rgba(0,0,0,0.05) inset,0px 2px 0px 0px rgba(0,0,0,0.1) inset;padding:8px 12px 6px 12px}.btn:visited{color:#fff}.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:0.4;cursor:not-allowed;box-shadow:none}.btn-disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:0.4;cursor:not-allowed;box-shadow:none}.btn-disabled:hover,.btn-disabled:focus,.btn-disabled:active{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:0.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#d73726 !important}.btn-info:hover{background-color:#2e8ece !important}.btn-neutral{background-color:#f3f6f6 !important;color:#404040 !important}.btn-neutral:hover{background-color:#e5ebeb !important;color:#404040}.btn-neutral:visited{color:#404040 !important}.btn-success{background-color:#27AE60 !important}.btn-success:hover{background-color:#295 !important}.btn-danger{background-color:#E74C3C !important}.btn-danger:hover{background-color:#ea6153 !important}.btn-warning{background-color:#E67E22 !important}.btn-warning:hover{background-color:#e98b39 !important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f !important}.btn-link{background-color:transparent !important;color:#d73726;box-shadow:none;border-color:transparent !important}.btn-link:hover{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:active{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:visited{color:#9B59B6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:before,.wy-btn-group:after{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:solid 1px #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,0.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#d73726;color:#fff}.wy-dropdown-menu>dd.divider{border-top:solid 1px #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type="search"]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#d73726;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned input,.wy-form-aligned textarea,.wy-form-aligned select,.wy-form-aligned .wy-help-inline,.wy-form-aligned label{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{border:0;margin:0;padding:0}legend{display:block;width:100%;border:0;padding:0;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label{display:block;margin:0 0 0.3125em 0;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;*zoom:1;max-width:68em;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#E74C3C}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full input[type="text"],.wy-control-group .wy-form-full input[type="password"],.wy-control-group .wy-form-full input[type="email"],.wy-control-group .wy-form-full input[type="url"],.wy-control-group .wy-form-full input[type="date"],.wy-control-group .wy-form-full input[type="month"],.wy-control-group .wy-form-full input[type="time"],.wy-control-group .wy-form-full input[type="datetime"],.wy-control-group .wy-form-full input[type="datetime-local"],.wy-control-group .wy-form-full input[type="week"],.wy-control-group .wy-form-full input[type="number"],.wy-control-group .wy-form-full input[type="search"],.wy-control-group .wy-form-full input[type="tel"],.wy-control-group .wy-form-full input[type="color"],.wy-control-group .wy-form-halves input[type="text"],.wy-control-group .wy-form-halves input[type="password"],.wy-control-group .wy-form-halves input[type="email"],.wy-control-group .wy-form-halves input[type="url"],.wy-control-group .wy-form-halves input[type="date"],.wy-control-group .wy-form-halves input[type="month"],.wy-control-group .wy-form-halves input[type="time"],.wy-control-group .wy-form-halves input[type="datetime"],.wy-control-group .wy-form-halves input[type="datetime-local"],.wy-control-group .wy-form-halves input[type="week"],.wy-control-group .wy-form-halves input[type="number"],.wy-control-group .wy-form-halves input[type="search"],.wy-control-group .wy-form-halves input[type="tel"],.wy-control-group .wy-form-halves input[type="color"],.wy-control-group .wy-form-thirds input[type="text"],.wy-control-group .wy-form-thirds input[type="password"],.wy-control-group .wy-form-thirds input[type="email"],.wy-control-group .wy-form-thirds input[type="url"],.wy-control-group .wy-form-thirds input[type="date"],.wy-control-group .wy-form-thirds input[type="month"],.wy-control-group .wy-form-thirds input[type="time"],.wy-control-group .wy-form-thirds input[type="datetime"],.wy-control-group .wy-form-thirds input[type="datetime-local"],.wy-control-group .wy-form-thirds input[type="week"],.wy-control-group .wy-form-thirds input[type="number"],.wy-control-group .wy-form-thirds input[type="search"],.wy-control-group .wy-form-thirds input[type="tel"],.wy-control-group .wy-form-thirds input[type="color"]{width:100%}.wy-control-group .wy-form-full{float:left;display:block;margin-right:2.35765%;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child{margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n+1){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child{margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control{margin:6px 0 0 0;font-size:90%}.wy-control-no-input{display:inline-block;margin:6px 0 0 0;font-size:90%}.wy-control-group.fluid-input input[type="text"],.wy-control-group.fluid-input input[type="password"],.wy-control-group.fluid-input input[type="email"],.wy-control-group.fluid-input input[type="url"],.wy-control-group.fluid-input input[type="date"],.wy-control-group.fluid-input input[type="month"],.wy-control-group.fluid-input input[type="time"],.wy-control-group.fluid-input input[type="datetime"],.wy-control-group.fluid-input input[type="datetime-local"],.wy-control-group.fluid-input input[type="week"],.wy-control-group.fluid-input input[type="number"],.wy-control-group.fluid-input input[type="search"],.wy-control-group.fluid-input input[type="tel"],.wy-control-group.fluid-input input[type="color"]{width:100%}.wy-form-message-inline{display:inline-block;padding-left:0.3em;color:#666;vertical-align:middle;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:0.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;*overflow:visible}input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border 0.3s linear;-moz-transition:border 0.3s linear;transition:border 0.3s linear}input[type="datetime-local"]{padding:0.34375em 0.625em}input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0;margin-right:0.3125em;*height:13px;*width:13px}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}input[type="text"]:focus,input[type="password"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus{outline:0;outline:thin dotted \9;border-color:#333}input.no-focus:focus{border-color:#ccc !important}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:1px auto #129FEA}input[type="text"][disabled],input[type="password"][disabled],input[type="email"][disabled],input[type="url"][disabled],input[type="date"][disabled],input[type="month"][disabled],input[type="time"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="week"][disabled],input[type="number"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="color"][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#E74C3C;border:1px solid #E74C3C}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#E74C3C}input[type="file"]:focus:invalid:focus,input[type="radio"]:focus:invalid:focus,input[type="checkbox"]:focus:invalid:focus{outline-color:#E74C3C}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif}select,textarea{padding:0.5em 0.625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border 0.3s linear;-moz-transition:border 0.3s linear;transition:border 0.3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type="radio"][disabled],input[type="checkbox"][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:solid 1px #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{width:36px;height:12px;margin:12px 0;position:relative;border-radius:4px;background:#ccc;cursor:pointer;-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.wy-switch:before{position:absolute;content:"";display:block;width:18px;height:18px;border-radius:4px;background:#999;left:-3px;top:-3px;-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.wy-switch:after{content:"false";position:absolute;left:48px;display:block;font-size:12px;color:#ccc}.wy-switch.active{background:#1e8449}.wy-switch.active:before{left:24px;background:#27AE60}.wy-switch.active:after{content:"true"}.wy-switch.disabled,.wy-switch.active.disabled{cursor:not-allowed}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#E74C3C}.wy-control-group.wy-control-group-error input[type="text"],.wy-control-group.wy-control-group-error input[type="password"],.wy-control-group.wy-control-group-error input[type="email"],.wy-control-group.wy-control-group-error input[type="url"],.wy-control-group.wy-control-group-error input[type="date"],.wy-control-group.wy-control-group-error input[type="month"],.wy-control-group.wy-control-group-error input[type="time"],.wy-control-group.wy-control-group-error input[type="datetime"],.wy-control-group.wy-control-group-error input[type="datetime-local"],.wy-control-group.wy-control-group-error input[type="week"],.wy-control-group.wy-control-group-error input[type="number"],.wy-control-group.wy-control-group-error input[type="search"],.wy-control-group.wy-control-group-error input[type="tel"],.wy-control-group.wy-control-group-error input[type="color"]{border:solid 1px #E74C3C}.wy-control-group.wy-control-group-error textarea{border:solid 1px #E74C3C}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:0.5em 0.625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27AE60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#E74C3C}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#E67E22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#d73726}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width: 480px){.wy-form button[type="submit"]{margin:0.7em 0 0}.wy-form input[type="text"],.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:0.3em;display:block}.wy-form label{margin-bottom:0.3em;display:block}.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:0.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0 0}.wy-form .wy-help-inline,.wy-form-message-inline,.wy-form-message{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width: 768px){.tablet-hide{display:none}}@media screen and (max-width: 480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.wy-table,.rst-content table.docutils,.rst-content table.field-list{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.wy-table caption,.rst-content table.docutils caption,.rst-content table.field-list caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td,.wy-table th,.rst-content table.docutils th,.rst-content table.field-list th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.wy-table td:first-child,.rst-content table.docutils td:first-child,.rst-content table.field-list td:first-child,.wy-table th:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list th:first-child{border-left-width:0}.wy-table thead,.rst-content table.docutils thead,.rst-content table.field-list thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.wy-table thead th,.rst-content table.docutils thead th,.rst-content table.field-list thead th{font-weight:bold;border-bottom:solid 2px #e1e4e5}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td{background-color:transparent;vertical-align:middle}.wy-table td p,.rst-content table.docutils td p,.rst-content table.field-list td p{line-height:18px}.wy-table td p:last-child,.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child{margin-bottom:0}.wy-table .wy-table-cell-min,.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min{width:1%;padding-right:0}.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:gray;font-size:90%}.wy-table-tertiary{color:gray;font-size:80%}.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td,.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td{background-color:#f3f6f6}.wy-table-backed{background-color:#f3f6f6}.wy-table-bordered-all,.rst-content table.docutils{border:1px solid #e1e4e5}.wy-table-bordered-all td,.rst-content table.docutils td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.wy-table-bordered-all tbody>tr:last-child td,.rst-content table.docutils tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0 !important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#d73726;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9B59B6}html{height:100%;overflow-x:hidden}body{font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;font-weight:normal;color:#404040;min-height:100%;overflow-x:hidden;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#E67E22 !important}a.wy-text-warning:hover{color:#eb9950 !important}.wy-text-info{color:#d73726 !important}a.wy-text-info:hover{color:#409ad5 !important}.wy-text-success{color:#27AE60 !important}a.wy-text-success:hover{color:#36d278 !important}.wy-text-danger{color:#E74C3C !important}a.wy-text-danger:hover{color:#ed7669 !important}.wy-text-neutral{color:#404040 !important}a.wy-text-neutral:hover{color:#595959 !important}h1,h2,.rst-content .toctree-wrapper p.caption,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif}p{line-height:24px;margin:0;font-size:16px;margin-bottom:24px}h1{font-size:175%}h2,.rst-content .toctree-wrapper p.caption{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}code,.rst-content tt,.rst-content code{white-space:nowrap;max-width:100%;background:#fff;border:solid 1px #e1e4e5;font-size:75%;padding:0 5px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;color:#E74C3C;overflow-x:auto}code.code-large,.rst-content tt.code-large{font-size:90%}.wy-plain-list-disc,.rst-content .section ul,.rst-content .toctree-wrapper ul,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.wy-plain-list-disc li,.rst-content .section ul li,.rst-content .toctree-wrapper ul li,article ul li{list-style:disc;margin-left:24px}.wy-plain-list-disc li p:last-child,.rst-content .section ul li p:last-child,.rst-content .toctree-wrapper ul li p:last-child,article ul li p:last-child{margin-bottom:0}.wy-plain-list-disc li ul,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li ul,article ul li ul{margin-bottom:0}.wy-plain-list-disc li li,.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,article ul li li{list-style:circle}.wy-plain-list-disc li li li,.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,article ul li li li{list-style:square}.wy-plain-list-disc li ol li,.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,article ul li ol li{list-style:decimal}.wy-plain-list-decimal,.rst-content .section ol,.rst-content ol.arabic,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.wy-plain-list-decimal li,.rst-content .section ol li,.rst-content ol.arabic li,article ol li{list-style:decimal;margin-left:24px}.wy-plain-list-decimal li p:last-child,.rst-content .section ol li p:last-child,.rst-content ol.arabic li p:last-child,article ol li p:last-child{margin-bottom:0}.wy-plain-list-decimal li ul,.rst-content .section ol li ul,.rst-content ol.arabic li ul,article ol li ul{margin-bottom:0}.wy-plain-list-decimal li ul li,.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,article ol li ul li{list-style:disc}.codeblock-example{border:1px solid #e1e4e5;border-bottom:none;padding:24px;padding-top:48px;font-weight:500;background:#fff;position:relative}.codeblock-example:after{content:"Example";position:absolute;top:0px;left:0px;background:#9B59B6;color:#fff;padding:6px 12px}.codeblock-example.prettyprint-example-only{border:1px solid #e1e4e5;margin-bottom:24px}.codeblock,pre.literal-block,.rst-content .literal-block,.rst-content pre.literal-block,div[class^='highlight']{border:1px solid #e1e4e5;padding:0px;overflow-x:auto;background:#fff;margin:1px 0 24px 0}.codeblock div[class^='highlight'],pre.literal-block div[class^='highlight'],.rst-content .literal-block div[class^='highlight'],div[class^='highlight'] div[class^='highlight']{border:none;background:none;margin:0}div[class^='highlight'] td.code{width:100%}.linenodiv pre{border-right:solid 1px #e6e9ea;margin:0;padding:12px 12px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;font-size:12px;line-height:1.5;color:#d9d9d9}div[class^='highlight'] pre{white-space:pre;margin:0;padding:12px 12px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;font-size:12px;line-height:1.5;display:block;overflow:auto;color:#404040}@media print{.codeblock,pre.literal-block,.rst-content .literal-block,.rst-content pre.literal-block,div[class^='highlight'],div[class^='highlight'] pre{white-space:pre-wrap}}.hll{background-color:#ffc;margin:0 -12px;padding:0 12px;display:block}.c{color:#998;font-style:italic}.err{color:#a61717;background-color:#e3d2d2}.k{font-weight:bold}.o{font-weight:bold}.cm{color:#998;font-style:italic}.cp{color:#999;font-weight:bold}.c1{color:#998;font-style:italic}.cs{color:#999;font-weight:bold;font-style:italic}.gd{color:#000;background-color:#fdd}.gd .x{color:#000;background-color:#faa}.ge{font-style:italic}.gr{color:#a00}.gh{color:#999}.gi{color:#000;background-color:#dfd}.gi .x{color:#000;background-color:#afa}.go{color:#888}.gp{color:#555}.gs{font-weight:bold}.gu{color:purple;font-weight:bold}.gt{color:#a00}.kc{font-weight:bold}.kd{font-weight:bold}.kn{font-weight:bold}.kp{font-weight:bold}.kr{font-weight:bold}.kt{color:#458;font-weight:bold}.m{color:#099}.s{color:#d14}.n{color:#333}.na{color:teal}.nb{color:#0086b3}.nc{color:#458;font-weight:bold}.no{color:teal}.ni{color:purple}.ne{color:#900;font-weight:bold}.nf{color:#900;font-weight:bold}.nn{color:#555}.nt{color:navy}.nv{color:teal}.ow{font-weight:bold}.w{color:#bbb}.mf{color:#099}.mh{color:#099}.mi{color:#099}.mo{color:#099}.sb{color:#d14}.sc{color:#d14}.sd{color:#d14}.s2{color:#d14}.se{color:#d14}.sh{color:#d14}.si{color:#d14}.sx{color:#d14}.sr{color:#009926}.s1{color:#d14}.ss{color:#990073}.bp{color:#999}.vc{color:teal}.vg{color:teal}.vi{color:teal}.il{color:#099}.gc{color:#999;background-color:#EAF2F5}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.wy-breadcrumbs li code,.wy-breadcrumbs li .rst-content tt,.rst-content .wy-breadcrumbs li tt{padding:5px;border:none;background:none}.wy-breadcrumbs li code.literal,.wy-breadcrumbs li .rst-content tt.literal,.rst-content .wy-breadcrumbs li tt.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width: 480px){.wy-breadcrumbs-extra{display:none}.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:before,.wy-menu-horiz:after{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz ul,.wy-menu-horiz li{display:inline-block}.wy-menu-horiz li:hover{background:rgba(255,255,255,0.1)}.wy-menu-horiz li.divide-left{border-left:solid 1px #404040}.wy-menu-horiz li.divide-right{border-right:solid 1px #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{height:32px;display:inline-block;line-height:32px;padding:0 1.618em;margin-bottom:0;display:block;font-weight:bold;text-transform:uppercase;font-size:80%;color:#555;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:solid 1px #404040}.wy-menu-vertical li.divide-bottom{border-bottom:solid 1px #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:gray;border-right:solid 1px #c9c9c9;padding:0.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.wy-menu-vertical li code,.wy-menu-vertical li .rst-content tt,.rst-content .wy-menu-vertical li tt{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:0.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a{color:#404040;padding:0.4045em 1.618em;font-weight:bold;position:relative;background:#fcfcfc;border:none;border-bottom:solid 1px #c9c9c9;border-top:solid 1px #c9c9c9;padding-left:1.618em -4px}.wy-menu-vertical li.on a:hover,.wy-menu-vertical li.current>a:hover{background:#fcfcfc}.wy-menu-vertical li.on a:hover span.toctree-expand,.wy-menu-vertical li.current>a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand{display:block;font-size:0.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current li.toctree-l2>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>ul{display:none}.wy-menu-vertical li.toctree-l1.current li.toctree-l2.current>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3.current>ul{display:block}.wy-menu-vertical li.toctree-l2.current>a{background:#c9c9c9;padding:0.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{display:block;background:#c9c9c9;padding:0.4045em 4.045em}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3{font-size:0.9em}.wy-menu-vertical li.toctree-l3.current>a{background:#bdbdbd;padding:0.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{display:block;background:#bdbdbd;padding:0.4045em 5.663em;border-top:none;border-bottom:none}.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.toctree-l4{font-size:0.9em}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical .local-toc li ul{display:block}.wy-menu-vertical li ul li a{margin-bottom:0;color:#b3b3b3;font-weight:normal}.wy-menu-vertical a{display:inline-block;line-height:18px;padding:0.4045em 1.618em;display:block;position:relative;font-size:90%;color:#b3b3b3}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#b3b3b3}.wy-menu-vertical a:active{background-color:#d73726;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:0.809em;margin-bottom:0.809em;z-index:200;background-color:#d73726;text-align:center;padding:0.809em;display:block;color:#fcfcfc;margin-bottom:0.809em}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto 0.809em auto;height:45px;width:45px;background-color:#d73726;padding:5px;border-radius:100%}.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a{color:#fcfcfc;font-size:100%;font-weight:bold;display:inline-block;padding:4px 6px;margin-bottom:0.809em}.wy-side-nav-search>a:hover,.wy-side-nav-search .wy-dropdown>a:hover{background:rgba(255,255,255,0.1)}.wy-side-nav-search>a img.logo,.wy-side-nav-search .wy-dropdown>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search>a.icon img.logo,.wy-side-nav-search .wy-dropdown>a.icon img.logo{margin-top:0.85em}.wy-side-nav-search>div.version{margin-top:-0.4045em;margin-bottom:0.809em;font-weight:normal;color:rgba(255,255,255,0.3)}.wy-nav .wy-menu-vertical header{color:#d73726}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#d73726;color:#fff}[data-menu-wrap]{-webkit-transition:all 0.2s ease-in;-moz-transition:all 0.2s ease-in;transition:all 0.2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:left repeat-y #fcfcfc;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxOERBMTRGRDBFMUUxMUUzODUwMkJCOThDMEVFNURFMCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxOERBMTRGRTBFMUUxMUUzODUwMkJCOThDMEVFNURFMCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjE4REExNEZCMEUxRTExRTM4NTAyQkI5OEMwRUU1REUwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjE4REExNEZDMEUxRTExRTM4NTAyQkI5OEMwRUU1REUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+EwrlwAAAAA5JREFUeNpiMDU0BAgwAAE2AJgB9BnaAAAAAElFTkSuQmCC);background-size:300px 1px}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#d73726;color:#fff;padding:0.4045em 0.809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:before,.wy-nav-top:after{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:bold}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#d73726;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,0.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:#999}footer p{margin-bottom:12px}footer span.commit code,footer span.commit .rst-content tt,.rst-content footer span.commit tt{padding:0px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;font-size:1em;background:none;border:none;color:#999}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:before,.rst-footer-buttons:after{display:table;content:""}.rst-footer-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:solid 1px #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:solid 1px #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:gray;font-size:90%}@media screen and (max-width: 768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-side-scroll{width:auto}.wy-side-nav-search{width:auto}.wy-menu.wy-menu-vertical{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width: 1400px){.wy-nav-content-wrap{background:rgba(0,0,0,0.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,footer,.wy-nav-side{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;border-top:solid 10px #343131;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#d73726;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .icon{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}img{width:100%;height:auto}}.rst-content img{max-width:100%;height:auto !important}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure.align-center{text-align:center}.rst-content .section>img,.rst-content .section>a>img{margin-bottom:24px}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content .note .last,.rst-content .attention .last,.rst-content .caution .last,.rst-content .danger .last,.rst-content .error .last,.rst-content .hint .last,.rst-content .important .last,.rst-content .tip .last,.rst-content .warning .last,.rst-content .seealso .last,.rst-content .admonition-todo .last{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,0.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent !important;border-color:rgba(0,0,0,0.1) !important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha li{list-style:upper-alpha}.rst-content .section ol p,.rst-content .section ul p{margin-bottom:12px}.rst-content .line-block{margin-left:24px}.rst-content .topic-title{font-weight:bold;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0px 0px 24px 24px}.rst-content .align-left{float:left;margin:0px 24px 24px 0px}.rst-content .align-center{margin:auto;display:block}.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content .toctree-wrapper p.caption .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink{display:none;visibility:hidden;font-size:14px}.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content .toctree-wrapper p.caption .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content p.caption .headerlink:after{visibility:visible;content:"";font-family:FontAwesome;display:inline-block}.rst-content h1:hover .headerlink,.rst-content h2:hover .headerlink,.rst-content .toctree-wrapper p.caption:hover .headerlink,.rst-content h3:hover .headerlink,.rst-content h4:hover .headerlink,.rst-content h5:hover .headerlink,.rst-content h6:hover .headerlink,.rst-content dl dt:hover .headerlink,.rst-content p.caption:hover .headerlink{display:inline-block}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:solid 1px #e1e4e5}.rst-content .sidebar p,.rst-content .sidebar ul,.rst-content .sidebar dl{font-size:90%}.rst-content .sidebar .last{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif;font-weight:bold;background:#e1e4e5;padding:6px 12px;margin:-24px;margin-bottom:24px;font-size:100%}.rst-content .highlighted{background:#F1C40F;display:inline-block;font-weight:bold;padding:0 6px}.rst-content .footnote-reference,.rst-content .citation-reference{vertical-align:super;font-size:90%}.rst-content table.docutils.citation,.rst-content table.docutils.footnote{background:none;border:none;color:#999}.rst-content table.docutils.citation td,.rst-content table.docutils.citation tr,.rst-content table.docutils.footnote td,.rst-content table.docutils.footnote tr{border:none;background-color:transparent !important;white-space:normal}.rst-content table.docutils.citation td.label,.rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}.rst-content table.docutils.citation tt,.rst-content table.docutils.citation code,.rst-content table.docutils.footnote tt,.rst-content table.docutils.footnote code{color:#555}.rst-content table.field-list{border:none}.rst-content table.field-list td{border:none;padding-top:5px}.rst-content table.field-list td>strong{display:inline-block;margin-top:3px}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left;padding-left:0}.rst-content tt,.rst-content tt,.rst-content code{color:#000;padding:2px 5px}.rst-content tt big,.rst-content tt em,.rst-content tt big,.rst-content code big,.rst-content tt em,.rst-content code em{font-size:100% !important;line-height:normal}.rst-content tt.literal,.rst-content tt.literal,.rst-content code.literal{color:#E74C3C}.rst-content tt.xref,a .rst-content tt,.rst-content tt.xref,.rst-content code.xref,a .rst-content tt,a .rst-content code{font-weight:bold;color:#404040}.rst-content a tt,.rst-content a tt,.rst-content a code{color:#d73726}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:bold}.rst-content dl p,.rst-content dl table,.rst-content dl ul,.rst-content dl ol{margin-bottom:12px !important}.rst-content dl dd{margin:0 0 12px 24px}.rst-content dl:not(.docutils){margin-bottom:24px}.rst-content dl:not(.docutils) dt{display:inline-block;margin:6px 0;font-size:90%;line-height:normal;background:#fbebe9;color:#d73726;border-top:solid 3px #e47467;padding:6px;position:relative}.rst-content dl:not(.docutils) dt:before{color:#e47467}.rst-content dl:not(.docutils) dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dl dt{margin-bottom:6px;border:none;border-left:solid 3px #ccc;background:#f0f0f0;color:#555}.rst-content dl:not(.docutils) dl dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dt:first-child{margin-top:0}.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) code{font-weight:bold}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) code.descclassname{background-color:transparent;border:none;padding:0;font-size:100% !important}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname{font-weight:bold}.rst-content dl:not(.docutils) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:bold}.rst-content dl:not(.docutils) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-link,.rst-content .viewcode-back{display:inline-block;color:#27AE60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:bold}.rst-content tt.download,.rst-content code.download{background:inherit;padding:inherit;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{margin-right:4px}@media screen and (max-width: 480px){.rst-content .sidebar{width:100%}}span[id*='MathJax-Span']{color:#404040}.math{text-align:center}@font-face{font-family:"Inconsolata";font-style:normal;font-weight:400;src:local("Inconsolata"),local("Inconsolata-Regular"),url(../fonts/Inconsolata-Regular.ttf) format("truetype")}@font-face{font-family:"Inconsolata";font-style:normal;font-weight:700;src:local("Inconsolata Bold"),local("Inconsolata-Bold"),url(../fonts/Inconsolata-Bold.ttf) format("truetype")}@font-face{font-family:"Lato";font-style:normal;font-weight:400;src:local("Lato Regular"),local("Lato-Regular"),url(../fonts/Lato-Regular.ttf) format("truetype")}@font-face{font-family:"Lato";font-style:normal;font-weight:700;src:local("Lato Bold"),local("Lato-Bold"),url(../fonts/Lato-Bold.ttf) format("truetype")}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:400;src:local("Roboto Slab Regular"),local("RobotoSlab-Regular"),url(../fonts/RobotoSlab-Regular.ttf) format("truetype")}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:700;src:local("Roboto Slab Bold"),local("RobotoSlab-Bold"),url(../fonts/RobotoSlab-Bold.ttf) format("truetype")} +/*# sourceMappingURL=theme.css.map */ diff --git a/personal/api-docs/_static/css/theme.css.map b/personal/api-docs/_static/css/theme.css.map new file mode 100644 index 0000000..96cc9d2 --- /dev/null +++ b/personal/api-docs/_static/css/theme.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": "CACE,AAAE,ECQI,iBAAoB,EDPJ,SAAU,ECY1B,cAAiB,EDZD,SAAU,EC2B1B,SAAY,ED3BI,SAAU,EEFlC,uEAAiF,EAC/E,MAAO,EAAE,IAAK,EAEhB,iBAAoB,EAClB,MAAO,EAAE,WAAY,EACrB,OAAQ,EAAE,KAAM,EAChB,IAAK,EAAE,AAAC,EAEV,oBAAqB,EACnB,MAAO,EAAE,GAAI,EAEf,OAAQ,EACN,MAAO,EAAE,GAAI,EAEf,AAAC,EDLO,iBAAoB,ECMd,SAAU,EDDhB,cAAiB,ECCX,SAAU,EDchB,SAAY,ECdN,SAAU,EAExB,GAAI,EACF,QAAS,EAAE,GAAI,EACf,uBAAwB,EAAE,GAAI,EAC9B,mBAAoB,EAAE,GAAI,EAE5B,GAAI,EACF,KAAM,EAAE,AAAC,EAEX,eAAiB,EACf,MAAO,EAAE,AAAC,EAEZ,UAAW,EACT,YAAa,EAAE,SAAU,EAE3B,OAAS,EACP,UAAW,EAAE,GAAI,EAEnB,SAAU,EACR,KAAM,EAAE,AAAC,EAEX,EAAG,EACD,SAAU,EAAE,KAAM,EAGpB,EAAG,EACD,SAAU,EAAE,GAAI,EAChB,IAAK,EAAE,GAAI,EACX,cAAe,EAAE,GAAI,EAEvB,GAAI,EACF,SAAU,EAAE,GAAI,EAChB,IAAK,EAAE,GAAI,EACX,SAAU,EAAE,KAAM,EAClB,UAAW,EAAE,GAAI,EAEnB,kDAAoB,EAClB,UAAW,EAAE,cAAS,EACtB,WAAY,EAAE,sBAAa,EAC3B,QAAS,EAAE,EAAG,EAEhB,EAAG,EACD,UAAW,EAAE,EAAG,EAElB,AAAC,EACC,KAAM,EAAE,GAAI,EAEd,eAAiB,EACf,MAAO,EAAE,CAAE,EACX,MAAO,EAAE,GAAI,EAEf,IAAK,EACH,QAAS,EAAE,EAAG,EAEhB,MAAQ,EACN,QAAS,EAAE,EAAG,EACd,UAAW,EAAE,AAAC,EACd,OAAQ,EAAE,OAAQ,EAClB,aAAc,EAAE,OAAQ,EAE1B,EAAG,EACD,EAAG,EAAE,KAAM,EAEb,EAAG,EACD,KAAM,EAAE,MAAO,EAEjB,OAAU,EACR,KAAM,EAAE,AAAC,EACT,MAAO,EAAE,AAAC,EACV,SAAU,EAAE,GAAI,EAChB,eAAgB,EAAE,GAAI,EAExB,CAAE,EACA,SAAU,EAAE,GAAI,EAElB,CAAE,EACA,KAAM,EAAE,AAAC,EAEX,EAAG,EACD,KAAM,EAAE,AAAC,EACT,qBAAsB,EAAE,MAAO,EAC/B,aAAc,EAAE,KAAM,EACtB,QAAS,EAAE,GAAI,EAEjB,aAAc,EACZ,OAAQ,EAAE,KAAM,EAElB,KAAM,EACJ,KAAM,EAAE,AAAC,EAEX,GAAI,EACF,KAAM,EAAE,AAAC,EAEX,OAAQ,EACN,KAAM,EAAE,AAAC,EACT,KAAM,EAAE,AAAC,EACT,MAAO,EAAE,AAAC,EAEZ,IAAK,EACH,KAAM,EAAE,MAAO,EAEjB,KAAM,EACJ,KAAM,EAAE,AAAC,EACT,WAAY,EAAE,GAAI,EAClB,MAAO,EAAE,AAAC,EACV,UAAW,EAAE,KAAM,EAErB,2BAA+B,EAC7B,QAAS,EAAE,GAAI,EACf,KAAM,EAAE,AAAC,EACT,aAAc,EAAE,OAAQ,EACxB,cAAe,EAAE,KAAM,EAEzB,WAAa,EACX,UAAW,EAAE,KAAM,EAErB,mEAAuE,EACrE,KAAM,EAAE,MAAO,EACf,iBAAkB,EAAE,KAAM,EAC1B,QAAS,EAAE,MAAO,EAEpB,+BAAiC,EAC/B,KAAM,EAAE,MAAO,EAEjB,yCAA2C,EACzC,SAAU,EAAE,SAAU,EACtB,MAAO,EAAE,AAAC,EACV,KAAM,EAAE,GAAI,EACZ,MAAO,EAAE,GAAI,EAEf,mBAAoB,EAClB,iBAAkB,EAAE,QAAS,EAC7B,cAAe,EAAE,UAAW,EAC5B,iBAAkB,EAAE,UAAW,EAC/B,SAAU,EAAE,UAAW,EAEzB,iGAAmG,EACjG,iBAAkB,EAAE,GAAI,EAE1B,+CAAiD,EAC/C,KAAM,EAAE,AAAC,EACT,MAAO,EAAE,AAAC,EAEZ,OAAQ,EACN,OAAQ,EAAE,GAAI,EACd,aAAc,EAAE,EAAG,EACnB,KAAM,EAAE,OAAQ,EAElB,IAAK,EACH,cAAe,EAAE,OAAQ,EACzB,aAAc,EAAE,AAAC,EAEnB,CAAE,EACA,aAAc,EAAE,EAAG,EAErB,WAAY,EACV,KAAM,EAAE,MAAO,EACf,SAAU,EAAE,GAAI,EAChB,IAAK,EAAE,GAAK,EACZ,MAAO,EAAE,MAAO,EAElB,EAAG,EACD,MAAO,EAAE,IAAK,EACd,KAAM,EAAE,AAAC,EACT,UAAW,EAAE,KAAM,EACnB,OAAQ,EAAE,KAAM,EAChB,eAAgB,EAAE,UAAW,EAC7B,gBAAiB,EAAE,QAAS,EAC5B,SAAU,EAAE,GAAI,EAChB,QAAS,EAAE,EAAG,EACd,WAAY,EAAE,AAAC,EAEjB,KAAM,EACJ,MAAO,EAAE,GAAI,EAEf,MAAO,EACL,MAAO,EAAE,cAAe,EACxB,SAAU,EAAE,KAAM,EAEpB,cAAe,EACb,KAAM,EAAE,AAAC,EACT,GAAI,EAAE,YAAa,EACnB,KAAM,EAAE,EAAG,EACX,KAAM,EAAE,GAAI,EACZ,OAAQ,EAAE,KAAM,EAChB,MAAO,EAAE,AAAC,EACV,OAAQ,EAAE,OAAQ,EAClB,IAAK,EAAE,EAAG,EAEZ,+DAAiE,EAC/D,GAAI,EAAE,GAAI,EACV,KAAM,EAAE,GAAI,EACZ,KAAM,EAAE,AAAC,EACT,OAAQ,EAAE,MAAO,EACjB,OAAQ,EAAE,KAAM,EAChB,IAAK,EAAE,GAAI,EAEb,SAAU,EACR,SAAU,EAAE,KAAM,EAEpB,QAAS,EACP,OAAQ,EAAE,OAAQ,EAEpB,QAAU,EACR,QAAS,EAAE,GAAI,EAEjB,WAAY,EACV,gBAAmB,EACjB,SAAU,EAAE,cAAe,EAC7B,AAAC,EACC,SAAU,EAAE,cAAe,EAC3B,UAAW,EAAE,cAAe,EAC5B,KAAM,EAAE,cAAe,EACvB,SAAU,EAAE,cAAe,EAC7B,UAAY,EACV,cAAe,EAAE,QAAS,EAC5B,0DAA6D,EAC3D,MAAO,EAAE,CAAE,EACb,aAAe,EACb,gBAAiB,EAAE,IAAK,EAC1B,IAAK,EACH,MAAO,EAAE,iBAAkB,EAC7B,KAAO,EACL,gBAAiB,EAAE,IAAK,EAC1B,EAAG,EACD,QAAS,EAAE,cAAe,QAE1B,KAAM,EAAE,IAAK,EAEf,8CAAS,EACP,MAAO,EAAE,AAAC,EACV,KAAM,EAAE,AAAC,EACX,4CAAM,EACJ,eAAgB,EAAE,IAAK,GChM3B,ykDAAY,EACV,qBAAsB,EAAE,UAAW,EAqDrC,QAAS,EARP,IAAK,EAAE,AAAC,EACR,+BAAS,EAEP,MAAO,EAAE,IAAK,EACd,MAAO,EAAE,CAAE,EACb,cAAO,EACL,IAAK,EAAE,GAAI;;;GC1Gf,UAUC,CATC,WAAW,CAAE,aAAa,CAC1B,GAAG,CAAE,+CAAgE,CACrE,GAAG,CAAE,sSAAmG,CAKxG,WAAW,CAAE,MAAM,CACnB,UAAU,CAAE,MAAM,CCTpB,kfAAmB,CACjB,OAAO,CAAE,YAAY,CACrB,IAAI,CAAE,uCAAuC,CAC7C,SAAS,CAAE,OAAO,CAClB,cAAc,CAAE,IAAI,CACpB,sBAAsB,CAAE,WAAW,CACnC,uBAAuB,CAAE,SAAS,CCLpC,MAAsB,CACpB,SAAS,CAAE,SAAS,CACpB,WAAW,CAAE,MAAS,CACtB,cAAc,CAAE,IAAI,CAEtB,MAAsB,CAAE,SAAS,CAAE,GAAG,CACtC,MAAsB,CAAE,SAAS,CAAE,GAAG,CACtC,MAAsB,CAAE,SAAS,CAAE,GAAG,CACtC,MAAsB,CAAE,SAAS,CAAE,GAAG,CCVtC,MAAsB,CACpB,KAAK,CAAE,SAAW,CAClB,UAAU,CAAE,MAAM,CCDpB,MAAsB,CACpB,YAAY,CAAE,CAAC,CACf,WAAW,CCIU,SAAS,CDH9B,eAAe,CAAE,IAAI,CACrB,SAAK,CAAE,QAAQ,CAAE,QAAQ,CAE3B,MAAsB,CACpB,QAAQ,CAAE,QAAQ,CAClB,IAAI,CAAE,UAAa,CACnB,KAAK,CCHgB,SAAS,CDI9B,GAAG,CAAE,SAAU,CACf,UAAU,CAAE,MAAM,CAClB,YAAuB,CACrB,IAAI,CAAE,UAA0B,CEbpC,UAA0B,CACxB,OAAO,CAAE,gBAAgB,CACzB,MAAM,CAAE,iBAA4B,CACpC,aAAa,CAAE,IAAI,CAGrB,WAAY,CAAE,KAAK,CAAE,KAAK,CAC1B,UAAW,CAAE,KAAK,CAAE,IAAI,CAGtB,kpBAAY,CAAE,YAAY,CAAE,IAAI,CAChC,kqBAAa,CAAE,WAAW,CAAE,IAAI,CCXlC,QAAwB,CACtB,iBAAiB,CAAE,0BAA0B,CACrC,SAAS,CAAE,0BAA0B,CAG/C,0BASC,CARC,EAAG,CACD,iBAAiB,CAAE,YAAY,CACvB,SAAS,CAAE,YAAY,CAEjC,IAAK,CACH,iBAAiB,CAAE,cAAc,CACzB,SAAS,CAAE,cAAc,EAIrC,kBASC,CARC,EAAG,CACD,iBAAiB,CAAE,YAAY,CACvB,SAAS,CAAE,YAAY,CAEjC,IAAK,CACH,iBAAiB,CAAE,cAAc,CACzB,SAAS,CAAE,cAAc,ECvBrC,aAA8B,CCU5B,MAAM,CAAE,wDAAmE,CAC3E,iBAAiB,CAAE,aAAgB,CAC/B,aAAa,CAAE,aAAgB,CAC3B,SAAS,CAAE,aAAgB,CDZrC,cAA8B,CCS5B,MAAM,CAAE,wDAAmE,CAC3E,iBAAiB,CAAE,cAAgB,CAC/B,aAAa,CAAE,cAAgB,CAC3B,SAAS,CAAE,cAAgB,CDXrC,cAA8B,CCQ5B,MAAM,CAAE,wDAAmE,CAC3E,iBAAiB,CAAE,cAAgB,CAC/B,aAAa,CAAE,cAAgB,CAC3B,SAAS,CAAE,cAAgB,CDTrC,mBAAmC,CCajC,MAAM,CAAE,wDAAmE,CAC3E,iBAAiB,CAAE,YAAoB,CACnC,aAAa,CAAE,YAAoB,CAC/B,SAAS,CAAE,YAAoB,CDfzC,iBAAmC,CCYjC,MAAM,CAAE,wDAAmE,CAC3E,iBAAiB,CAAE,YAAoB,CACnC,aAAa,CAAE,YAAoB,CAC/B,SAAS,CAAE,YAAoB,CDVzC,+GAIuC,CACrC,MAAM,CAAE,IAAI,CEfd,SAAyB,CACvB,QAAQ,CAAE,QAAQ,CAClB,OAAO,CAAE,YAAY,CACrB,KAAK,CAAE,GAAG,CACV,MAAM,CAAE,GAAG,CACX,WAAW,CAAE,GAAG,CAChB,cAAc,CAAE,MAAM,CAExB,yBAAyD,CACvD,QAAQ,CAAE,QAAQ,CAClB,IAAI,CAAE,CAAC,CACP,KAAK,CAAE,IAAI,CACX,UAAU,CAAE,MAAM,CAEpB,YAA4B,CAAE,WAAW,CAAE,OAAO,CAClD,YAA4B,CAAE,SAAS,CAAE,GAAG,CAC5C,WAA2B,CAAE,KAAK,CLXZ,IAAI,CML1B,gBAAgC,CAAE,OAAO,CNwP1B,GAAO,CMvPtB,gBAAgC,CAAE,OAAO,CNkV1B,GAAO,CMjVtB,qCAAiC,CAAE,OAAO,CNyZ1B,GAAO,CMxZvB,qBAAqC,CAAE,OAAO,CN2K1B,GAAO,CM1K3B,gBAAgC,CAAE,OAAO,CNqQ1B,GAAO,CMpQtB,eAA+B,CAAE,OAAO,CNkc1B,GAAO,CMjcrB,iBAAiC,CAAE,OAAO,CNsc1B,GAAO,CMrcvB,eAA+B,CAAE,OAAO,CN0gB1B,GAAO,CMzgBrB,eAA+B,CAAE,OAAO,CN+M1B,GAAO,CM9MrB,mBAAmC,CAAE,OAAO,CN8d1B,GAAO,CM7dzB,aAA6B,CAAE,OAAO,CN4d1B,GAAO,CM3dnB,kBAAkC,CAAE,OAAO,CN6d1B,GAAO,CM5dxB,gBAAgC,CAAE,OAAO,CN+F1B,GAAO,CM9FtB,mDAEgC,CAAE,OAAO,CNge1B,GAAO,CM/dtB,sBAAsC,CAAE,OAAO,CN6Y1B,GAAO,CM5Y5B,uBAAuC,CAAE,OAAO,CN2Y1B,GAAO,CM1Y7B,oBAAoC,CAAE,OAAO,CNqW1B,GAAO,CMpW1B,iBAAiC,CAAE,OAAO,CNwZ1B,GAAO,CMvZvB,8BAC8B,CAAE,OAAO,CNmH1B,GAAO,CMlHpB,kBAAkC,CAAE,OAAO,CNoe1B,GAAO,CMnexB,iCAA+B,CAAE,OAAO,CNqP1B,GAAO,CMpPrB,iBAAiC,CAAE,OAAO,CNmL1B,GAAO,CMlLvB,kBAAkC,CAAE,OAAO,CNqG1B,GAAO,CMpGxB,eAA+B,CAAE,OAAO,CNqX1B,GAAO,CMpXrB,uHAAmC,CAAE,OAAO,CNyI1B,GAAO,CMxIzB,8BAA8C,CAAE,OAAO,CNG1B,GAAO,CMFpC,4BAA4C,CAAE,OAAO,CNK1B,GAAO,CMJlC,gBAAgC,CAAE,OAAO,CNmP1B,GAAO,CMlPtB,wBAAwC,CAAE,OAAO,CNkV1B,GAAO,CMjV9B,yCACiC,CAAE,OAAO,CNyW1B,GAAO,CMxWvB,kBAAkC,CAAE,OAAO,CNoW1B,GAAO,CMnWxB,mBAAmC,CAAE,OAAO,CNiR1B,GAAO,CMhRzB,eAA+B,CAAE,OAAO,CNoR1B,GAAO,CMnRrB,eAA+B,CAAE,OAAO,CNsL1B,GAAO,CMrLrB,qBAAqC,CAAE,OAAO,CNkO1B,GAAO,CMjO3B,qBAAqC,CAAE,OAAO,CNkf1B,GAAO,CMjf3B,sBAAsC,CAAE,OAAO,CNgf1B,GAAO,CM/e5B,oBAAoC,CAAE,OAAO,CNif1B,GAAO,CMhf1B,iBAAiC,CAAE,OAAO,CNiV1B,GAAO,CMhVvB,kBAAkC,CAAE,OAAO,CNU1B,GAAO,CMTxB,cAA8B,CAAE,OAAO,CNkb1B,GAAO,CMjbpB,eAA+B,CAAE,OAAO,CNkb1B,GAAO,CMjbrB,iCAA+B,CAAE,OAAO,CNyB1B,GAAO,CMxBrB,mBAAmC,CAAE,OAAO,CNyB1B,GAAO,CMxBzB,gBAAgC,CAAE,OAAO,CNwU1B,GAAO,CMvUtB,iBAAiC,CAAE,OAAO,CNqC1B,GAAO,CMpCvB,eAA+B,CAAE,OAAO,CNoL1B,GAAO,CMnLrB,eAA+B,CAAE,OAAO,CNiB1B,GAAO,CMhBrB,iBAAiC,CAAE,OAAO,CNqO1B,GAAO,CMpOvB,sBAAsC,CAAE,OAAO,CN+a1B,GAAO,CM9a5B,qBAAqC,CAAE,OAAO,CN+a1B,GAAO,CM9a3B,qBAAqC,CAAE,OAAO,CN3C1B,GAAO,CM4C3B,uBAAuC,CAAE,OAAO,CN9C1B,GAAO,CM+C7B,sBAAsC,CAAE,OAAO,CN5C1B,GAAO,CM6C5B,wBAAwC,CAAE,OAAO,CN/C1B,GAAO,CMgD9B,eAA+B,CAAE,OAAO,CNwP1B,GAAO,CMvPrB,oCACkC,CAAE,OAAO,CN0R1B,GAAO,CMzRxB,iBAAiC,CAAE,OAAO,CNoN1B,GAAO,CMnNvB,uBAAuC,CAAE,OAAO,CNqd1B,GAAO,CMpd7B,sDAEoC,CAAE,OAAO,CNsS1B,GAAO,CMrS1B,iBAAiC,CAAE,OAAO,CN+R1B,GAAO,CM9RvB,qBAAqC,CAAE,OAAO,CN+P1B,GAAO,CM9P3B,iBAAiC,CAAE,OAAO,CN7D1B,GAAO,CM8DvB,eAA+B,CAAE,OAAO,CN4a1B,GAAO,CM3arB,0CAC0C,CAAE,OAAO,CN4R1B,GAAO,CM3RhC,yBAAyC,CAAE,OAAO,CN2V1B,GAAO,CM1V/B,yBAAyC,CAAE,OAAO,CNqC1B,GAAO,CMpC/B,iBAAiC,CAAE,OAAO,CNlC1B,GAAO,CMmCvB,wBAAwC,CAAE,OAAO,CNmY1B,GAAO,CMlY9B,wBAAwC,CAAE,OAAO,CNkH1B,GAAO,CMjH9B,mBAAmC,CAAE,OAAO,CN9B1B,GAAO,CM+BzB,eAA+B,CAAE,OAAO,CNgS1B,GAAO,CM/RrB,gBAAgC,CAAE,OAAO,CN+Q1B,GAAO,CM9QtB,eAA+B,CAAE,OAAO,CNiY1B,GAAO,CMhYrB,kBAAkC,CAAE,OAAO,CNqJ1B,GAAO,CMpJxB,uBAAuC,CAAE,OAAO,CN6G1B,GAAO,CM5G7B,uBAAuC,CAAE,OAAO,CN4X1B,GAAO,CM3X7B,gBAAgC,CAAE,OAAO,CNoF1B,GAAO,CMnFtB,uBAAuC,CAAE,OAAO,CN+B1B,GAAO,CM9B7B,wBAAwC,CAAE,OAAO,CN+B1B,GAAO,CM9B9B,sBAAsC,CAAE,OAAO,CN4R1B,GAAO,CM3R5B,uBAAuC,CAAE,OAAO,CNkP1B,GAAO,CMjP7B,8FAAuC,CAAE,OAAO,CNsZ1B,GAAO,CMrZ7B,+FAAuC,CAAE,OAAO,CNiB1B,GAAO,CMhB7B,0BAA0C,CAAE,OAAO,CNiS1B,GAAO,CMhShC,sBAAsC,CAAE,OAAO,CNuL1B,GAAO,CMtL5B,qBAAqC,CAAE,OAAO,CNuD1B,GAAO,CMtD3B,yBAAyC,CAAE,OAAO,CNkZ1B,GAAO,CMjZ/B,yBAAyC,CAAE,OAAO,CNa1B,GAAO,CMZ/B,cAA8B,CAAE,OAAO,CNhD1B,GAAO,CMiDpB,qBAAqC,CAAE,OAAO,CN5D1B,GAAO,CM6D3B,sBAAsC,CAAE,OAAO,CN5D1B,GAAO,CM6D5B,mBAAmC,CAAE,OAAO,CN5D1B,GAAO,CM6DzB,qBAAqC,CAAE,OAAO,CNhE1B,GAAO,CMiE3B,wCACgC,CAAE,OAAO,CNyT1B,GAAO,CMxTtB,iBAAiC,CAAE,OAAO,CN+E1B,GAAO,CM9EvB,mBAAmC,CAAE,OAAO,CNuC1B,GAAO,CMtCzB,eAA+B,CAAE,OAAO,CNyQ1B,GAAO,CMxQrB,gBAAgC,CAAE,OAAO,CN+N1B,GAAO,CM9NtB,mBAAmC,CAAE,OAAO,CN/D1B,GAAO,CMgEzB,gNAA6C,CAAE,OAAO,CNwE1B,GAAO,CMvEnC,eAA+B,CAAE,OAAO,CNmI1B,GAAO,CMlIrB,eAA+B,CAAE,OAAO,CNqL1B,GAAO,CMpLrB,iCAA+B,CAAE,OAAO,CNyG1B,GAAO,CMxGrB,cAA8B,CAAE,OAAO,CNyE1B,GAAO,CMxEpB,oBAAoC,CAAE,OAAO,CNyE1B,GAAO,CMxE1B,kDAC+C,CAAE,OAAO,CNkE1B,GAAO,CMjErC,gBAAgC,CAAE,OAAO,CNyP1B,GAAO,CMxPtB,mBAAmC,CAAE,OAAO,CNlC1B,GAAO,CMmCzB,iBAAiC,CAAE,OAAO,CN0Q1B,GAAO,CMzQvB,kBAAkC,CAAE,OAAO,CNmB1B,GAAO,CMlBxB,iBAAiC,CAAE,OAAO,CNqM1B,GAAO,CMpMvB,qBAAqC,CAAE,OAAO,CNH1B,GAAO,CMI3B,uBAAuC,CAAE,OAAO,CNP1B,GAAO,CMQ7B,kBAAkC,CAAE,OAAO,CNiR1B,GAAO,CMhRxB,wBAAwC,CAAE,OAAO,CN2S1B,GAAO,CM1S9B,iBAAiC,CAAE,OAAO,CNoG1B,GAAO,CMnGvB,sBAAsC,CAAE,OAAO,CNqG1B,GAAO,CMpG5B,mBAAmC,CAAE,OAAO,CNpF1B,GAAO,CMqFzB,mBAAmC,CAAE,OAAO,CNtF1B,GAAO,CMuFzB,2CACoC,CAAE,OAAO,CNhF1B,GAAO,CMiF1B,yBAAyC,CAAE,OAAO,CNkY1B,GAAO,CMjY/B,0BAA0C,CAAE,OAAO,CNyD1B,GAAO,CMxDhC,uBAAuC,CAAE,OAAO,CN/C1B,GAAO,CMgD7B,cAA8B,CAAE,OAAO,CNsJ1B,GAAO,CMrJpB,gCAC+B,CAAE,OAAO,CNA1B,GAAO,CMCrB,mBAAmC,CAAE,OAAO,CNG1B,GAAO,CMFzB,sBAAsC,CAAE,OAAO,CNiW1B,GAAO,CMhW5B,wBAAwC,CAAE,OAAO,CN+V1B,GAAO,CM9V9B,oBAAoC,CAAE,OAAO,CN2T1B,GAAO,CM1T1B,kBAAkC,CAAE,OAAO,CN4H1B,GAAO,CM3HxB,mBAAmC,CAAE,OAAO,CN2R1B,GAAO,CM1RzB,0BAA0C,CAAE,OAAO,CNiK1B,GAAO,CMhKhC,qBAAqC,CAAE,OAAO,CNwV1B,GAAO,CMvV3B,wBAAwC,CAAE,OAAO,CNsC1B,GAAO,CMrC9B,kBAAkC,CAAE,OAAO,CNsR1B,GAAO,CMrRxB,iBAAiC,CAAE,OAAO,CNyW1B,GAAO,CMxWvB,wBAAwC,CAAE,OAAO,CNiG1B,GAAO,CMhG9B,iBAAiC,CAAE,OAAO,CNyX1B,GAAO,CMxXvB,kBAAkC,CAAE,OAAO,CN+I1B,GAAO,CM9IxB,gBAAgC,CAAE,OAAO,CN6M1B,GAAO,CM5MtB,mBAAmC,CAAE,OAAO,CN2S1B,GAAO,CM1SzB,qBAAqC,CAAE,OAAO,CNjF1B,GAAO,CMkF3B,uBAAuC,CAAE,OAAO,CN2M1B,GAAO,CM1M7B,kBAAkC,CAAE,OAAO,CNyW1B,GAAO,CMxWxB,mBAAmC,CAAE,OAAO,CNgC1B,GAAO,CM/BzB,qCAAiC,CAAE,OAAO,CNsF1B,GAAO,CMrFvB,iBAAiC,CAAE,OAAO,CN6W1B,GAAO,CM5WvB,sBAAsC,CAAE,OAAO,CNb1B,GAAO,CMc5B,cAA8B,CAAE,OAAO,CNmP1B,GAAO,CMlPpB,gBAAgC,CAAE,OAAO,CNoG1B,GAAO,CMnGtB,mBAAmC,CAAE,OAAO,CNpF1B,GAAO,CMqFzB,eAA+B,CAAE,OAAO,CN1G1B,GAAO,CM2GrB,sBAAsC,CAAE,OAAO,CN7D1B,GAAO,CM8D5B,uBAAuC,CAAE,OAAO,CN8F1B,GAAO,CM7F7B,sBAAsC,CAAE,OAAO,CN4F1B,GAAO,CM3F5B,oBAAoC,CAAE,OAAO,CN6F1B,GAAO,CM5F1B,sBAAsC,CAAE,OAAO,CNyF1B,GAAO,CMxF5B,2DAA4C,CAAE,OAAO,CN5I1B,GAAO,CM6IlC,6DAA6C,CAAE,OAAO,CNxI1B,GAAO,CMyInC,0BAA0C,CAAE,OAAO,CNxI1B,GAAO,CMyIhC,4BAA4C,CAAE,OAAO,CNhJ1B,GAAO,CMiJlC,gBAAgC,CAAE,OAAO,CN2E1B,GAAO,CM1EtB,iBAAiC,CAAE,OAAO,CNqX1B,GAAO,CMpXvB,gBAAgC,CAAE,OAAO,CNgT1B,GAAO,CM/StB,iBAAiC,CAAE,OAAO,CNuC1B,GAAO,CMtCvB,oBAAoC,CAAE,OAAO,CNxG1B,GAAO,CMyG1B,qBAAqC,CAAE,OAAO,CNzI1B,GAAO,CM0I3B,iCACgC,CAAE,OAAO,CN8V1B,GAAO,CM7VtB,kDAC+B,CAAE,OAAO,CNwH1B,GAAO,CMvHrB,gBAAgC,CAAE,OAAO,CNxD1B,GAAO,CMyDtB,gBAAgC,CAAE,OAAO,CNsC1B,GAAO,CMrCtB,kCACmC,CAAE,OAAO,CN+N1B,GAAO,CM9NzB,kCACkC,CAAE,OAAO,CNyB1B,GAAO,CMxBxB,oBAAoC,CAAE,OAAO,CN8J1B,GAAO,CM7J1B,mCACmC,CAAE,OAAO,CNiC1B,GAAO,CMhCzB,iBAAiC,CAAE,OAAO,CNkQ1B,GAAO,CMjQvB,qDAE+B,CAAE,OAAO,CN9I1B,GAAO,CM+IrB,kBAAkC,CAAE,OAAO,CNiH1B,GAAO,CMhHxB,kBAAkC,CAAE,OAAO,CN+G1B,GAAO,CM9GxB,wBAAwC,CAAE,OAAO,CN4Q1B,GAAO,CM3Q9B,oBAAoC,CAAE,OAAO,CNgU1B,GAAO,CM/T1B,gBAAgC,CAAE,OAAO,CNkR1B,GAAO,CMjRtB,gBAAgC,CAAE,OAAO,CNmH1B,GAAO,CMlHtB,gBAAgC,CAAE,OAAO,CNmT1B,GAAO,CMlTtB,oBAAoC,CAAE,OAAO,CNgK1B,GAAO,CM/J1B,2BAA2C,CAAE,OAAO,CNgK1B,GAAO,CM/JjC,6BAA6C,CAAE,OAAO,CN8C1B,GAAO,CM7CnC,sBAAsC,CAAE,OAAO,CN4C1B,GAAO,CM3C5B,gBAAgC,CAAE,OAAO,CNgI1B,GAAO,CM/HtB,wEAAqC,CAAE,OAAO,CNxH1B,GAAO,CMyH3B,mBAAmC,CAAE,OAAO,CNlH1B,GAAO,CMmHzB,qBAAqC,CAAE,OAAO,CNzH1B,GAAO,CM0H3B,sBAAsC,CAAE,OAAO,CNzH1B,GAAO,CM0H5B,kBAAkC,CAAE,OAAO,CN3E1B,GAAO,CM4ExB,mCAC+B,CAAE,OAAO,CN4N1B,GAAO,CM3NrB,yCACoC,CAAE,OAAO,CNgO1B,GAAO,CM/N1B,sCACmC,CAAE,OAAO,CN6N1B,GAAO,CM5NzB,mBAAmC,CAAE,OAAO,CN/C1B,GAAO,CMgDzB,mBAAmC,CAAE,OAAO,CNmF1B,GAAO,CMlFzB,sCAC+B,CAAE,OAAO,CN0S1B,GAAO,CMzSrB,iCACgC,CAAE,OAAO,CNW1B,GAAO,CMVtB,0CACqC,CAAE,OAAO,CN0P1B,GAAO,CMzP3B,oBAAoC,CAAE,OAAO,CNxF1B,GAAO,CMyF1B,qBAAqC,CAAE,OAAO,CNvF1B,GAAO,CMwF3B,gCAC+B,CAAE,OAAO,CNlK1B,GAAO,CMmKrB,kBAAkC,CAAE,OAAO,CNoM1B,GAAO,CMnMxB,mBAAmC,CAAE,OAAO,CN8R1B,GAAO,CM7RzB,qCACoC,CAAE,OAAO,CN9G1B,GAAO,CM+G1B,sBAAsC,CAAE,OAAO,CNiE1B,GAAO,CMhE5B,mBAAmC,CAAE,OAAO,CN1D1B,GAAO,CM2DzB,yBAAyC,CAAE,OAAO,CN7G1B,GAAO,CM8G/B,uBAAuC,CAAE,OAAO,CN7G1B,GAAO,CM8G7B,kBAAkC,CAAE,OAAO,CNkS1B,GAAO,CMjSxB,sBAAsC,CAAE,OAAO,CNgO1B,GAAO,CM/N5B,mBAAmC,CAAE,OAAO,CNqO1B,GAAO,CMpOzB,iBAAiC,CAAE,OAAO,CNxL1B,GAAO,CMyLvB,iBAAiC,CAAE,OAAO,CN7G1B,GAAO,CM8GvB,kBAAkC,CAAE,OAAO,CN3F1B,GAAO,CM4FxB,sBAAsC,CAAE,OAAO,CNpC1B,GAAO,CMqC5B,qBAAqC,CAAE,OAAO,CNzK1B,GAAO,CM0K3B,qBAAqC,CAAE,OAAO,CNqB1B,GAAO,CMpB3B,oBAAoC,CAAE,OAAO,CN3O1B,GAAO,CM4O1B,iBAAiC,CAAE,OAAO,CN4E1B,GAAO,CM3EvB,sBAAsC,CAAE,OAAO,CNxD1B,GAAO,CMyD5B,eAA+B,CAAE,OAAO,CNrM1B,GAAO,CMsMrB,mBAAmC,CAAE,OAAO,CNG1B,GAAO,CMFzB,sBAAsC,CAAE,OAAO,CNuH1B,GAAO,CMtH5B,4BAA4C,CAAE,OAAO,CN5O1B,GAAO,CM6OlC,6BAA6C,CAAE,OAAO,CN5O1B,GAAO,CM6OnC,0BAA0C,CAAE,OAAO,CN5O1B,GAAO,CM6OhC,4BAA4C,CAAE,OAAO,CNhP1B,GAAO,CMiPlC,qBAAqC,CAAE,OAAO,CN5O1B,GAAO,CM6O3B,sBAAsC,CAAE,OAAO,CN5O1B,GAAO,CM6O5B,mBAAmC,CAAE,OAAO,CN5O1B,GAAO,CM6OzB,qBAAqC,CAAE,OAAO,CNhP1B,GAAO,CMiP3B,kBAAkC,CAAE,OAAO,CNxG1B,GAAO,CMyGxB,iBAAiC,CAAE,OAAO,CNyB1B,GAAO,CMxBvB,iBAAiC,CAAE,OAAO,CNmN1B,GAAO,CMlNvB,yCACiC,CAAE,OAAO,CNmE1B,GAAO,CMlEvB,mBAAmC,CAAE,OAAO,CNlJ1B,GAAO,CMmJzB,qBAAqC,CAAE,OAAO,CNiH1B,GAAO,CMhH3B,sBAAsC,CAAE,OAAO,CNiH1B,GAAO,CMhH5B,kBAAkC,CAAE,OAAO,CNiL1B,GAAO,CMhLxB,iBAAiC,CAAE,OAAO,CNvJ1B,GAAO,CMwJvB,sCACgC,CAAE,OAAO,CNyH1B,GAAO,CMxHtB,qBAAqC,CAAE,OAAO,CN9B1B,GAAO,CM+B3B,mBAAmC,CAAE,OAAO,CNjD1B,GAAO,CMkDzB,wBAAwC,CAAE,OAAO,CNhD1B,GAAO,CMiD9B,kBAAkC,CAAE,OAAO,CN2J1B,GAAO,CM1JxB,kBAAkC,CAAE,OAAO,CN9C1B,GAAO,CM+CxB,gBAAgC,CAAE,OAAO,CN+C1B,GAAO,CM9CtB,kBAAkC,CAAE,OAAO,CN9C1B,GAAO,CM+CxB,qBAAqC,CAAE,OAAO,CNI1B,GAAO,CMH3B,iBAAiC,CAAE,OAAO,CN9D1B,GAAO,CM+DvB,yBAAyC,CAAE,OAAO,CNhE1B,GAAO,CMiE/B,mBAAmC,CAAE,OAAO,CNsM1B,GAAO,CMrMzB,eAA+B,CAAE,OAAO,CN1J1B,GAAO,CM2JrB,8CACoC,CAAE,OAAO,CN4G1B,GAAO,CM3G1B,2EAEsC,CAAE,OAAO,CNwK1B,GAAO,CMvK5B,yBAAyC,CAAE,OAAO,CNmB1B,GAAO,CMlB/B,eAA+B,CAAE,OAAO,CNjJ1B,GAAO,CMkJrB,oBAAoC,CAAE,OAAO,CNjK1B,GAAO,CMkK1B,yCACuC,CAAE,OAAO,CN9L1B,GAAO,CM+L7B,mBAAmC,CAAE,OAAO,CNmF1B,GAAO,CMlFzB,eAA+B,CAAE,OAAO,CNvB1B,GAAO,CMwBrB,sBAAsC,CAAE,OAAO,CNvH1B,GAAO,CMwH5B,sBAAsC,CAAE,OAAO,CN6K1B,GAAO,CM5K5B,oBAAoC,CAAE,OAAO,CNyK1B,GAAO,CMxK1B,iBAAiC,CAAE,OAAO,CN9H1B,GAAO,CM+HvB,uBAAuC,CAAE,OAAO,CN0E1B,GAAO,CMzE7B,qBAAqC,CAAE,OAAO,CNwB1B,GAAO,CMvB3B,2BAA2C,CAAE,OAAO,CNwB1B,GAAO,CMvBjC,iBAAiC,CAAE,OAAO,CNqH1B,GAAO,CMpHvB,qBAAqC,CAAE,OAAO,CN9N1B,GAAO,CM+N3B,4BAA4C,CAAE,OAAO,CN1F1B,GAAO,CM2FlC,iBAAiC,CAAE,OAAO,CN2F1B,GAAO,CM1FvB,iBAAiC,CAAE,OAAO,CNc1B,GAAO,CMbvB,8BAA8C,CAAE,OAAO,CNtM1B,GAAO,CMuMpC,+BAA+C,CAAE,OAAO,CNtM1B,GAAO,CMuMrC,4BAA4C,CAAE,OAAO,CNtM1B,GAAO,CMuMlC,8BAA8C,CAAE,OAAO,CN1M1B,GAAO,CM2MpC,gBAAgC,CAAE,OAAO,CN7C1B,GAAO,CM8CtB,eAA+B,CAAE,OAAO,CNtK1B,GAAO,CMuKrB,iBAAiC,CAAE,OAAO,CN9S1B,GAAO,CM+SvB,qBAAqC,CAAE,OAAO,CN+M1B,GAAO,CM9M3B,mBAAmC,CAAE,OAAO,CN/O1B,GAAO,CMgPzB,qBAAqC,CAAE,OAAO,CNtJ1B,GAAO,CMuJ3B,qBAAqC,CAAE,OAAO,CNtJ1B,GAAO,CMuJ3B,qBAAqC,CAAE,OAAO,CNmF1B,GAAO,CMlF3B,sBAAsC,CAAE,OAAO,CN6C1B,GAAO,CM5C5B,iBAAiC,CAAE,OAAO,CN0K1B,GAAO,CMzKvB,uBAAuC,CAAE,OAAO,CNO1B,GAAO,CMN7B,wIAAyC,CAAE,OAAO,CNO1B,GAAO,CMN/B,mBAAmC,CAAE,OAAO,CN/B1B,GAAO,CMgCzB,qBAAqC,CAAE,OAAO,CNjC1B,GAAO,CMkC3B,uBAAuC,CAAE,OAAO,CN3N1B,GAAO,CM4N7B,wBAAwC,CAAE,OAAO,CNyB1B,GAAO,CMxB9B,+BAA+C,CAAE,OAAO,CNlJ1B,GAAO,CMmJrC,uBAAuC,CAAE,OAAO,CNuF1B,GAAO,CMtF7B,kBAAkC,CAAE,OAAO,CN9L1B,GAAO,CM+LxB,qDAC8C,CAAE,OAAO,CNnP1B,GAAO,CMoPpC,iDAC4C,CAAE,OAAO,CNlP1B,GAAO,CMmPlC,uDAC+C,CAAE,OAAO,CNrP1B,GAAO,CMsPrC,8BAC8B,CAAE,OAAO,CNpK1B,GAAO,CMqKpB,cAA8B,CAAE,OAAO,CNzG1B,GAAO,CM0GpB,gCAC8B,CAAE,OAAO,CNwL1B,GAAO,CMvLpB,+BAC8B,CAAE,OAAO,CNrE1B,GAAO,CMsEpB,2DAG8B,CAAE,OAAO,CNnE1B,GAAO,CMoEpB,iDAE8B,CAAE,OAAO,CNqD1B,GAAO,CMpDpB,6BAC8B,CAAE,OAAO,CNpE1B,GAAO,CMqEpB,iCAC8B,CAAE,OAAO,CN1R1B,GAAO,CM2RpB,eAA+B,CAAE,OAAO,CNlK1B,GAAO,CMmKrB,oBAAoC,CAAE,OAAO,CNtJ1B,GAAO,CMuJ1B,yBAAyC,CAAE,OAAO,CN4E1B,GAAO,CM3E/B,0BAA0C,CAAE,OAAO,CN4E1B,GAAO,CM3EhC,0BAA0C,CAAE,OAAO,CN4E1B,GAAO,CM3EhC,2BAA2C,CAAE,OAAO,CN4E1B,GAAO,CM3EjC,2BAA2C,CAAE,OAAO,CN+E1B,GAAO,CM9EjC,4BAA4C,CAAE,OAAO,CN+E1B,GAAO,CM9ElC,oBAAoC,CAAE,OAAO,CN+H1B,GAAO,CM9H1B,sBAAsC,CAAE,OAAO,CN2H1B,GAAO,CM1H5B,yBAAyC,CAAE,OAAO,CN4L1B,GAAO,CM3L/B,kBAAkC,CAAE,OAAO,CNyL1B,GAAO,CMxLxB,eAA+B,CAAE,OAAO,CNmL1B,GAAO,CMlLrB,sBAAsC,CAAE,OAAO,CNmL1B,GAAO,CMlL5B,uBAAuC,CAAE,OAAO,CNuL1B,GAAO,CMtL7B,kBAAkC,CAAE,OAAO,CN/M1B,GAAO,CMgNxB,yBAAyC,CAAE,OAAO,CNgF1B,GAAO,CM/E/B,oBAAoC,CAAE,OAAO,CNjG1B,GAAO,CMkG1B,iBAAiC,CAAE,OAAO,CNxJ1B,GAAO,CMyJvB,cAA8B,CAAE,OAAO,CNhX1B,GAAO,CMiXpB,2CAAoC,CAAE,OAAO,CNzT1B,GAAO,CM0T1B,2BAA2C,CAAE,OAAO,CNzT1B,GAAO,CM0TjC,iBAAiC,CAAE,OAAO,CNqI1B,GAAO,CMpIvB,wBAAwC,CAAE,OAAO,CNqI1B,GAAO,CMpI9B,0BAA0C,CAAE,OAAO,CNrE1B,GAAO,CMsEhC,wBAAwC,CAAE,OAAO,CNnE1B,GAAO,CMoE9B,0BAA0C,CAAE,OAAO,CNtE1B,GAAO,CMuEhC,2BAA2C,CAAE,OAAO,CNtE1B,GAAO,CMuEjC,gBAAgC,CAAE,OAAO,CNxW1B,GAAO,CMyWtB,kBAAkC,CAAE,OAAO,CN8J1B,GAAO,CM7JxB,kBAAkC,CAAE,OAAO,CNpX1B,GAAO,CMqXxB,gBAAgC,CAAE,OAAO,CNnF1B,GAAO,CMoFtB,mBAAmC,CAAE,OAAO,CNjO1B,GAAO,CMkOzB,gBAAgC,CAAE,OAAO,CNsC1B,GAAO,CMrCtB,qBAAqC,CAAE,OAAO,CNhK1B,GAAO,CMiK3B,iBAAiC,CAAE,OAAO,CNmH1B,GAAO,CMlHvB,iBAAiC,CAAE,OAAO,CNxM1B,GAAO,CMyMvB,eAA+B,CAAE,OAAO,CNzE1B,GAAO,CM0ErB,iBAAiC,CAAE,OAAO,CNrJ1B,GAAO,CMsJvB,gBAAgC,CAAE,OAAO,CN2E1B,GAAO,CM1EtB,iBAAiC,CAAE,OAAO,CN7D1B,GAAO,CM8DvB,kBAAkC,CAAE,OAAO,CNpX1B,GAAO,CMqXxB,cAA8B,CAAE,OAAO,CNpU1B,GAAO,CMqUpB,aAA6B,CAAE,OAAO,CNsI1B,GAAO,CMrInB,gBAAgC,CAAE,OAAO,CN2I1B,GAAO,CM1ItB,iBAAiC,CAAE,OAAO,CNX1B,GAAO,CMYvB,oBAAoC,CAAE,OAAO,CN5D1B,GAAO,CM6D1B,yBAAyC,CAAE,OAAO,CNgD1B,GAAO,CM/C/B,+BAA+C,CAAE,OAAO,CNrX1B,GAAO,CMsXrC,8BAA8C,CAAE,OAAO,CNvX1B,GAAO,CMwXpC,qDAC8C,CAAE,OAAO,CN5T1B,GAAO,CM6TpC,uBAAuC,CAAE,OAAO,CNvP1B,GAAO,CMwP7B,qBAAqC,CAAE,OAAO,CNoI1B,GAAO,CMnI3B,uBAAuC,CAAE,OAAO,CNyH1B,GAAO,CMxH7B,sCAC8B,CAAE,OAAO,CNiG1B,GAAO,CMhGpB,wEAAwC,CAAE,OAAO,CNzC1B,GAAO,CM0C9B,wBAAwC,CAAE,OAAO,CN+B1B,GAAO,CM9B9B,gBAAgC,CAAE,OAAO,CNa1B,GAAO,CMZtB,0BAA0C,CAAE,OAAO,CNnP1B,GAAO,CMoPhC,oBAAoC,CAAE,OAAO,CNgI1B,GAAO,CM/H1B,iBAAiC,CAAE,OAAO,CN9E1B,GAAO,CM+EvB,4DAEqC,CAAE,OAAO,CNmG1B,GAAO,CMlG3B,iDACyC,CAAE,OAAO,CN3K1B,GAAO,CM4K/B,gBAAgC,CAAE,OAAO,CN6H1B,GAAO,CM5HtB,iBAAiC,CAAE,OAAO,CNjL1B,GAAO,CMkLvB,iBAAiC,CAAE,OAAO,CNxC1B,GAAO,CMyCvB,wBAAwC,CAAE,OAAO,CNxC1B,GAAO,CMyC9B,6BAA6C,CAAE,OAAO,CNuC1B,GAAO,CMtCnC,sBAAsC,CAAE,OAAO,CNqC1B,GAAO,CMpC5B,oBAAoC,CAAE,OAAO,CNlR1B,GAAO,CMmR1B,eAA+B,CAAE,OAAO,CNhR1B,GAAO,CMiRrB,qBAAqC,CAAE,OAAO,CNxE1B,GAAO,CMyE3B,yBAAyC,CAAE,OAAO,CNxE1B,GAAO,CMyE/B,iBAAiC,CAAE,OAAO,CN7Q1B,GAAO,CM8QvB,iBAAiC,CAAE,OAAO,CN3J1B,GAAO,CM4JvB,mBAAmC,CAAE,OAAO,CNtJ1B,GAAO,CMuJzB,cAA8B,CAAE,OAAO,CNtP1B,GAAO,CMuPpB,mBAAmC,CAAE,OAAO,CN3W1B,GAAO,CM4WzB,gBAAgC,CAAE,OAAO,CNjU1B,GAAO,CMkUtB,cAA8B,CAAE,OAAO,CN1F1B,GAAO,CM2FpB,gBAAgC,CAAE,OAAO,CNM1B,GAAO,CMLtB,eAA+B,CAAE,OAAO,CNrS1B,GAAO,CMsSrB,gBAAgC,CAAE,OAAO,CNrS1B,GAAO,CMsStB,kBAAkC,CAAE,OAAO,CNtY1B,GAAO,CMuYxB,yBAAyC,CAAE,OAAO,CNtY1B,GAAO,CMuY/B,gBAAgC,CAAE,OAAO,CNa1B,GAAO,CMZtB,uBAAuC,CAAE,OAAO,CNa1B,GAAO,CMZ7B,kBAAkC,CAAE,OAAO,CN/D1B,GAAO,CMgExB,oCAC8B,CAAE,OAAO,CN5W1B,GAAO,CM6WpB,8BAC+B,CAAE,OAAO,CN2B1B,GAAO,CM1BrB,eAA+B,CAAE,OAAO,CNoD1B,GAAO,CMnDrB,kBAAkC,CAAE,OAAO,CNN1B,GAAO,CMOxB,qBAAqC,CAAE,OAAO,CNzS1B,GAAO,CM0S3B,qBAAqC,CAAE,OAAO,CNZ1B,GAAO,CMa3B,mBAAmC,CAAE,OAAO,CN/S1B,GAAO,CMgTzB,qBAAqC,CAAE,OAAO,CNhQ1B,GAAO,CMiQ3B,sBAAsC,CAAE,OAAO,CNzP1B,GAAO,CM0P5B,uBAAuC,CAAE,OAAO,CNtQ1B,GAAO,CMuQ7B,4BAA4C,CAAE,OAAO,CNhQ1B,GAAO,CMiQlC,yEAEuC,CAAE,OAAO,CNzQ1B,GAAO,CM0Q7B,+CACyC,CAAE,OAAO,CN/Q1B,GAAO,CMgR/B,+CACuC,CAAE,OAAO,CNhR1B,GAAO,CMiR7B,+CACuC,CAAE,OAAO,CNrQ1B,GAAO,CMsQ7B,sBAAsC,CAAE,OAAO,CNlR1B,GAAO,CMmR5B,eAA+B,CAAE,OAAO,CN4D1B,GAAO,CM3DrB,kBAAkC,CAAE,OAAO,CNrV1B,GAAO,CMsVxB,mBAAmC,CAAE,OAAO,CNhM1B,GAAO,CMiMzB,uGAIoC,CAAE,OAAO,CNtL1B,GAAO,CMuL1B,yBAAyC,CAAE,OAAO,CNvW1B,GAAO,CMwW/B,8BACgC,CAAE,OAAO,CNlG1B,GAAO,CMmGtB,+BACiC,CAAE,OAAO,CN1T1B,GAAO,CM2TvB,qBAAqC,CAAE,OAAO,CNpP1B,GAAO,CMqP3B,cAA8B,CAAE,OAAO,CNtP1B,GAAO,CMuPpB,sBAAsC,CAAE,OAAO,CNxO1B,GAAO,CMyO5B,wBAAwC,CAAE,OAAO,CNR1B,GAAO,CMS9B,aAA6B,CAAE,OAAO,CNjH1B,GAAO,CMkHnB,mCACiC,CAAE,OAAO,CNiD1B,GAAO,CMhDvB,sCACsC,CAAE,OAAO,CNrJ1B,GAAO,CMsJ5B,0CACwC,CAAE,OAAO,CNtJ1B,GAAO,CMuJ9B,kBAAkC,CAAE,OAAO,CNvO1B,GAAO,CMwOxB,sBAAsC,CAAE,OAAO,CNvX1B,GAAO,CMwX5B,iBAAiC,CAAE,OAAO,CN7O1B,GAAO,CM8OvB,oBAAoC,CAAE,OAAO,CNxJ1B,GAAO,CMyJ1B,kBAAkC,CAAE,OAAO,CNvE1B,GAAO,CMwExB,oBAAoC,CAAE,OAAO,CNtF1B,GAAO,CMuF1B,2BAA2C,CAAE,OAAO,CNtF1B,GAAO,CMuFjC,eAA+B,CAAE,OAAO,CNnb1B,GAAO,CMobrB,4CACmC,CAAE,OAAO,CNjR1B,GAAO,CMkRzB,cAA8B,CAAE,OAAO,CNI1B,GAAO,CMHpB,qBAAqC,CAAE,OAAO,CN9b1B,GAAO,CM+b3B,eAA+B,CAAE,OAAO,CN5I1B,GAAO,CM6IrB,qBAAqC,CAAE,OAAO,CN/E1B,GAAO,CMgF3B,iBAAiC,CAAE,OAAO,CNI1B,GAAO,CMHvB,eAA+B,CAAE,OAAO,CNuC1B,GAAO,CMtCrB,sBAAsC,CAAE,OAAO,CN7K1B,GAAO,CM8K5B,eAA+B,CAAE,OAAO,CN6B1B,GAAO,CM5BrB,qBAAqC,CAAE,OAAO,CNjb1B,GAAO,CMkb3B,iBAAiC,CAAE,OAAO,CNpK1B,GAAO,CMqKvB,wBAAwC,CAAE,OAAO,CNzQ1B,GAAO,CM0Q9B,kBAAkC,CAAE,OAAO,CNha1B,GAAO,CMiaxB,wBAAwC,CAAE,OAAO,CNpa1B,GAAO,CMqa9B,sBAAsC,CAAE,OAAO,CNta1B,GAAO,CMua5B,kBAAkC,CAAE,OAAO,CNxa1B,GAAO,CMyaxB,oBAAoC,CAAE,OAAO,CNta1B,GAAO,CMua1B,oBAAoC,CAAE,OAAO,CNta1B,GAAO,CMua1B,qBAAqC,CAAE,OAAO,CNjd1B,GAAO,CMkd3B,uBAAuC,CAAE,OAAO,CNjd1B,GAAO,CMkd7B,gBAAgC,CAAE,OAAO,CNtB1B,GAAO,CMuBtB,oBAAoC,CAAE,OAAO,CN9X1B,GAAO,CM+X1B,aAA6B,CAAE,OAAO,CNne1B,GAAO,CMoenB,qBAAqC,CAAE,OAAO,CNtV1B,GAAO,CMuV3B,sBAAsC,CAAE,OAAO,CN1L1B,GAAO,CM2L5B,wBAAwC,CAAE,OAAO,CNpd1B,GAAO,CMqd9B,qBAAqC,CAAE,OAAO,CNzf1B,GAAO,CM0f3B,oBAAoC,CAAE,OAAO,CN7K1B,GAAO,CM8K1B,qBAAqC,CAAE,OAAO,CNzO1B,GAAO,CM0O3B,iBAAiC,CAAE,OAAO,CNtP1B,GAAO,CMuPvB,wBAAwC,CAAE,OAAO,CNtP1B,GAAO,CMuP9B,qBAAqC,CAAE,OAAO,CNrC1B,GAAO,CMsC3B,oBAAoC,CAAE,OAAO,CNrC1B,GAAO,CMsC1B,kBAAkC,CAAE,OAAO,CN9d1B,GAAO,CM+dxB,cAA8B,CAAE,OAAO,CN5c1B,GAAO,CM6cpB,kBAAkC,CAAE,OAAO,CNtQ1B,GAAO,CMuQxB,oBAAoC,CAAE,OAAO,CN9gB1B,GAAO,CM+gB1B,aAA6B,CAAE,OAAO,CN/b1B,GAAO,CMgcnB,kDAE8B,CAAE,OAAO,CNpR1B,GAAO,CMqRpB,mBAAmC,CAAE,OAAO,CN/N1B,GAAO,COtUzB,swBAAK,CACH,WAAW,CAAE,OAAO,CACpB,y5BAAQ,CACN,WAAW,CC+BuB,aAAa,CD9B/C,OAAO,CAAE,YAAY,CACrB,UAAU,CAAE,MAAM,CAClB,WAAW,CAAE,MAAM,CACnB,WAAW,CAAE,CAAC,CACd,eAAe,CAAE,OAAO,CAM5B,86BAAkB,CAChB,OAAO,CAAE,YAAY,CACrB,eAAe,CAAE,OAAO,CAGxB,muEAAgB,CACd,OAAO,CAAE,MAAM,CACf,2wEAAuB,CACrB,WAAW,CAAE,KAAI,CACnB,utEAAsB,CACpB,OAAO,CAAE,YAAY,CAE3B,2iBAA2B,CACzB,OAAO,CAAE,GAAE,CfpBL,kBAAoB,CAAE,qBAAM,CAK5B,eAAiB,CAAE,qBAAM,CAezB,UAAY,CAAE,qBAAM,CeE5B,+nBAAiC,CAC/B,OAAO,CAAE,CAAC,CAGV,mtCAAuB,CACrB,SAAS,CAAE,IAAI,CACf,cAAc,CAAE,IAAI,CEpBxB,0PAAS,CACP,OAAO,CAAE,IAAqB,CAC9B,WAAW,CDayB,IAAI,CCZxC,aAAa,CDYuB,IAAI,CCXxC,UAAU,CAAE,OAAmB,CAEjC,8CAAe,CACb,KAAK,CCY+B,IAAM,CDX1C,WAAW,CAAE,IAAI,CACjB,OAAO,CAAE,KAAK,CACd,KAAK,CCS+B,IAAM,CDR1C,UAAU,CAAE,OAAkB,CAC9B,MAAM,CAAE,KAAsB,CAC9B,OAAO,CAAE,QAA2C,CACpD,aAAa,CAAE,IAAqB,CAEtC,0ZAAyB,CACvB,UAAU,CAAE,OAAkB,CAC9B,mxCAAe,CACb,UAAU,CAAE,OAAiB,CACjC,kYAA0B,CACxB,UAAU,CAAE,OAAmB,CAC/B,ouCAAe,CACb,UAAU,CAAE,OAAoB,CAEpC,sYAAuB,CACrB,UAAU,CAAE,OAAmB,CAC/B,yuCAAe,CACb,UAAU,CAAE,OAAkB,CAElC,mZAA0B,CACxB,UAAU,CAAE,OAAuB,CACnC,swCAAe,CACb,UAAU,CAAE,OAAqB,CAErC,scAA0B,CACxB,UAAU,CCL0B,OAAmB,CDMvD,42CAAe,CACb,KAAK,CCvB6B,OAAW,CDwB7C,UAAU,CCNwB,OAAmB,CDOvD,8dAAC,CACC,KAAK,CChB6B,OAAK,CDkB3C,sZAAsB,CACpB,aAAa,CAAE,CAAC,CAsBlB,kBAAkB,CAChB,QAAQ,CAAE,KAAK,CACf,MAAM,CAAE,GAAG,CACX,IAAI,CAAE,CAAC,CACP,OAAO,CDG6B,GAAG,CCFvC,qBAAE,CACA,OAAO,CAAE,KAAK,CACd,KAAK,CDT6B,KAAK,CCUvC,UAAU,CAAE,WAAW,CACvB,KAAK,CCxD6B,IAAM,CDyDxC,UAAU,CAAE,MAAM,CAClB,UAAU,CAAE,2BAA0B,CACtC,OAAO,CAAE,MAAmB,CAC5B,SAAS,CAAE,GAAG,CACd,OAAO,CAAE,CAAC,CACV,MAAM,CAAE,CAAC,CACT,WAAW,CAAE,IAAI,CACjB,QAAQ,CAAE,MAAM,CjB3FZ,kBAAoB,CAAE,gBAAM,CAK5B,eAAiB,CAAE,gBAAM,CAezB,UAAY,CAAE,gBAAM,CiByExB,0CAAsB,CACpB,UAAU,CC5FsB,OAAM,CD6FxC,uCAAmB,CACjB,UAAU,CC/DsB,OAAK,CDgEvC,0CAAsB,CACpB,UAAU,CDnFsB,OAAO,CCoFzC,yCAAqB,CACnB,UAAU,CDtEsB,OAAI,CCuEtC,wBAAI,CACF,OAAO,CAAE,CAAC,CACV,MAAM,CAAE,IAAI,CEhFd,oCAAsB,CFmFxB,kBAAkB,CAChB,MAAM,CAAE,IAAI,CACZ,GAAG,CAAE,CAAC,CACN,KAAK,CAAE,IAAI,CACX,qBAAE,CACA,KAAK,CAAE,IAAI,EG3FjB,MAAM,CACJ,SAAS,CAAE,IAAI,CACf,MAAM,CAAE,CAAC,CACT,cAAc,CAAE,QAAQ,CACxB,eAAe,CAAE,MAAM,CACvB,MAAM,CAAE,OAAO,CACf,WAAW,CAAE,MAAM,CACnB,kBAAkB,CAAE,MAAM,CAC1B,SAAS,CAAE,OAAO,CACpB,gDAAiD,CAC/C,MAAM,CAAE,CAAC,CACT,OAAO,CAAE,CAAC,CACZ,gBAAgB,CACd,MAAM,CAAE,OAAO,CAEjB,IAAI,CAEF,OAAO,CAAE,YAAY,CACrB,aAAa,CAAE,GAAG,CAClB,WAAW,CAAE,MAAM,CACnB,WAAW,CAAE,MAAM,CACnB,UAAU,CAAE,MAAM,CAClB,MAAM,CAAE,OAAO,CACf,SAAS,CAAE,IAAI,CACf,OAAO,CAAE,iBAA6F,CACtG,KAAK,CFlB+B,IAAM,CEmB1C,MAAM,CAAE,yBAAyB,CACjC,gBAAgB,CF7CoB,OAAM,CE8C1C,eAAe,CAAE,IAAI,CACrB,WAAW,CAAE,MAAM,CACnB,WAAW,CFJyB,uDAAM,CEK1C,UAAU,CAAE,mFAA8C,CAC1D,YAAY,CAAE,KAAK,CACnB,cAAc,CAAE,MAAM,CACtB,QAAQ,CAAE,MAAM,CAChB,IAAI,CAAE,CAAC,CACP,iBAAiB,CAAE,IAAI,CpBxDjB,mBAAoB,CoByDb,IAAI,CpBpDX,gBAAiB,CoBoDV,IAAI,CpB/CX,eAAgB,CoB+CT,IAAI,CpBrCX,WAAY,CoBqCL,IAAI,CpBzDX,kBAAoB,CAAE,eAAM,CAK5B,eAAiB,CAAE,eAAM,CAezB,UAAY,CAAE,eAAM,CoByC5B,UAAU,CACR,UAAU,CAAE,OAAwB,CACpC,KAAK,CFpC+B,IAAM,CEuC1C,UAAO,CACL,UAAU,CAAE,OAAqC,CACjD,KAAK,CFzC6B,IAAM,CE0C1C,UAAO,CACL,UAAU,CAAE,OAAqC,CACjD,OAAO,CAAE,CAAC,CACZ,WAAQ,CACN,UAAU,CAAE,6EAAyC,CACrD,OAAO,CAAE,iBAA6F,CACxG,YAAS,CACP,KAAK,CFjD6B,IAAM,CEkD1C,aAAU,CACR,gBAAgB,CAAE,IAAI,CACtB,MAAM,CAAE,2DAA2D,CACnE,MAAM,CAAE,iBAAmB,CAC3B,OAAO,CAAE,GAAG,CACZ,MAAM,CAAE,WAAW,CACnB,UAAU,CAAE,IAAI,CAEpB,aAAa,CACX,gBAAgB,CAAE,IAAI,CACtB,MAAM,CAAE,2DAA2D,CACnE,MAAM,CAAE,iBAAmB,CAC3B,OAAO,CAAE,GAAG,CACZ,MAAM,CAAE,WAAW,CACnB,UAAU,CAAE,IAAI,CAChB,4DAA0B,CACxB,gBAAgB,CAAE,IAAI,CACtB,MAAM,CAAE,2DAA2D,CACnE,MAAM,CAAE,iBAAmB,CAC3B,OAAO,CAAE,GAAI,CACb,MAAM,CAAE,WAAW,CACnB,UAAU,CAAE,IAAI,CAGpB,sBAAsB,CACpB,OAAO,CAAE,CAAC,CACV,MAAM,CAAE,CAAC,CAEX,UAAU,CACR,SAAS,CAAE,GAAG,CAEhB,SAAS,CACP,gBAAgB,CAAE,kBAAgB,CAClC,eAAO,CACL,gBAAgB,CAAE,kBAA6B,CAEnD,YAAY,CACV,gBAAgB,CAAE,kBAA2C,CAC7D,KAAK,CAAE,kBAAsB,CAC7B,kBAAO,CACL,gBAAgB,CAAE,kBAAuD,CACzE,KAAK,CF/F6B,OAAW,CEgG/C,oBAAS,CACP,KAAK,CAAE,kBAAsB,CAEjC,YAAY,CACV,gBAAgB,CAAE,kBAAiB,CACnC,kBAAO,CACL,gBAAgB,CAAE,eAA6B,CAEnD,WAAW,CACT,gBAAgB,CAAE,kBAAe,CACjC,iBAAO,CACL,gBAAgB,CAAE,kBAA4B,CAElD,YAAY,CACV,gBAAgB,CAAE,kBAAkB,CACpC,kBAAO,CACL,gBAAgB,CAAE,kBAA+B,CACrD,WAAW,CACT,gBAAgB,CJvIoB,IAAI,CIwIxC,iBAAO,CACL,gBAAgB,CAAE,kBAAoC,CAE1D,SAAS,CACP,gBAAgB,CAAE,sBAAsB,CACxC,KAAK,CF9G+B,OAAK,CE+GzC,UAAU,CAAE,IAAI,CAChB,YAAY,CAAE,sBAAsB,CACpC,eAAO,CACL,gBAAgB,CAAE,sBAAsB,CACxC,KAAK,CAAE,kBAAoC,CAC3C,UAAU,CAAE,IAAI,CAClB,gBAAQ,CACN,gBAAgB,CAAE,sBAAsB,CACxC,KAAK,CAAE,kBAAoC,CAC3C,UAAU,CAAE,IAAI,CAClB,iBAAS,CACP,KAAK,CFzH6B,OAAO,CE2H7C,mCAAoC,CAClC,cAAc,CAAE,MAAM,CAExB,aAAa,CACX,aAAa,CJ1IuB,IAAI,CduExC,KAAK,CAAE,CAAC,CACR,wCAAS,CAEP,OAAO,CAAE,KAAK,CACd,OAAO,CAAE,EAAE,CACb,mBAAO,CACL,KAAK,CAAE,IAAI,CmB3Ff,YAAY,CACV,QAAQ,CAAE,QAAQ,CAClB,OAAO,CAAE,YAAY,CAIvB,qCAAqC,CACnC,OAAO,CAAE,KAAK,CAChB,iBAAiB,CACf,QAAQ,CAAE,QAAQ,CAClB,IAAI,CAAE,CAAC,CACP,OAAO,CAAE,IAAI,CACb,KAAK,CAAE,IAAI,CACX,GAAG,CAAE,IAAI,CACT,SAAS,CAAE,IAAI,CACf,UAAU,CHQ0B,OAAyB,CGP7D,OAAO,CLmD6B,GAAG,CKlDvC,MAAM,CAAE,iBAAgC,CACxC,UAAU,CAAE,2BAA0B,CACtC,OAAO,CAAE,IAAqB,CAC9B,sBAAQ,CACN,OAAO,CAAE,KAAK,CACd,KAAK,CAAE,IAAI,CACX,KAAK,CHT6B,OAAW,CGU7C,WAAW,CAAE,MAAM,CACnB,SAAS,CAAE,GAAG,CACd,OAAO,CAAE,MAAuB,CAChC,MAAM,CAAE,OAAO,CACf,4BAAO,CACL,UAAU,CHLsB,OAAK,CGMrC,KAAK,CHZ2B,IAAM,CGa1C,4BAAY,CACV,UAAU,CAAE,iBAAgC,CAC5C,MAAM,CAAE,KAAuB,CACjC,2BAAW,CACT,cAAc,CAAE,IAAqB,CACrC,gDAAoB,CAClB,KAAK,CAAE,IAAI,CACf,mCAAmB,CACjB,UAAU,CAAE,OAA4B,CACxC,cAAc,CAAE,SAAS,CACzB,WAAW,CAAE,GAAG,CAChB,SAAS,CAAE,GAAG,CACd,yCAAO,CACL,UAAU,CAAE,OAA4B,CAC1C,wCAAI,CACF,KAAK,CH5B2B,IAAM,CG8B5C,6CAA6C,CAC3C,MAAM,CAAE,IAAI,CACZ,GAAG,CAAE,IAAI,CACT,IAAI,CAAE,IAAI,CACV,KAAK,CAAE,CAAC,CAGR,iDAAiB,CACf,UAAU,CHjCwB,OAAyB,CGkC3D,UAAU,CAAE,GAAG,CACjB,mDAAmB,CACjB,OAAO,CAAE,QAA2C,CACpD,yDAAO,CACL,UAAU,CHrCsB,OAAK,CGsCrC,KAAK,CH5C2B,IAAM,CG8C5C,+CAA+C,CAC7C,KAAK,CAAE,CAAC,CACR,IAAI,CAAE,IAAI,CACV,UAAU,CAAE,KAAK,CAGjB,yBAAQ,CACN,OAAO,CAAE,GAAG,CACZ,aAAa,CAAE,iBAA0B,CACzC,WAAW,CAAE,qBAAqB,CAClC,YAAY,CAAE,qBAAqB,CACnC,QAAQ,CAAE,QAAQ,CAClB,OAAO,CAAE,KAAK,CACd,GAAG,CAAE,IAAI,CACT,IAAI,CAAE,GAAG,CACT,WAAW,CAAE,IAAI,CACnB,gDAA+B,CAC7B,IAAI,CAAE,IAAI,CCtEZ,uBAAM,CACJ,OAAO,CAAE,KAAK,CAEhB,gIAA+C,CAC7C,OAAO,CAAE,YAAY,CACrB,QAAQ,CAAE,MAAM,CAChB,KAAK,CAAE,CAAC,CACR,cAAc,CAAE,MAAM,CAItB,wCAAO,CACL,OAAO,CAAE,YAAY,CACrB,cAAc,CAAE,MAAM,CACtB,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,YAA+C,CACvD,KAAK,CAAE,IAAI,CACf,4BAAW,CACT,KAAK,CAAE,IAAI,CACX,kCAAK,CACH,OAAO,CAAE,KAAK,CAChB,mCAAM,CACJ,UAAU,CAAE,GAAqB,CAEvC,QAAQ,CACN,MAAM,CAAE,CAAC,CACT,MAAM,CAAE,CAAC,CACT,OAAO,CAAE,CAAC,CACZ,MAAM,CACJ,OAAO,CAAE,KAAK,CACd,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,CAAC,CACT,OAAO,CAAE,CAAC,CACV,WAAW,CAAE,MAAM,CACnB,aAAa,CN/BuB,IAAI,CMgCxC,SAAS,CAAE,IAAI,CACf,YAAY,CAAE,IAAI,CACpB,KAAK,CACH,OAAO,CAAE,KAAK,CACd,MAAM,CAAE,cAAa,CACrB,KAAK,CNR+B,IAAU,CMS9C,SAAS,CAAE,GAAG,CAEhB,qBAAuB,CACrB,SAAS,CAAE,IAAI,CACf,MAAM,CAAE,CAAC,CACT,cAAc,CAAE,QAAQ,CACxB,eAAe,CAAE,MAAM,CAGzB,iBAAiB,CACf,aAAa,CNhDuB,IAAI,CduExC,KAAK,CAAE,CAAC,CqBrGR,SAAS,CCCC,IAAQ,CDChB,WAAI,CAAE,IAAI,CACV,YAAK,CAAE,IAAI,CrBkGb,KAAK,CAAE,CAAC,CACR,gDAAS,CAEP,OAAO,CAAE,KAAK,CACd,OAAO,CAAE,EAAE,CACb,uBAAO,CACL,KAAK,CAAE,IAAI,CALb,gDAAS,CAEP,OAAO,CAAE,KAAK,CACd,OAAO,CAAE,EAAE,CACb,uBAAO,CACL,KAAK,CAAE,IAAI,CoBzBf,uDAAyD,CACvD,OAAO,CAAE,IAAI,CACb,KAAK,CN/C+B,OAAI,CMoDxC,mGAA+C,CAC7C,cAAc,CAAE,IAAqB,CACrC,wHAAM,CACJ,KAAK,CAAE,IAAI,CAEX,0tEAAqP,CACnP,KAAK,CAAE,IAAI,CACnB,+BAA+B,CGlF3B,KAAK,CAAE,IAAsB,CAG3B,OAAO,CAAE,KAAK,CAed,YAAoB,CAAE,QAA+B,CACrD,KAAK,CAAE,IAAuC,CCnB5C,YAAoB,CAAE,CAAC,CDqBzB,0CAAa,CACX,YAAoB,CAAE,CAAC,CHgE/B,iCAAiC,CGtF7B,KAAK,CAAE,IAAsB,CAG3B,OAAO,CAAE,KAAK,CAed,YAAoB,CAAE,QAA+B,CACrD,KAAK,CAAE,SAAuC,CAE9C,4CAAa,CACX,YAAoB,CAAE,CAAC,CCA7B,iDAAwB,CACtB,YAAoB,CAAE,CAAC,CAEvB,mDAA0B,CACxB,KAAK,CALY,IAAkC,CJqEzD,iCAAiC,CG1F7B,KAAK,CAAE,IAAsB,CAG3B,OAAO,CAAE,KAAK,CAed,YAAoB,CAAE,QAA+B,CACrD,KAAK,CAAE,SAAuC,CAE9C,4CAAa,CACX,YAAoB,CAAE,CAAC,CCA7B,iDAAwB,CACtB,YAAoB,CAAE,CAAC,CAEvB,mDAA0B,CACxB,KAAK,CALY,IAAkC,CJ0EzD,uDAAuD,CACrD,MAAM,CAAE,SAA2B,CACnC,SAAS,CAAE,GAAG,CAEhB,oBAAoB,CAClB,OAAO,CAAE,YAAY,CACrB,MAAM,CAAE,SAA2B,CACnC,SAAS,CAAE,GAAG,CAOZ,osBAAqP,CACnP,KAAK,CAAE,IAAI,CAIjB,uBAAuB,CACrB,OAAO,CAAE,YAAY,CACrB,YAAY,CAAE,KAAK,CACnB,KAAK,CAAE,IAAI,CACX,cAAc,CAAE,MAAM,CACtB,SAAS,CAAE,GAAG,CAEhB,gBAAgB,CACd,OAAO,CAAE,KAAK,CACd,KAAK,CJxH+B,IAAW,CIyH/C,SAAS,CAAE,GAAG,CACd,UAAU,CAAE,QAAO,CACnB,UAAU,CAAE,MAAM,CAClB,kBAAC,CACC,SAAS,CAAE,OAAO,CAClB,UAAU,CAAE,MAAM,CAClB,aAAa,CAAE,GAAqB,CACtC,6BAAY,CACV,aAAa,CAAE,CAAC,CA4DpB,KAAK,CACH,WAAW,CAAE,MAAM,CAGnB,6DAAmD,CACjD,kBAAkB,CAAE,MAAM,CAC1B,MAAM,CAAE,OAAO,CACf,WAAW,CJhKuB,uDAAM,CIiKxC,SAAS,CAAE,OAAO,CACpB,gSAAqP,CACnP,kBAAkB,CAAE,IAAI,CACxB,OAAO,CAAE,GAAqB,CAC9B,OAAO,CAAE,YAAY,CACrB,MAAM,CAAE,cAA6B,CACrC,SAAS,CAAE,GAAG,CACd,WAAW,CJxKuB,uDAAM,CIyKxC,UAAU,CAAE,oBAAmC,CAC/C,aAAa,CAAE,CAAC,CtBxNZ,kBAAoB,CAAE,kBAAM,CAK5B,eAAiB,CAAE,kBAAM,CAezB,UAAY,CAAE,kBAAM,CsBuM1B,4BAAwB,CACtB,OAAO,CAAE,iBAAkB,CAC7B,eAAW,CACT,MAAM,CAAE,OAAO,CACjB,0CAAmC,CtB/N7B,kBAAoB,CsBgOZ,UAAU,CtB3NlB,eAAiB,CsB2NT,UAAU,CtB5MlB,UAAY,CsB4MJ,UAAU,CACtB,OAAO,CAAE,CAAC,CACV,YAAY,CAAE,QAAO,CACrB,OAAO,CAAE,IAAI,CACb,MAAM,CAAE,IAAI,CACd,oBAAgB,CtBrOV,kBAAoB,CsBsOZ,UAAU,CtBjOlB,eAAiB,CsBiOT,UAAU,CtBlNlB,UAAY,CsBkNJ,UAAU,CACtB,kGAA6D,CAC3D,kBAAkB,CAAE,IAAI,CAC5B,oXAAyU,CACvU,OAAO,CAAE,CAAC,CACV,OAAO,CAAE,cAAc,CACvB,YAAY,CNxLsB,IAAU,CMyL9C,oBAAgB,CACd,YAAY,CAAE,eAA8B,CAC9C,+EAAqE,CACnE,OAAO,CAAE,gBAAsB,CAC/B,OAAO,CAAE,gBAAgB,CAC3B,4aAAiY,CAC/X,MAAM,CAAE,WAAW,CACnB,gBAAgB,CAAE,OAAmC,CAEzD,+DAAiE,CAC/D,KAAK,CNzN+B,OAAI,CM0NxC,MAAM,CAAE,iBAAc,CACxB,iFAAmF,CACjF,YAAY,CN5NwB,OAAI,CM8NxC,yHAA+G,CAC7G,aAAa,CN/NqB,OAAI,CMiO1C,oBAAoB,CAClB,OAAO,CAAE,IAAqB,CAC9B,SAAS,CAAE,IAAI,CAKjB,QAAQ,CACN,QAAQ,CAAE,IAAI,CACd,cAAc,CAAE,GAAG,CACnB,KAAK,CAAE,IAAI,CACX,WAAW,CJ5NyB,uDAAM,CI6N5C,eAAgB,CACd,OAAO,CAAE,aAAgB,CACzB,OAAO,CAAE,YAAY,CACrB,MAAM,CAAE,cAA6B,CACrC,SAAS,CAAE,GAAG,CACd,UAAU,CAAE,oBAAmC,CtBhRzC,kBAAoB,CAAE,kBAAM,CAK5B,eAAiB,CAAE,kBAAM,CAezB,UAAY,CAAE,kBAAM,CsB+P5B,MAAM,CACJ,MAAM,CAAE,cAA6B,CACrC,gBAAgB,CJ1PoB,IAAM,CI2P1C,gBAAW,CACT,MAAM,CAAE,IAAI,CAChB,2BAA4B,CAC1B,OAAO,CAAE,CAAC,CACZ,uFAA2F,CACzF,MAAM,CAAE,WAAW,CACnB,gBAAgB,CAAE,OAAmC,CAKrD,8DAAuD,CACrD,MAAM,CAAE,WAAW,CACvB,sBAAuB,CACrB,MAAM,CAAE,KAAuB,CAE/B,KAAK,CJ/Q+B,OAAW,CIgR/C,OAAO,CAAE,KAAK,CACd,kCAAK,CACH,cAAc,CAAE,QAAQ,CAI5B,uBAAuB,CACrB,OAAO,CAAE,YAAY,CACrB,QAAQ,CAAE,MAAM,CAChB,KAAK,CAAE,CAAC,CACR,cAAc,CAAE,MAAM,CAuBxB,iCAAkC,CAChC,WAAW,CAAE,MAAM,CACnB,OAAO,CAAE,GAAqB,CAC9B,qEAAiB,CACf,WAAW,CAAE,IAAI,CACjB,OAAO,CAAE,KAAK,CACd,OAAO,CAAE,YAAY,CACrB,SAAS,CAAE,GAAG,CACd,gBAAgB,CJzSkB,OAAmB,CI0SrD,MAAM,CAAE,cAA6B,CACrC,KAAK,CJxU6B,IAAW,CI0UjD,kCAAkC,CAChC,WAAW,CAAE,CAAC,CAChB,kCAAkC,CAChC,YAAY,CAAE,CAAC,CAcjB,UAAU,CACR,KAAK,CAAE,IAAuB,CAC9B,MAAM,CAAE,IAAqB,CAC7B,MAAM,CAAE,MAAwB,CAChC,QAAQ,CAAE,QAAQ,CAClB,aAAa,CAAE,GAAG,CAClB,UAAU,CNrW0B,IAAI,CMsWxC,MAAM,CAAE,OAAO,CtB5WT,kBAAoB,CAAE,oBAAM,CAK5B,eAAiB,CAAE,oBAAM,CAezB,UAAY,CAAE,oBAAM,CsB0V1B,iBAAQ,CACN,QAAQ,CAAE,QAAQ,CAClB,OAAO,CAAE,EAAE,CACX,OAAO,CAAE,KAAK,CACd,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,IAAI,CACZ,aAAa,CAAE,GAAG,CAClB,UAAU,CJ3WwB,IAAW,CI4W7C,IAAI,CAAE,IAAI,CACV,GAAG,CAAE,IAAI,CtBvXL,kBAAoB,CAAE,oBAAM,CAK5B,eAAiB,CAAE,oBAAM,CAezB,UAAY,CAAE,oBAAM,CsBqW1B,gBAAO,CACL,OAAO,CAAE,OAAO,CAChB,QAAQ,CAAE,QAAQ,CAClB,IAAI,CAAE,IAAqB,CAC3B,OAAO,CAAE,KAAK,CACd,SAAS,CAAE,IAAI,CACf,KAAK,CNzX6B,IAAI,CM0X1C,iBAAiB,CACf,UAAU,CAAE,OAAmB,CAC/B,wBAAQ,CACN,IAAI,CN5W8B,IAAI,CM6WtC,UAAU,CJlYwB,OAAM,CImY1C,uBAAO,CACL,OAAO,CAAE,MAAM,CAEnB,8CAA+C,CAC7C,MAAM,CAAE,WAAW,CAiDnB,wGAAyB,CACvB,KAAK,CN7Z6B,OAAI,CM+ZtC,81BAAqP,CACnP,MAAM,CAAE,iBAAc,CAC1B,iDAAQ,CACN,MAAM,CAAE,iBAAc,CAE1B,mBAAmB,CACjB,WAAW,CAAE,MAAM,CACnB,qCAAiB,CACf,OAAO,CAAE,aAAgB,CACzB,OAAO,CAAE,YAAY,CACrB,SAAS,CAAE,GAAG,CAClB,gEAAgE,CAC9D,KAAK,CJvc+B,OAAM,CI0c5C,+DAA+D,CAC7D,KAAK,CN/a+B,OAAI,CMkb1C,gEAAgE,CAC9D,KAAK,CNlc+B,OAAO,CMqc7C,6DAA6D,CAC3D,KAAK,CJpb+B,OAAK,CI0b3C,UAAU,CtB3dF,iBAAoB,CAAE,aAAM,CAK5B,cAAiB,CAAE,aAAM,CAKzB,aAAgB,CAAE,aAAM,CAKxB,YAAe,CAAE,aAAM,CAKvB,SAAY,CAAE,aAAM,CsByc5B,WAAW,CtB7dH,iBAAoB,CAAE,cAAM,CAK5B,cAAiB,CAAE,cAAM,CAKzB,aAAgB,CAAE,cAAM,CAKxB,YAAe,CAAE,cAAM,CAKvB,SAAY,CAAE,cAAM,CsB2c5B,WAAW,CtB/dH,iBAAoB,CAAE,cAAM,CAK5B,cAAiB,CAAE,cAAM,CAKzB,aAAgB,CAAE,cAAM,CAKxB,YAAe,CAAE,cAAM,CAKvB,SAAY,CAAE,cAAM,CsB6c5B,OAAO,CtBjeC,iBAAoB,CAAE,UAAM,CAK5B,cAAiB,CAAE,UAAM,CAKzB,aAAgB,CAAE,UAAM,CAKxB,YAAe,CAAE,UAAM,CAKvB,SAAY,CAAE,UAAM,CsB+c1B,iBAAW,CtBneL,iBAAoB,CsBoeL,wBAAwB,CtB/dvC,cAAiB,CsB+dF,wBAAwB,CtB1dvC,aAAgB,CsB0dD,wBAAwB,CtBrdvC,YAAe,CsBqdA,wBAAwB,CtBhdvC,SAAY,CsBgdG,wBAAwB,CAC7C,kBAAY,CtBreN,iBAAoB,CsBseL,yBAAyB,CtBjexC,cAAiB,CsBieF,yBAAyB,CtB5dxC,aAAgB,CsB4dD,yBAAyB,CtBvdxC,YAAe,CsBudA,yBAAyB,CtBldxC,SAAY,CsBkdG,yBAAyB,CAC9C,kBAAY,CtBveN,iBAAoB,CsBweL,yBAAyB,CtBnexC,cAAiB,CsBmeF,yBAAyB,CtB9dxC,aAAgB,CsB8dD,yBAAyB,CtBzdxC,YAAe,CsBydA,yBAAyB,CtBpdxC,SAAY,CsBodG,yBAAyB,CAEhD,yCAAyC,CAErC,8BAAqB,CACnB,MAAM,CAAE,SAAS,CAEjB,8ZAAqP,CACnP,aAAa,CAAE,KAAK,CACpB,OAAO,CAAE,KAAK,CAClB,cAAK,CACH,aAAa,CAAE,KAAK,CACpB,OAAO,CAAE,KAAK,CAEhB,kYAAqO,CACnO,aAAa,CAAE,CAAC,CAElB,wCAAuB,CACrB,aAAa,CAAE,KAAK,CACpB,UAAU,CAAE,IAAI,CAChB,OAAO,CAAE,KAAK,CACd,KAAK,CAAE,IAAI,CACb,4BAAW,CACT,MAAM,CAAE,WAAW,CACvB,iEAAmE,CACjE,OAAO,CAAE,KAAK,CACd,SAAS,CAAE,GAAG,CACd,OAAO,CAAE,KAAuB,EH5ehC,oCAAsB,CQhC1B,YAAY,CAER,OAAO,CAAE,IAAI,ER8Bb,oCAAsB,CQ5B1B,YAAY,CAER,OAAO,CAAE,IAAI,EAEjB,WAAW,CACT,KAAK,CAAE,IAAI,CAEb,YAAY,CACV,KAAK,CAAE,KAAK,CAEd,WAAW,CACT,KAAK,CAAE,IAAI,CC4Cb,mEAAS,CACP,eAAe,CAAE,QAAQ,CACzB,cAAc,CAAE,CAAC,CACjB,WAAW,CAAE,IAAI,CACjB,aAAa,CZ/BuB,IAAI,CYgCxC,2FAAO,CACL,KAAK,CAAE,IAAI,CACX,IAAI,CAAE,6BAAkB,CACxB,OAAO,CAAE,KAAK,CACd,UAAU,CAAE,MAAM,CACpB,yJAAM,CACJ,SAAS,CZjByB,GAAG,CYkBrC,MAAM,CAAE,CAAC,CACT,QAAQ,CAAE,OAAO,CACjB,OAAO,CZnB2B,QAAmC,CYoBvE,iOAA8B,CAC5B,iBAAiB,CAAE,CAAC,CACtB,qFAAK,CACH,KAAK,CAAE,IAAI,CACX,UAAU,CAAE,IAAI,CAChB,cAAc,CAAE,MAAM,CACtB,WAAW,CAAE,MAAM,CACnB,8FAAE,CACA,WAAW,CZnDqB,IAAI,CYoDpC,aAAa,CAAE,iBAA6B,CAChD,4EAAE,CACA,gBAAgB,CAAE,WAAW,CAC7B,cAAc,CAAE,MAAM,CAE1B,kFAAc,CACZ,WAAW,CAAE,IAAuB,CACpC,mHAAY,CACV,aAAa,CAAE,CAAC,CACpB,4HAA4B,CAC1B,KAAK,CAAE,EAAE,CACT,aAAa,CAAE,CAAC,CAChB,uXAA0C,CACxC,MAAM,CAAE,CAAC,CAEb,mBAAmB,CACjB,KAAK,CVjE+B,IAAY,CUkEhD,SAAS,CAAE,GAAG,CAChB,kBAAkB,CAChB,KAAK,CVpE+B,IAAY,CUqEhD,SAAS,CAAE,GAAG,CAIhB,2HAAyD,CACvD,gBAAgB,CV5DoB,OAAmB,CU8DzD,gBAAgB,CACd,gBAAgB,CV/DoB,OAAmB,CUoEzD,kDAAsB,CACpB,MAAM,CAAE,iBAA6B,CACrC,wDAAE,CACA,aAAa,CAAE,iBAA6B,CAC5C,WAAW,CAAE,iBAA6B,CAC5C,gGAAwB,CACtB,mBAAmB,CAAE,CAAC,CAE1B,kBAAkB,CAChB,MAAM,CAAE,iBAA6B,CAGrC,0BAAE,CACA,aAAa,CAAE,iBAA6B,CAC9C,8CAAwB,CACtB,mBAAmB,CAAE,CAAC,CAGxB,2CAAwB,CACtB,mBAAmB,CAAE,CAAC,CACxB,+CAAM,CACJ,YAAY,CAAE,SAAS,CACvB,aAAa,CAAE,iBAA6B,CAC9C,2CAAwB,CACtB,mBAAmB,CAAE,CAAC,CAG1B,oBAAoB,CAClB,aAAa,CZhHuB,IAAI,CYiHxC,SAAS,CAAE,IAAI,CACf,QAAQ,CAAE,IAAI,CACd,0BAAK,CACH,aAAa,CAAE,YAAY,CAC3B,2DAAM,CACJ,WAAW,CAAE,MAAM,CCzIzB,CAAC,CACC,KAAK,CX4B+B,OAAK,CW3BzC,eAAe,CAAE,IAAI,CACrB,MAAM,CAAE,OAAO,CACf,OAAO,CACL,KAAK,CbgD6B,OAAwB,Ca/C5D,SAAS,CACP,KAAK,CXuB6B,OAAO,CWG7C,IAAI,CACF,MAAM,CAAE,IAAI,CACZ,UAAU,CAAE,MAAM,CAEpB,IAAI,CACF,WAAW,CXIyB,uDAAM,CWH1C,WAAW,CAAE,MAAM,CACnB,KAAK,CXrB+B,OAAW,CWsB/C,UAAU,CAAE,IAAI,CAChB,UAAU,CAAE,MAAM,CAClB,UAAU,CbnD0B,OAAO,CaqD7C,aAAa,CACX,UAAU,CAAE,IAAI,CAElB,eAAe,CACb,UAAU,CAAE,MAAM,CAEpB,cAAc,CACZ,UAAU,CAAE,KAAK,CAEnB,cAAc,CACZ,SAAS,CAAE,IAAI,CAEjB,eAAe,CACb,SAAS,CAAE,IAAI,CAEjB,oBAAqB,CACnB,SAAS,CAAE,GAAG,CAEhB,eAAe,CACb,eAAe,CAAE,YAAY,CAE/B,gBAAgB,CACd,KAAK,CAAE,kBAAkB,CAC3B,uBAAuB,CACrB,KAAK,CAAE,kBAAgC,CACzC,aAAa,CACX,KAAK,CAAE,kBAAgB,CACzB,oBAAoB,CAClB,KAAK,CAAE,kBAA8B,CACvC,gBAAgB,CACd,KAAK,CAAE,kBAAiB,CAC1B,uBAAuB,CACrB,KAAK,CAAE,kBAA+B,CACxC,eAAe,CACb,KAAK,CAAE,kBAAe,CACxB,sBAAsB,CACpB,KAAK,CAAE,kBAA6B,CACtC,gBAAgB,CACd,KAAK,CAAE,kBAAsB,CAC/B,uBAAuB,CACrB,KAAK,CAAE,kBAAoC,CAkB7C,gEAAyB,CACvB,UAAU,CAAE,CAAC,CACb,WAAW,CAAE,GAAG,CAChB,WAAW,CX/DyB,0DAAa,CWiEnD,CAAC,CACC,WAAW,Cb1FyB,IAAI,Ca2FxC,MAAM,CAAE,CAAC,CACT,SAAS,Cb/F2B,IAAI,CagGxC,aAAa,Cb7FuB,IAAI,Ca+F1C,EAAE,CACA,SAAS,CAAE,IAAI,CAEjB,0CAAE,CACA,SAAS,CAAE,IAAI,CAEjB,EAAE,CACA,SAAS,CAAE,IAAI,CAEjB,EAAE,CACA,SAAS,CAAE,IAAI,CAEjB,EAAE,CACA,SAAS,CAAE,IAAI,CAEjB,EAAE,CACA,SAAS,CAAE,IAAI,CAEjB,EAAE,CACA,OAAO,CAAE,KAAK,CACd,MAAM,CAAE,GAAG,CACX,MAAM,CAAE,CAAC,CACT,UAAU,CAAE,iBAA6B,CACzC,MAAM,CAAE,MAAmB,CAC3B,OAAO,CAAE,CAAC,CAEZ,sCAAI,CACF,WAAW,CAAE,MAAM,CACnB,SAAS,CAAE,IAAI,CACf,UAAU,CXxH0B,IAAM,CWyH1C,MAAM,CAAE,iBAAiC,CACzC,SAAS,CAAE,GAAG,CACd,OAAO,CAAE,KAAK,CACd,WAAW,CXtGyB,wMAAQ,CWuG5C,KAAK,Cb1H+B,OAAI,Ca2HxC,UAAU,CAAE,IAAI,CAChB,0CAAY,CACV,SAAS,CAAE,GAAG,CAmClB,wFAAmB,CACjB,UAAU,CAAE,IAAI,CAChB,WAAW,CbzKyB,IAAI,Ca0KxC,aAAa,Cb1KuB,IAAI,Ca2KxC,oGAAE,CACA,UAAU,CAAE,IAAI,CAChB,WAAW,Cb7KuB,IAAI,Ca8KtC,wJAAY,CACV,aAAa,CAAE,CAAC,CAClB,gHAAE,CACA,aAAa,CAAE,CAAC,CAClB,gHAAE,CACA,UAAU,CAAE,MAAM,CAClB,4HAAE,CACA,UAAU,CAAE,MAAM,CACtB,4HAAK,CACH,UAAU,CAAE,OAAO,CAEzB,iFAAsB,CACpB,UAAU,CAAE,OAAO,CACnB,WAAW,Cb3LyB,IAAI,Ca4LxC,aAAa,Cb5LuB,IAAI,Ca6LxC,6FAAE,CACA,UAAU,CAAE,OAAO,CACnB,WAAW,Cb/LuB,IAAI,CagMtC,iJAAY,CACV,aAAa,CAAE,CAAC,CAClB,yGAAE,CACA,aAAa,CAAE,CAAC,CAChB,qHAAE,CACA,UAAU,CAAE,IAAI,CCrOxB,kBAAkB,CAChB,MAAM,CAAE,iBAA6B,CACrC,aAAa,CAAE,IAAI,CACnB,OAAO,Cd6B6B,IAAI,Cc5BxC,WAAW,CAAE,IAAqB,CAClC,WAAW,CAAE,GAAG,CAChB,UAAU,CZ8B0B,IAAM,CY7B1C,QAAQ,CAAE,QAAQ,CAClB,wBAAO,CACL,OAAO,CAAE,SAAS,CAClB,QAAQ,CAAE,QAAQ,CAClB,GAAG,CAAE,GAAG,CACR,IAAI,CAAE,GAAG,CACT,UAAU,CZ8BwB,OAAO,CY7BzC,KAAK,CAAE,IAAoB,CAC3B,OAAO,CAAE,QAA2C,CACtD,2CAA0B,CACxB,MAAM,CAAE,iBAA6B,CACrC,aAAa,CdcqB,IAAI,CcZ1C,+GAAmC,CACjC,MAAM,CAAE,iBAA6B,CACrC,OAAO,CAAE,GAAG,CACZ,UAAU,CAAE,IAAI,CAChB,UAAU,CZY0B,IAAM,CYV1C,MAAM,CAAE,YAAyB,CACjC,gLAAuB,CACrB,MAAM,CAAE,IAAI,CACZ,UAAU,CAAE,IAAI,CAChB,MAAM,CAAE,CAAC,CAEb,+BAA+B,CAC7B,KAAK,CAAE,IAAI,CACb,cAAc,CACZ,YAAY,CAAE,iBAA0C,CACxD,MAAM,CAAE,CAAC,CACT,OAAO,CAAE,SAA2C,CACpD,WAAW,CZoByB,wMAAQ,CYnB5C,SAAS,CAAE,IAAI,CACf,WAAW,CAAE,GAAG,CAChB,KAAK,CdI+B,OAAwB,CcH9D,2BAA2B,CACzB,WAAW,CAAE,GAAG,CAChB,MAAM,CAAE,CAAC,CACT,OAAO,CAAE,SAA2C,CACpD,WAAW,CZYyB,wMAAQ,CYX5C,SAAS,CAAE,IAAI,CACf,WAAW,CAAE,GAAG,CAChB,OAAO,CAAE,KAAK,CACd,QAAQ,CAAE,IAAI,CACd,KAAK,CZnB+B,OAAW,CYuBjD,YAAY,CACV,2IAAgE,CAC9D,WAAW,CAAE,QAAQ,ECzDzB,IAAI,CACF,gBAAgB,CAAE,IAAO,CACzB,MAAM,CAAE,OAAO,CACf,OAAO,CAAE,MAAM,CACf,OAAO,CAAE,KAAK,CAChB,EAAE,CACA,KAAK,CAAE,IAAO,CACd,UAAU,CAAE,MAAM,CACpB,IAAI,CACF,KAAK,CAAE,OAAO,CACd,gBAAgB,CAAE,OAAO,CAC3B,EAAE,CACA,WAAW,CAAE,IAAI,CACnB,EAAE,CACA,WAAW,CAAE,IAAI,CACnB,GAAG,CACD,KAAK,CAAE,IAAO,CACd,UAAU,CAAE,MAAM,CACpB,GAAG,CACD,KAAK,CAAE,IAAO,CACd,WAAW,CAAE,IAAI,CACnB,GAAG,CACD,KAAK,CAAE,IAAO,CACd,UAAU,CAAE,MAAM,CACpB,GAAG,CACD,KAAK,CAAE,IAAO,CACd,WAAW,CAAE,IAAI,CACjB,UAAU,CAAE,MAAM,CACpB,GAAG,CACD,KAAK,CAAE,IAAO,CACd,gBAAgB,CAAE,IAAO,CAC3B,MAAM,CACJ,KAAK,CAAE,IAAO,CACd,gBAAgB,CAAE,IAAO,CAC3B,GAAG,CACD,UAAU,CAAE,MAAM,CACpB,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAO,CACd,gBAAgB,CAAE,IAAO,CAC3B,MAAM,CACJ,KAAK,CAAE,IAAO,CACd,gBAAgB,CAAE,IAAO,CAC3B,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,WAAW,CAAE,IAAI,CACnB,GAAG,CACD,KAAK,CAAE,MAAO,CACd,WAAW,CAAE,IAAI,CACnB,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,WAAW,CAAE,IAAI,CACnB,GAAG,CACD,WAAW,CAAE,IAAI,CACnB,GAAG,CACD,WAAW,CAAE,IAAI,CACnB,GAAG,CACD,WAAW,CAAE,IAAI,CACnB,GAAG,CACD,WAAW,CAAE,IAAI,CACnB,GAAG,CACD,KAAK,CAAE,IAAO,CACd,WAAW,CAAE,IAAI,CACnB,EAAE,CACA,KAAK,CAAE,IAAO,CAChB,EAAE,CACA,KAAK,CAAE,IAAO,CAChB,EAAE,CACA,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAI,CACb,GAAG,CACD,KAAK,CAAE,OAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAO,CACd,WAAW,CAAE,IAAI,CACnB,GAAG,CACD,KAAK,CAAE,IAAI,CACb,GAAG,CACD,KAAK,CAAE,MAAM,CACf,GAAG,CACD,KAAK,CAAE,IAAO,CACd,WAAW,CAAE,IAAI,CACnB,GAAG,CACD,KAAK,CAAE,IAAO,CACd,WAAW,CAAE,IAAI,CACnB,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAI,CACb,GAAG,CACD,KAAK,CAAE,IAAI,CACb,GAAG,CACD,WAAW,CAAE,IAAI,CACnB,EAAE,CACA,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,OAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,OAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAI,CACb,GAAG,CACD,KAAK,CAAE,IAAI,CACb,GAAG,CACD,KAAK,CAAE,IAAI,CACb,GAAG,CACD,KAAK,CAAE,IAAO,CAChB,GAAG,CACD,KAAK,CAAE,IAAI,CACX,gBAAgB,CAAE,OAAO,CCjJ3B,kBAAkB,CAChB,OAAO,CAAE,YAAY,CACrB,uCAAsB,CACpB,KAAK,CAAE,KAAK,CACd,oBAAC,CACC,OAAO,CAAE,YAAY,CACrB,OAAO,CAAE,GAAG,CACZ,gCAAa,CACX,YAAY,CAAE,CAAC,CACnB,6FAAI,CACF,OAAO,CAAE,GAAG,CACZ,MAAM,CAAE,IAAI,CACZ,UAAU,CAAE,IAAI,CAChB,qHAAS,CACP,KAAK,CdkB2B,OAAW,CcjBjD,qBAAqB,CACnB,aAAa,CAAE,CAAC,CAChB,KAAK,CdkB+B,OAAW,CcjB/C,SAAS,CAAE,GAAG,CACd,OAAO,CAAE,YAAY,CbanB,oCAAsB,CaTxB,qBAAqB,CACnB,OAAO,CAAE,IAAI,CACf,uCAAuC,CACrC,OAAO,CAAE,IAAI,EAEjB,YAAY,CACV,uCAAuC,CACrC,OAAO,CAAE,IAAI,EC9BjB,SAAS,CACP,QAAQ,CAAE,KAAK,CACf,GAAG,CCAO,OAAO,CDGjB,gBAAO,CACL,eAAe,CAAE,IAAI,CAEzB,cAAc,C/B+FZ,KAAK,CAAE,CAAC,CACR,0CAAS,CAEP,OAAO,CAAE,KAAK,CACd,OAAO,CAAE,EAAE,CACb,oBAAO,CACL,KAAK,CAAE,IAAI,C+BnGb,mCAAM,CACJ,OAAO,CAAE,YAAY,CACvB,uBAAQ,CACN,UAAU,CAAE,qBAAoB,CAEhC,6BAAa,CACX,WAAW,CAAE,iBAAyB,CACxC,8BAAc,CACZ,YAAY,CAAE,iBAAyB,CAC3C,gBAAC,CACC,MAAM,CAAE,IAAmB,CAC3B,OAAO,CAAE,YAAY,CACrB,WAAW,CAAE,IAAmB,CAChC,OAAO,CAAE,MAAiB,CAE9B,iBAAiB,CACf,KAAK,CjBuD+B,KAAK,CiBtDzC,oDAAiB,CACf,MAAM,CAAE,IAAmB,CAC3B,OAAO,CAAE,YAAY,CACrB,WAAW,CAAE,IAAmB,CAChC,OAAO,CAAE,SAAS,CAClB,aAAa,CAAE,CAAC,CAChB,OAAO,CAAE,KAAK,CACd,WAAW,CAAE,IAAI,CACjB,cAAc,CAAE,SAAS,CACzB,SAAS,CAAE,GAAG,CACd,KAAK,CfZ6B,IAAK,CeavC,WAAW,CAAE,MAAM,CAErB,oBAAE,CACA,aAAa,CAAE,CAAC,CAEhB,+BAAY,CACV,UAAU,CAAE,iBAAyB,CACvC,kCAAe,CACb,aAAa,CAAE,iBAAyB,CAC1C,4BAAS,CACP,UAAU,CAAE,OAA4C,CACxD,8BAAC,CACC,KAAK,CfhByB,IAAY,CeiB1C,YAAY,CAAE,iBAAsD,CACpE,OAAO,CAAE,gBAAyB,CAClC,oCAAO,CACL,UAAU,CAAE,OAA4C,CAC9D,mGAAI,CACF,MAAM,CAAE,IAAI,CACZ,UAAU,CAAE,OAAO,CACnB,KAAK,CAAE,OAAO,CACd,YAAY,CAAE,CAAC,CACf,aAAa,CAAE,CAAC,CAElB,wCAAmB,CACjB,OAAO,CAAE,KAAK,CACd,KAAK,CAAE,IAAI,CACX,WAAW,CAAE,MAAM,CAGnB,SAAS,CAAE,KAAI,CACf,WAAW,CAAE,KAAK,CAClB,KAAK,CAAE,OAA8B,CAGzC,wDAAuB,CACrB,KAAK,Cf1C6B,OAAW,Ce2C7C,OAAO,CAAE,gBAAmB,CAC5B,WAAW,CAAE,IAAI,CACjB,QAAQ,CAAE,QAAQ,CAClB,UAAU,CfrCwB,OAAyB,CesC3D,MAAM,CAAE,IAAI,CACZ,aAAa,CAAE,iBAAsD,CACrE,UAAU,CAAE,iBAAsD,CAClE,YAAY,CAAE,YAAY,CAE1B,oEAAO,CACL,UAAU,Cf5CsB,OAAyB,Ce6CzD,4GAAmB,CACjB,KAAK,CfrDyB,IAAY,CesD9C,gGAAmB,CAGjB,OAAO,CAAE,KAAK,CACd,SAAS,CAAE,KAAI,CACf,WAAW,CAAE,KAAK,CAClB,KAAK,CAAE,IAA8B,CAIvC,iHAAI,CACF,OAAO,CAAE,IAAI,CACf,iIAAc,CACZ,OAAO,CAAE,KAAK,CAGd,yCAAG,CACD,UAAU,CAAE,OAA4C,CACxD,OAAO,CAAE,gBAAyB,CACpC,uDAAiB,CACf,OAAO,CAAE,KAAK,CACd,UAAU,CAAE,OAA4C,CACxD,OAAO,CAAE,gBAAyB,CACtC,2DAA2B,CACzB,KAAK,Cf9E2B,IAAY,Ce+E9C,mDAAmB,CACjB,KAAK,CAAE,OAA4C,CACvD,+BAAa,CACX,SAAS,CAAE,KAAI,CAEb,yCAAG,CACD,UAAU,CAAE,OAA4C,CACxD,OAAO,CAAE,gBAAyB,CACpC,uDAAiB,CACf,OAAO,CAAE,KAAK,CACd,UAAU,CAAE,OAA4C,CACxD,OAAO,CAAE,gBAAyB,CAClC,UAAU,CAAE,IAAI,CAChB,aAAa,CAAE,IAAI,CACvB,2DAA2B,CACzB,KAAK,Cf9F2B,IAAY,Ce+F9C,mDAAmB,CACjB,KAAK,CAAE,OAA4C,CACvD,+BAAa,CACX,SAAS,CAAE,KAAI,CAEjB,+BAAa,CACX,OAAO,CAAE,KAAK,CAChB,uBAAK,CACH,aAAa,CAAE,CAAC,CAChB,OAAO,CAAE,IAAI,CAEb,kCAAK,CACH,OAAO,CAAE,KAAK,CAClB,4BAAU,CACR,aAAa,CAAE,CAAC,CAChB,KAAK,Cf7G6B,OAAW,Ce8G7C,WAAW,CAAE,MAAM,CACrB,mBAAC,CACC,OAAO,CAAE,YAAY,CACrB,WAAW,CAAE,IAAI,CACjB,OAAO,CAAE,gBAAmB,CAC5B,OAAO,CAAE,KAAK,CACd,QAAQ,CAAE,QAAQ,CAClB,SAAS,CAAE,GAAG,CACd,KAAK,CftH6B,OAAW,CeuH7C,yBAAO,CACL,gBAAgB,CAAE,OAAoC,CACtD,MAAM,CAAE,OAAO,CACf,6CAAmB,CACjB,KAAK,Cf3HyB,OAAW,Ce4H7C,0BAAQ,CACN,gBAAgB,CftHgB,OAAK,CeuHrC,MAAM,CAAE,OAAO,CACf,KAAK,Cf9H2B,IAAM,Ce+HtC,8CAAmB,CACjB,KAAK,CfhIyB,IAAM,CekI5C,mBAAmB,CACjB,OAAO,CAAE,KAAK,CACd,KAAK,CjBvF+B,KAAK,CiBwFzC,OAAO,CAAE,OAAW,CACpB,aAAa,CAAE,OAAW,CAC1B,OAAO,CjBrF6B,GAAG,CiBsFvC,gBAAgB,CflIoB,OAAK,CemIzC,UAAU,CAAE,MAAM,CAClB,OAAO,CAAE,OAAW,CACpB,OAAO,CAAE,KAAK,CACd,KAAK,CfvI+B,OAAyB,CewI7D,aAAa,CAAE,OAAW,CAC1B,oCAAgB,CACd,KAAK,CAAE,IAAI,CACX,aAAa,CAAE,IAAI,CACnB,OAAO,CAAE,QAAQ,CACjB,YAAY,CAAE,OAAuB,CACvC,uBAAG,CACD,OAAO,CAAE,KAAK,CACd,MAAM,CAAE,sBAA0B,CAClC,MAAM,CAAE,IAAI,CACZ,KAAK,CAAE,IAAI,CACX,gBAAgB,CflJkB,OAAK,CemJvC,OAAO,CAAE,GAAG,CACZ,aAAa,CAAE,IAAI,CACrB,wDAAqB,CACnB,KAAK,CfvJ6B,OAAyB,CewJ3D,SAAS,CAAE,IAAI,CACf,WAAW,CAAE,IAAI,CACjB,OAAO,CAAE,YAAY,CACrB,OAAO,CAAE,OAA2C,CACpD,aAAa,CAAE,OAAW,CAE1B,oEAAO,CACL,UAAU,CAAE,qBAAoB,CAClC,0EAAQ,CACN,OAAO,CAAE,KAAK,CACd,MAAM,CAAE,MAAM,CACd,MAAM,CAAE,IAAI,CACZ,KAAK,CAAE,IAAI,CACX,aAAa,CAAE,CAAC,CAChB,SAAS,CAAE,IAAI,CACf,UAAU,CAAE,WAAa,CAEzB,oFAAQ,CACN,UAAU,CAAE,MAAM,CACxB,+BAAa,CACX,UAAU,CAAE,SAAkB,CAC9B,aAAa,CAAE,OAAW,CAC1B,WAAW,CAAE,MAAM,CACnB,KAAK,CAAE,qBAAoB,CAI7B,gCAAM,CACJ,KAAK,CfnL6B,OAAK,CeoLzC,2BAAC,CACC,KAAK,Cf5L6B,OAAW,Ce6L7C,iCAAO,CACL,gBAAgB,CfvLgB,OAAK,CewLrC,KAAK,Cf9L2B,IAAM,CegM5C,gBAAgB,CjC3NR,kBAAoB,CAAE,gBAAM,CAK5B,eAAiB,CAAE,gBAAM,CAezB,UAAY,CAAE,gBAAM,CiCyM1B,QAAQ,CAAE,QAAQ,CAClB,OAAO,CAAE,CAAC,CACV,KAAK,CAAE,IAAI,CACX,OAAO,CAAE,CAAC,CACV,4BAAa,CACX,IAAI,CAAE,CAAC,CACP,KAAK,CAAE,IAAI,CACX,OAAO,CAAE,CAAC,CACZ,0BAAW,CACT,KAAK,CAAE,IAAI,CACX,IAAI,CAAE,KAAK,CACX,OAAO,CAAE,CAAC,CACZ,2BAAY,CACV,KAAK,CAAE,KAAK,CACZ,IAAI,CAAE,IAAI,CACV,OAAO,CAAE,CAAC,CAGd,gBAAgB,CACd,UAAU,CAAE,qBAAuC,CACnD,gBAAgB,CAAE,2uCAA2uC,CAC7vC,eAAe,CAAE,SAAsB,CAEzC,gBAAgB,CACd,QAAQ,CAAE,QAAQ,CAClB,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,IAAI,CAEd,YAAY,CACV,QAAQ,CAAE,KAAK,CACf,GAAG,CAAE,CAAC,CACN,MAAM,CAAE,CAAC,CACT,IAAI,CAAE,CAAC,CACP,cAAc,CAAE,GAAG,CACnB,KAAK,CjBvL+B,KAAK,CiBwLzC,UAAU,CAAE,MAAM,CAClB,UAAU,CAAE,MAAM,CAClB,UAAU,CAAE,IAAI,CAChB,UAAU,CfrO0B,OAAsB,CesO1D,OAAO,CjBvL6B,GAAG,CiByLzC,eAAe,CACb,KAAK,CAAE,KAAyB,CAChC,QAAQ,CAAE,QAAQ,CAClB,UAAU,CAAE,MAAM,CAClB,UAAU,CAAE,MAAM,CAClB,MAAM,CAAE,IAAI,CAEd,WAAW,CACT,OAAO,CAAE,IAAI,CACb,UAAU,Cf9O0B,OAAK,Ce+OzC,KAAK,CfrP+B,IAAM,CesP1C,OAAO,CAAE,gBAAuB,CAChC,QAAQ,CAAE,QAAQ,CAClB,WAAW,CAAE,IAAI,CACjB,UAAU,CAAE,MAAM,CAClB,SAAS,CAAE,IAAI,C/BvLf,KAAK,CAAE,CAAC,CACR,oCAAS,CAEP,OAAO,CAAE,KAAK,CACd,OAAO,CAAE,EAAE,CACb,iBAAO,CACL,KAAK,CAAE,IAAI,C+BmLb,aAAC,CACC,KAAK,Cf7P6B,IAAM,Ce8PxC,WAAW,CAAE,IAAI,CAEnB,eAAG,CACD,YAAY,CAAE,IAAqB,CACnC,MAAM,CAAE,IAAI,CACZ,KAAK,CAAE,IAAI,CACX,gBAAgB,Cf9PkB,OAAK,Ce+PvC,OAAO,CAAE,GAAG,CACZ,aAAa,CAAE,IAAI,CACrB,aAAC,CACC,SAAS,CAAE,IAAI,CACf,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,OAAO,CAEnB,oBAAoB,CAClB,WAAW,CjBhOyB,KAAK,CiBiOzC,UAAU,CfzQ0B,OAAyB,Ce0Q7D,UAAU,CAAE,IAAI,CAElB,eAAe,CACb,OAAO,CAAE,eAAmB,CAC5B,MAAM,CAAE,IAAI,CACZ,SAAS,CAAE,KAAK,CAChB,MAAM,CAAE,IAAI,CAEd,aAAa,CACX,QAAQ,CAAE,KAAK,CACf,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,IAAI,CACZ,UAAU,CAAE,eAAc,CAC1B,OAAO,CAAE,IAAI,CACb,OAAO,CAAE,GAAkB,CAC3B,gBAAI,CACF,OAAO,CAAE,KAAK,CAClB,MAAM,CACJ,KAAK,CflT+B,IAAW,CemT/C,QAAC,CACC,aAAa,CAAE,IAAqB,CACtC,6FAAgB,CACd,OAAO,CAAE,GAAG,CACZ,WAAW,CfhRuB,wMAAQ,CeiR1C,SAAS,CAAE,GAAG,CACd,UAAU,CAAE,IAAI,CAChB,MAAM,CAAE,IAAI,CACZ,KAAK,Cf3T6B,IAAW,Ce6TjD,mBAAmB,C/BzOjB,KAAK,CAAE,CAAC,CACR,oDAAS,CAEP,OAAO,CAAE,KAAK,CACd,OAAO,CAAE,EAAE,CACb,yBAAO,CACL,KAAK,CAAE,IAAI,C+BuOb,0BAAU,CACR,aAAa,CjBrTqB,IAAI,CiBsTtC,aAAa,CAAE,iBAA6B,CAC5C,cAAc,CjBvToB,IAAI,CiBwTxC,sCAAsB,CACpB,UAAU,CAAE,iBAA6B,CACzC,WAAW,CjB1TuB,IAAI,CiB2TxC,4BAAY,CACV,SAAS,CAAE,IAAI,CACf,aAAa,CAAE,IAAqB,CACpC,OAAO,CAAE,YAAY,CACvB,wBAAQ,CACN,KAAK,Cf9T6B,IAAY,Ce+T9C,SAAS,CAAE,GAAG,CdjUd,oCAAsB,CcqUxB,gBAAgB,CACd,UAAU,Cf7TwB,OAAyB,Ce8T7D,WAAW,CACT,OAAO,CAAE,KAAK,CAChB,YAAY,CAER,IAAI,CAAE,MAAmB,CAG3B,kBAAO,CACL,KAAK,CAAE,GAAG,CACV,IAAI,CAAE,CAAC,CACX,eAAe,CACb,KAAK,CAAE,IAAI,CACb,mBAAmB,CACjB,KAAK,CAAE,IAAI,CACb,yBAAyB,CACvB,KAAK,CAAE,IAAI,CACb,oBAAoB,CAClB,WAAW,CAAE,CAAC,CACd,oCAAe,CACb,OAAO,CCxXD,OAAO,CDyXf,0BAAO,CACL,QAAQ,CAAE,KAAK,CACf,SAAS,CAAE,IAAI,CACf,IAAI,CAAE,GAAG,CACT,GAAG,CAAE,CAAC,CACN,MAAM,CAAE,IAAI,CACZ,QAAQ,CAAE,MAAM,EdjWlB,qCAAsB,CcoWxB,oBAAoB,CAClB,UAAU,CAAE,gBAAe,CAC7B,eAAe,CACb,MAAM,CAAE,CAAC,CACT,UAAU,Cf/VwB,OAAyB,EeiW/D,YAAY,CACV,iCAAmC,CACjC,OAAO,CAAE,IAAI,CACf,oBAAoB,CAClB,WAAW,CAAE,CAAC,EE9YlB,aAAa,CACX,QAAQ,CAAE,KAAK,CACf,MAAM,CAAE,CAAC,CACT,IAAI,CAAE,CAAC,CACP,KAAK,CnB6E+B,KAAK,CmB5EzC,KAAK,CjBoC+B,OAAyB,CiBnC7D,UAAU,CAAE,OAAkC,CAC9C,UAAU,CAAE,kBAAiC,CAC7C,WAAW,CjB+CyB,uDAAM,CiB9C1C,OAAO,CnB+E6B,GAAG,CmB9EvC,eAAC,CACC,KAAK,CjB+B6B,OAAK,CiB9BvC,eAAe,CAAE,IAAI,CACvB,8BAAgB,CACd,OAAO,CAAE,IAAI,CACf,kCAAoB,CAClB,OAAO,CAAE,IAAqB,CAC9B,gBAAgB,CAAE,OAAkC,CACpD,OAAO,CAAE,KAAK,CACd,UAAU,CAAE,KAAK,CACjB,SAAS,CAAE,GAAG,CACd,MAAM,CAAE,OAAO,CACf,KAAK,CjBX6B,OAAM,ChB4F1C,KAAK,CAAE,CAAC,CACR,kFAAS,CAEP,OAAO,CAAE,KAAK,CACd,OAAO,CAAE,EAAE,CACb,wCAAO,CACL,KAAK,CAAE,IAAI,CiCrFX,uqDAAG,CACD,KAAK,CjBgB2B,OAAyB,CiBf3D,yFAAQ,CACN,KAAK,CAAE,IAAI,CACb,6CAAU,CACR,KAAK,CAAE,IAAI,CACb,kDAAiB,CACf,gBAAgB,CnBQgB,OAAI,CmBPpC,KAAK,CjBI2B,IAAM,CiBHxC,yDAAwB,CACtB,gBAAgB,CjBmBgB,OAAO,CiBlBvC,KAAK,CnBzB2B,IAAI,CmB0BxC,0CAA8B,CAC5B,OAAO,CAAE,KAAK,CAChB,iCAAmB,CACjB,SAAS,CAAE,GAAG,CACd,OAAO,CAAE,IAAqB,CAC9B,KAAK,CjBP6B,IAAY,CiBQ9C,OAAO,CAAE,IAAI,CACb,oCAAE,CACA,OAAO,CAAE,KAAK,CACd,MAAM,CAAE,GAAG,CACX,MAAM,CAAE,CAAC,CACT,MAAM,CAAE,MAAM,CACd,OAAO,CAAE,CAAC,CACV,UAAU,CAAE,iBAA6C,CAC3D,oCAAE,CACA,OAAO,CAAE,YAAY,CACrB,MAAM,CAAE,CAAC,CACT,sCAAC,CACC,OAAO,CAAE,YAAY,CACrB,OAAO,CAAE,GAAqB,CAC9B,KAAK,CjBfyB,OAAyB,CiBgB7D,uBAAW,CACT,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,IAAI,CACZ,KAAK,CAAE,IAAI,CACX,IAAI,CAAE,IAAI,CACV,MAAM,CAAE,IAAI,CACZ,SAAS,CnBkByB,KAAK,CmBjBvC,kCAAU,CACR,KAAK,CAAE,IAAI,CACb,mEAAQ,CACN,KAAK,CAAE,IAAI,CACb,qDAA+B,CAC7B,UAAU,CAAE,KAAK,CACjB,+HAAQ,CACN,KAAK,CAAE,IAAI,CACb,gEAAU,CACR,KAAK,CAAE,IAAI,CACf,4CAAoB,CAClB,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,IAAI,CACZ,WAAW,CAAE,IAAI,CACjB,OAAO,CAAE,KAAuB,CAChC,OAAO,CAAE,KAAK,CACd,UAAU,CAAE,MAAM,ChBhDpB,oCAAsB,CgBmDxB,aAAa,CACX,KAAK,CAAE,GAAG,CACV,OAAO,CAAE,IAAI,CACb,mBAAO,CACL,OAAO,CAAE,KAAK,CAClB,GAAG,CACD,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,IAAI,ECzEd,gBAAG,CACD,SAAS,CAAE,IAAI,CACf,MAAM,CAAE,eAAe,CAEzB,uBAAU,CACR,aAAa,CpBUqB,IAAI,CoBTtC,iCAAS,CACP,UAAU,CAAE,MAAM,CAEtB,oCAAuB,CACrB,UAAU,CAAE,MAAM,CAGpB,qDAAoC,CAClC,aAAa,CpBCqB,IAAI,CoBUxC,uBAAU,CACR,WAAW,CpBXuB,IAAI,CoBYtC,WAAW,CpBZuB,IAAI,CoBatC,aAAa,CpBbqB,IAAI,CoBmBtC,kTAAK,CACH,aAAa,CAAE,CAAC,CAKlB,qCAAQ,CACN,YAAY,CAAE,GAAG,CAUrB,8BAAiB,CACf,YAAY,CAAE,eAAc,CAC5B,mEAAM,CACJ,UAAU,CAAE,sBAAsB,CAClC,YAAY,CAAE,0BAAyB,CAG3C,0EAAiD,CAC/C,UAAU,CAAE,WAAW,CACzB,0EAAiD,CAC/C,UAAU,CAAE,WAAW,CAGzB,qDAA4B,CAC1B,aAAa,CAAE,IAAqB,CACtC,wBAAW,CACT,WAAW,CpBpDuB,IAAI,CoBuDxC,yBAAY,CACV,WAAW,CAAE,IAAI,CACjB,aAAa,CAAE,IAAqB,CACtC,yBAAY,CACV,KAAK,ClB3D6B,OAAW,CkB4D/C,yBAAY,CACV,KAAK,CAAE,KAAK,CACZ,MAAM,CAAE,iBAA2C,CACrD,wBAAW,CACT,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,iBAA2C,CACrD,0BAAa,CACX,MAAM,CAAE,IAAI,CACZ,OAAO,CAAE,KAAK,CAMd,6RAAW,CACT,OAAO,CAAE,IAAI,CACb,UAAU,CAAE,MAAM,CAClB,SAAS,CAAE,IAAI,CAEf,mVAAO,CACL,UAAU,CAAE,OAAO,CACnB,OAAO,CAAE,GAAO,CAChB,WAAW,CAAE,WAAW,CACxB,OAAO,CAAE,YAAY,CACzB,mVAAmB,CACjB,OAAO,CAAE,YAAY,CAGzB,qBAAQ,CACN,KAAK,CAAE,KAAK,CACZ,KAAK,CAAE,GAAG,CACV,OAAO,CAAE,KAAK,CACd,MAAM,CAAE,aAAuC,CAC/C,OAAO,CpB7F2B,IAAI,CoB8FtC,UAAU,ClB9EwB,OAAmB,CkB+ErD,MAAM,CAAE,iBAA+B,CAEvC,yEAAS,CACP,SAAS,CAAE,GAAG,CAChB,2BAAK,CACH,aAAa,CAAE,CAAC,CAClB,oCAAc,CACZ,OAAO,CAAE,KAAK,CACd,WAAW,ClB/EqB,0DAAa,CkBgF7C,WAAW,CAAE,IAAI,CACjB,UAAU,ClBvFsB,OAAmB,CkBwFnD,OAAO,CAAE,QAA2C,CACpD,MAAM,CAAE,KAAkB,CAC1B,aAAa,CpB5GmB,IAAI,CoB6GpC,SAAS,CAAE,IAAI,CAEnB,yBAAY,CACV,UAAU,ClB3FwB,OAAO,CkB4FzC,OAAO,CAAE,YAAY,CACrB,WAAW,CAAE,IAAI,CACjB,OAAO,CAAE,KAAuB,CAGlC,iEAAwC,CACtC,cAAc,CAAE,KAAK,CACrB,SAAS,CAAE,GAAG,CAIhB,yEAAgD,CAC9C,UAAU,CAAE,IAAI,CAChB,MAAM,CAAE,IAAI,CACZ,KAAK,ClB5I6B,IAAW,CkB6I7C,+JAAM,CACJ,MAAM,CAAE,IAAI,CACZ,gBAAgB,CAAE,sBAAsB,CACxC,WAAW,CAAE,MAAM,CACrB,2FAAQ,CACN,YAAY,CAAE,CAAC,CACf,aAAa,CAAE,CAAC,CAChB,cAAc,CAAE,GAAG,CACrB,mKAAI,CACF,KAAK,ClBhJ2B,IAAK,CkBuJzC,6BAAgB,CAEd,MAAM,CAAE,IAAI,CACZ,gCAAE,CACA,MAAM,CAAE,IAAI,CACZ,WAAW,CAAE,GAAG,CAClB,uCAAW,CACT,OAAO,CAAE,YAAY,CACrB,UAAU,CAAE,GAAG,CACjB,yCAAW,CACT,aAAa,CAAE,IAAI,CACnB,UAAU,CAAE,IAAI,CAChB,WAAW,CAAE,MAAM,CACrB,yCAAW,CACT,UAAU,CAAE,IAAI,CAChB,YAAY,CAAE,CAAC,CAGnB,iDAAQ,CAEN,KAAK,CpB1L6B,IAAI,CoB2LtC,OAAO,CAAE,OAAO,CAChB,wHAAO,CACL,SAAS,CAAE,eAAe,CAC1B,WAAW,CAAE,MAAM,CAErB,yEAAS,CACP,KAAK,CpBpK2B,OAAI,CoBqKtC,wHAAW,CACT,WAAW,CAAE,IAAI,CACjB,KAAK,ClB9K2B,OAAW,CkBgL/C,uDAAY,CACV,KAAK,ClBvK6B,OAAK,CkBwKzC,eAAE,CACA,aAAa,CpBnLqB,IAAI,CoBoLtC,kBAAE,CACA,WAAW,CAAE,IAAI,CAEnB,6EAAgB,CACd,aAAa,CAAE,eAAgC,CAEjD,kBAAE,CACA,MAAM,CAAE,aAA4C,CAMxD,8BAAiB,CACf,aAAa,CpBlMqB,IAAI,CoBoMtC,iCAAE,CACA,OAAO,CAAE,YAAY,CACrB,MAAM,CAAE,KAAuB,CAC/B,SAAS,CAAE,GAAG,CACd,WAAW,CAAE,MAAM,CACnB,UAAU,CAAE,OAA0B,CACtC,KAAK,ClBhM2B,OAAK,CkBiMrC,UAAU,CAAE,iBAAoC,CAChD,OAAO,CAAE,GAAqB,CAC9B,QAAQ,CAAE,QAAQ,CAClB,wCAAQ,CACN,KAAK,CAAE,OAA0B,CACnC,6CAAW,CACT,KAAK,ClBjNyB,OAAW,CkBkNzC,SAAS,CAAE,eAAe,CAE9B,oCAAK,CACH,aAAa,CAAE,GAAqB,CACpC,MAAM,CAAE,IAAI,CACZ,WAAW,CAAE,cAAuB,CACpC,UAAU,CAAE,OAAa,CACzB,KAAK,ClBhO2B,IAAK,CkBiOrC,gDAAW,CACT,KAAK,ClB3NyB,OAAW,CkB4NzC,SAAS,CAAE,eAAe,CAC9B,6CAAc,CACZ,UAAU,CAAE,CAAC,CAEf,uGAAQ,CACN,WAAW,CAAE,IAAI,CACjB,oRAA2B,CACzB,gBAAgB,CAAE,WAAW,CAC7B,MAAM,CAAE,IAAI,CACZ,OAAO,CAAE,CAAC,CACV,SAAS,CAAE,eAAe,CAC5B,kIAAU,CACR,WAAW,CAAE,IAAI,CAErB,wCAAS,CACP,OAAO,CAAE,YAAY,CACrB,OAAO,CAAE,KAAK,CACd,KAAK,CpBnQ2B,IAAI,CoBoQpC,WAAW,CAAE,IAAI,CACnB,wCAAS,CACP,OAAO,CAAE,YAAY,CACrB,aAAa,CAAE,GAAG,CAEtB,uDAA8B,CAC5B,OAAO,CAAE,YAAY,CACrB,KAAK,ClB1Q6B,OAAM,CkB2QxC,SAAS,CAAE,GAAG,CACd,YAAY,CpBvPsB,IAAI,CoBwPxC,2BAAc,CACZ,OAAO,CAAE,KAAK,CACd,KAAK,CAAE,KAAK,CACd,qBAAQ,CACN,aAAa,CAAE,IAAI,CACnB,WAAW,CAAE,IAAI,CAEnB,mDAAa,CACX,UAAU,CAAE,OAAO,CACnB,OAAO,CAAE,OAAO,CAChB,WAAW,CAAE,OAAO,CACpB,SAAS,CAAE,OAAO,CAClB,KAAK,CAAE,OAAO,CACd,MAAM,CAAE,OAAO,CACf,WAAW,CAAE,OAAO,CAIlB,mGAAQ,CACN,YAAY,CAAE,GAAG,CjB3QrB,oCAAsB,CiBgRtB,qBAAQ,CACN,KAAK,CAAE,IAAI,ECjTjB,wBAAwB,CACtB,KAAK,CnB+B+B,OAAW,CmB7BjD,KAAK,CACH,UAAU,CAAE,MAAM,YCHlB,WAAW,CAAE,aAAa,CAC1B,UAAU,CAAE,MAAM,CAClB,WAAW,CAAE,GAAG,CAChB,GAAG,CAAE,0GAAoB,YAGzB,WAAW,CAAE,aAAa,CAC1B,UAAU,CAAE,MAAM,CAClB,WAAW,CAAE,GAAG,CAChB,GAAG,CAAE,yGAAyB,YAG9B,WAAW,CAAE,MAAM,CACnB,UAAU,CAAE,MAAM,CAClB,WAAW,CAAE,GAAG,CAChB,GAAG,CAAE,6FAAqB,YAG1B,WAAW,CAAE,MAAM,CACnB,UAAU,CAAE,MAAM,CAClB,WAAW,CAAE,GAAG,CAChB,GAAG,CAAE,oFAAkB,YAGvB,WAAW,CAAE,aAAa,CAC1B,UAAU,CAAE,MAAM,CAClB,WAAW,CAAE,GAAG,CAChB,GAAG,CAAE,gHAA4B,YAGjC,WAAW,CAAE,aAAa,CAC1B,UAAU,CAAE,MAAM,CAClB,WAAW,CAAE,GAAG,CAChB,GAAG,CAAE,uGAAyB", +"sources": ["../../../bower_components/neat/app/assets/stylesheets/grid/_grid.scss","../../../bower_components/bourbon/dist/addons/_prefixer.scss","../../../bower_components/wyrm/sass/wyrm_core/_reset.sass","../../../bower_components/wyrm/sass/wyrm_core/_mixin.sass","../../../bower_components/font-awesome/scss/_path.scss","../../../bower_components/font-awesome/scss/_core.scss","../../../bower_components/font-awesome/scss/_larger.scss","../../../bower_components/font-awesome/scss/_fixed-width.scss","../../../bower_components/font-awesome/scss/_list.scss","../../../bower_components/font-awesome/scss/_variables.scss","../../../bower_components/font-awesome/scss/_bordered-pulled.scss","../../../bower_components/font-awesome/scss/_spinning.scss","../../../bower_components/font-awesome/scss/_rotated-flipped.scss","../../../bower_components/font-awesome/scss/_mixins.scss","../../../bower_components/font-awesome/scss/_stacked.scss","../../../bower_components/font-awesome/scss/_icons.scss","../../../bower_components/wyrm/sass/wyrm_core/_font_icon_defaults.sass","../../../bower_components/wyrm/sass/wyrm_core/_wy_variables.sass","../../../bower_components/wyrm/sass/wyrm_core/_alert.sass","../../../sass/_theme_variables.sass","../../../bower_components/neat/app/assets/stylesheets/grid/_media.scss","../../../bower_components/wyrm/sass/wyrm_core/_button.sass","../../../bower_components/wyrm/sass/wyrm_core/_dropdown.sass","../../../bower_components/wyrm/sass/wyrm_core/_form.sass","../../../bower_components/neat/app/assets/stylesheets/grid/_outer-container.scss","../../../bower_components/neat/app/assets/stylesheets/settings/_grid.scss","../../../bower_components/neat/app/assets/stylesheets/grid/_span-columns.scss","../../../bower_components/wyrm/sass/wyrm_core/_neat_extra.sass","../../../bower_components/wyrm/sass/wyrm_core/_generic.sass","../../../bower_components/wyrm/sass/wyrm_core/_table.sass","../../../bower_components/wyrm/sass/wyrm_core/_type.sass","../../../bower_components/wyrm/sass/wyrm_addons/pygments/_pygments.sass","../../../bower_components/wyrm/sass/wyrm_addons/pygments/_pygments_light.sass","../../../sass/_theme_breadcrumbs.sass","../../../sass/_theme_layout.sass","../../../bower_components/neat/app/assets/stylesheets/grid/_private.scss","../../../sass/_theme_badge.sass","../../../sass/_theme_rst.sass","../../../sass/_theme_mathjax.sass","../../../sass/_theme_font_local.sass"], +"names": [], +"file": "theme.css" +} diff --git a/personal/api-docs/_static/doctools.js b/personal/api-docs/_static/doctools.js new file mode 100644 index 0000000..344db17 --- /dev/null +++ b/personal/api-docs/_static/doctools.js @@ -0,0 +1,315 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var bbox = span.getBBox(); + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + var parentOfText = node.parentNode.parentNode; + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { + this.initOnKeyListeners(); + } + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keyup(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/personal/api-docs/_static/documentation_options.js b/personal/api-docs/_static/documentation_options.js new file mode 100644 index 0000000..1adc265 --- /dev/null +++ b/personal/api-docs/_static/documentation_options.js @@ -0,0 +1,10 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '1.1.1555 Personal', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + FILE_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, +}; \ No newline at end of file diff --git a/personal/api-docs/_static/down-pressed.png b/personal/api-docs/_static/down-pressed.png new file mode 100644 index 0000000..5756c8c Binary files /dev/null and b/personal/api-docs/_static/down-pressed.png differ diff --git a/personal/api-docs/_static/down.png b/personal/api-docs/_static/down.png new file mode 100644 index 0000000..1b3bdad Binary files /dev/null and b/personal/api-docs/_static/down.png differ diff --git a/personal/api-docs/_static/favicon.ico b/personal/api-docs/_static/favicon.ico new file mode 100644 index 0000000..e99e1d3 Binary files /dev/null and b/personal/api-docs/_static/favicon.ico differ diff --git a/personal/api-docs/_static/file.png b/personal/api-docs/_static/file.png new file mode 100644 index 0000000..a858a41 Binary files /dev/null and b/personal/api-docs/_static/file.png differ diff --git a/personal/api-docs/_static/fonts/FontAwesome.otf b/personal/api-docs/_static/fonts/FontAwesome.otf new file mode 100644 index 0000000..81c9ad9 Binary files /dev/null and b/personal/api-docs/_static/fonts/FontAwesome.otf differ diff --git a/personal/api-docs/_static/fonts/Inconsolata-Bold.ttf b/personal/api-docs/_static/fonts/Inconsolata-Bold.ttf new file mode 100644 index 0000000..58c9fef Binary files /dev/null and b/personal/api-docs/_static/fonts/Inconsolata-Bold.ttf differ diff --git a/personal/api-docs/_static/fonts/Inconsolata-Regular.ttf b/personal/api-docs/_static/fonts/Inconsolata-Regular.ttf new file mode 100644 index 0000000..a87ffba Binary files /dev/null and b/personal/api-docs/_static/fonts/Inconsolata-Regular.ttf differ diff --git a/personal/api-docs/_static/fonts/Lato-Bold.ttf b/personal/api-docs/_static/fonts/Lato-Bold.ttf new file mode 100644 index 0000000..7434369 Binary files /dev/null and b/personal/api-docs/_static/fonts/Lato-Bold.ttf differ diff --git a/personal/api-docs/_static/fonts/Lato-Regular.ttf b/personal/api-docs/_static/fonts/Lato-Regular.ttf new file mode 100644 index 0000000..04ea8ef Binary files /dev/null and b/personal/api-docs/_static/fonts/Lato-Regular.ttf differ diff --git a/personal/api-docs/_static/fonts/RobotoSlab-Bold.ttf b/personal/api-docs/_static/fonts/RobotoSlab-Bold.ttf new file mode 100644 index 0000000..df5d1df Binary files /dev/null and b/personal/api-docs/_static/fonts/RobotoSlab-Bold.ttf differ diff --git a/personal/api-docs/_static/fonts/RobotoSlab-Regular.ttf b/personal/api-docs/_static/fonts/RobotoSlab-Regular.ttf new file mode 100644 index 0000000..eb52a79 Binary files /dev/null and b/personal/api-docs/_static/fonts/RobotoSlab-Regular.ttf differ diff --git a/personal/api-docs/_static/fonts/fontawesome-webfont.eot b/personal/api-docs/_static/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..84677bc Binary files /dev/null and b/personal/api-docs/_static/fonts/fontawesome-webfont.eot differ diff --git a/personal/api-docs/_static/fonts/fontawesome-webfont.svg b/personal/api-docs/_static/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..d907b25 --- /dev/null +++ b/personal/api-docs/_static/fonts/fontawesome-webfont.svg @@ -0,0 +1,520 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/_static/fonts/fontawesome-webfont.ttf b/personal/api-docs/_static/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..96a3639 Binary files /dev/null and b/personal/api-docs/_static/fonts/fontawesome-webfont.ttf differ diff --git a/personal/api-docs/_static/fonts/fontawesome-webfont.woff b/personal/api-docs/_static/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..628b6a5 Binary files /dev/null and b/personal/api-docs/_static/fonts/fontawesome-webfont.woff differ diff --git a/personal/api-docs/_static/jquery-3.2.1.js b/personal/api-docs/_static/jquery-3.2.1.js new file mode 100644 index 0000000..d2d8ca4 --- /dev/null +++ b/personal/api-docs/_static/jquery-3.2.1.js @@ -0,0 +1,10253 @@ +/*! + * jQuery JavaScript Library v3.2.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2017-03-20T18:59Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + + + + function DOMEval( code, doc ) { + doc = doc || document; + + var script = doc.createElement( "script" ); + + script.text = code; + doc.head.appendChild( script ).parentNode.removeChild( script ); + } +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.2.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); + }, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 13 + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.3 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-08-08 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true && ("form" in elem || "label" in elem); + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + disabledAncestor( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( el ) { + return el.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Simple selector that can be filtered directly, removing non-Elements + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + // Complex selector, compare the two sets, removing non-Elements + qualifier = jQuery.filter( qualifier, elements ); + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; + } ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( nodeName( elem, "iframe" ) ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && jQuery.isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( jQuery.isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ jQuery.camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ jQuery.camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( jQuery.camelCase ); + } else { + key = jQuery.camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + jQuery.contains( elem.ownerDocument, elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); + +var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); +var documentElement = document.documentElement; + + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 only +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: jQuery.isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( ">tbody", elem )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rmargin = ( /^margin/ ); + +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + div.style.cssText = + "box-sizing:border-box;" + + "position:relative;display:block;" + + "margin:auto;border:1px;padding:1px;" + + "top:1%;width:50%"; + div.innerHTML = ""; + documentElement.appendChild( container ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = divStyle.marginLeft === "2px"; + boxSizingReliableVal = divStyle.width === "4px"; + + // Support: Android 4.0 - 4.3 only + // Some styles come back with percentage values, even though they shouldn't + div.style.marginRight = "50%"; + pixelMarginRightVal = divStyle.marginRight === "4px"; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + container.appendChild( div ); + + jQuery.extend( support, { + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelMarginRight: function() { + computeStyleTests(); + return pixelMarginRightVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a property mapped along what jQuery.cssProps suggests or to +// a vendor prefixed property. +function finalPropName( name ) { + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + } + return ret; +} + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i, + val = 0; + + // If we already have the right measurement, avoid augmentation + if ( extra === ( isBorderBox ? "border" : "content" ) ) { + i = 4; + + // Otherwise initialize for horizontal or vertical properties + } else { + i = name === "width" ? 1 : 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with computed style + var valueIsBorderBox, + styles = getStyles( elem ), + val = curCSS( elem, name, styles ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test( val ) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Fall back to offsetWidth/Height when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + if ( val === "auto" ) { + val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ]; + } + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + } ) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = extra && getStyles( elem ), + subtract = extra && augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ); + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ name ] = value; + value = jQuery.css( elem, name ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = jQuery.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 13 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( jQuery.isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + jQuery.proxy( result.stop, result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( type === "string" ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = value.match( rnothtmlwhite ) || []; + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, isFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +} ); + +jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +} ); + + + + +support.focusin = "onfocusin" in window; + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = jQuery.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = jQuery.isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 13 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available, append data to url + if ( s.data ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( jQuery.isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

architecture module

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + +
binaryninja.architecture.Architecture()class Architecture is the parent class for all CPU architectures.
binaryninja.architecture.ArchitectureHook(…)
binaryninja.architecture.CoreArchitecture(handle)
binaryninja.architecture.ReferenceSource(…)
binaryninja.architecture.long([x])long(x, base=10) -> long
binaryninja.architecture.range(*args)A Python2 and Python3 Compatible Range Generator
binaryninja.architecture.with_metaclass(…)Create a base class with a metaclass.
+
+
+
+
+class Architecture[source]
+

Bases: object

+

class Architecture is the parent class for all CPU architectures. Subclasses of Architecture implement assembly, +disassembly, IL lifting, and patching.

+

class Architecture has a metaclass with the additional methods register, and supports +iteration:

+
>>> #List the architectures
+>>> list(Architecture)
+[<arch: aarch64>, <arch: armv7>, <arch: armv7eb>, <arch: mipsel32>, <arch: mips32>, <arch: powerpc>,
+<arch: x86>, <arch: x86_64>]
+>>> #Register a new Architecture
+>>> class MyArch(Architecture):
+...  name = "MyArch"
+...
+>>> MyArch.register()
+>>> list(Architecture)
+[<arch: aarch64>, <arch: armv7>, <arch: armv7eb>, <arch: mipsel32>, <arch: mips32>, <arch: powerpc>,
+<arch: x86>, <arch: x86_64>, <arch: MyArch>]
+>>>
+
+
+

For the purposes of this documentation the variable arch will be used in the following context

+
>>> from binaryninja import *
+>>> arch = Architecture['x86']
+
+
+
+
+always_branch(data, addr)[source]
+

always_branch reads the instruction(s) in data at virtual address addr and returns a string of bytes +of the same length which always branches.

+
+

Note

+

Architecture subclasses should implement this method.

+
+ +++ + + + + + + + + + +
Parameters:
    +
  • data (str) – bytes for the instruction to be converted
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

string containing len(data) which always branches to the same location as the provided instruction

+
Return type:

str

+
Example:
>>> bytes = arch.always_branch(arch.assemble("je 10")[0], 0)
+>>> arch.get_instruction_text(bytes, 0)
+(['nop     '], 1L)
+>>> arch.get_instruction_text(bytes[1:], 0)
+(['jmp     ', '0x9'], 5L)
+>>>
+
+
+
+
+ +
+
+assemble(code, addr=0)[source]
+

assemble converts the string of assembly instructions code loaded at virtual address addr to the +byte representation of those instructions.

+
+

Note

+

Architecture subclasses should implement this method.

+
+

Architecture plugins can override this method to provide assembler functionality. This can be done by +simply shelling out to an assembler like yasm or llvm-mc, since this method isn’t performance sensitive.

+
+

Note

+

It is important that the assembler used accepts a syntax identical to the one emitted by the disassembler. This will prevent confusing the user.

+
+ +++ + + + + + + + + + +
Parameters:
    +
  • code (str) – string representation of the instructions to be assembled
  • +
  • addr (int) – virtual address that the instructions will be loaded at
  • +
+
Returns:

the bytes for the assembled instructions

+
Return type:

Python3 - a ‘bytes’ object; Python2 - a ‘bytes’ object

+
Example:
>>> arch.assemble("je 10")
+'\x0f\x84\x04\x00\x00\x00'
+>>>
+
+
+
+
+ +
+
+convert_to_nop(data, addr)[source]
+

convert_to_nop reads the instruction(s) in data at virtual address addr and returns a string of nop +instructions of the same length as data.

+
+

Note

+

Architecture subclasses should implement this method.

+
+ +++ + + + + + + + + + +
Parameters:
    +
  • data (str) – bytes for the instruction to be converted
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

string containing len(data) worth of no-operation instructions

+
Return type:

str

+
Example:
>>> arch.convert_to_nop("\x00\x00", 0)
+'\x90\x90'
+>>>
+
+
+
+
+ +
+
+get_associated_arch_by_address(addr)[source]
+
+ +
+
+get_default_flag_condition_low_level_il(cond, sem_class, il)[source]
+
+++ + + + + + +
Parameters: +
Return type:

LowLevelILExpr

+
+
+ +
+
+get_default_flag_write_low_level_il(op, size, role, operands, il)[source]
+
+++ + + + + + +
Parameters: +
Return type:

LowLevelILExpr index

+
+
+ +
+
+get_flag_by_name(flag)[source]
+

get_flag_by_name get flag name for flag index.

+ +++ + + + + + + + +
Parameters:flag (int) – flag index
Returns:flag name for flag index
Return type:str
+
+ +
+
+get_flag_condition_low_level_il(cond, sem_class, il)[source]
+
+++ + + + + + +
Parameters:
    +
  • cond (LowLevelILFlagCondition) – Flag condition to be computed
  • +
  • sem_class (str) – Semantic class to be used (None for default semantics)
  • +
  • il (LowLevelILFunction) – LowLevelILFunction object to append LowLevelILExpr objects to
  • +
+
Return type:

LowLevelILExpr

+
+
+ +
+
+get_flag_index(flag)[source]
+
+ +
+
+get_flag_name(flag)[source]
+

get_flag_name gets a flag name from a flag number.

+ +++ + + + + + + + +
Parameters:reg (int) – register number
Returns:the corresponding register string
Return type:str
+
+ +
+
+get_flag_role(flag, sem_class=None)[source]
+

get_flag_role gets the role of a given flag.

+ +++ + + + + + + + +
Parameters:
    +
  • flag (int) – flag
  • +
  • sem_class (int) – optional semantic flag class
  • +
+
Returns:

flag role

+
Return type:

FlagRole

+
+
+ +
+
+get_flag_write_low_level_il(op, size, write_type, flag, operands, il)[source]
+
+++ + + + + + +
Parameters: +
Return type:

LowLevelILExpr

+
+
+ +
+
+get_flag_write_type_by_name(write_type)[source]
+

get_flag_write_type_by_name gets the flag write type name for the flag write type.

+ +++ + + + + + + + +
Parameters:write_type (int) – flag write type
Returns:flag write type
Return type:str
+
+ +
+
+get_flag_write_type_name(write_type)[source]
+

get_flag_write_type_name gets the flag write type name for the given flag.

+ +++ + + + + + + + +
Parameters:write_type (int) – flag
Returns:flag write type name
Return type:str
+
+ +
+
+get_flags_required_for_flag_condition(cond, sem_class=None)[source]
+
+ +
+
+get_instruction_info(data, addr)[source]
+

get_instruction_info returns an InstructionInfo object for the instruction at the given virtual address +addr with data data.

+
+

Note

+

Architecture subclasses should implement this method.

+
+
+

Note

+

The instruction info object should always set the InstructionInfo.length to the instruction length, and the branches of the proper types should be added if the instruction is a branch.

+
+

If the instruction is a branch instruction architecture plugins should add a branch of the proper type:

+
+
++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BranchTypeDescription
UnconditionalBranchBranch will always be taken
FalseBranchFalse branch condition
TrueBranchTrue branch condition
CallDestinationBranch is a call instruction (Branch with Link)
FunctionReturnBranch returns from a function
SystemCallSystem call instruction
IndirectBranchBranch destination is a memory address or register
UnresolvedBranchBranch destination is an unknown address
+
+ +++ + + + + + + + +
Parameters:
    +
  • data (str) – max_instruction_length bytes from the binary at virtual address addr
  • +
  • addr (int) – virtual address of bytes in data
  • +
+
Returns:

the InstructionInfo for the current instruction

+
Return type:

InstructionInfo

+
+
+ +
+
+get_instruction_low_level_il(data, addr, il)[source]
+

get_instruction_low_level_il appends LowLevelILExpr objects to il for the instruction at the given +virtual address addr with data data.

+

This is used to analyze arbitrary data at an address, if you are working with an existing binary, you likely +want to be using Function.get_low_level_il_at.

+
+

Note

+

Architecture subclasses should implement this method.

+
+ +++ + + + + + + + +
Parameters:
    +
  • data (str) – max_instruction_length bytes from the binary at virtual address addr
  • +
  • addr (int) – virtual address of bytes in data
  • +
  • il (LowLevelILFunction) – The function the current instruction belongs to
  • +
+
Returns:

the length of the current instruction

+
Return type:

int

+
+
+ +
+
+get_instruction_low_level_il_instruction(bv, addr)[source]
+
+ +
+
+get_instruction_text(data, addr)[source]
+

get_instruction_text returns a list of InstructionTextToken objects for the instruction at the given virtual +address addr with data data.

+
+

Note

+

Architecture subclasses should implement this method.

+
+ +++ + + + + + + + +
Parameters:
    +
  • data (str) – max_instruction_length bytes from the binary at virtual address addr
  • +
  • addr (int) – virtual address of bytes in data
  • +
+
Returns:

an InstructionTextToken list for the current instruction

+
Return type:

list(InstructionTextToken)

+
+
+ +
+
+get_intrinsic_index(intrinsic)[source]
+
+ +
+
+get_intrinsic_name(intrinsic)[source]
+

get_intrinsic_name gets an intrinsic name from an intrinsic number.

+ +++ + + + + + + + +
Parameters:intrinsic (int) – intrinsic number
Returns:the corresponding intrinsic string
Return type:str
+
+ +
+
+get_low_level_il_from_bytes(data, addr)[source]
+

get_low_level_il_from_bytes converts the instruction in bytes to il at the given virtual address

+ +++ + + + + + + + + + +
Parameters:
    +
  • data (str) – the bytes of the instruction
  • +
  • addr (int) – virtual address of bytes in data
  • +
+
Returns:

the instruction

+
Return type:

LowLevelILInstruction

+
Example:
>>> arch.get_low_level_il_from_bytes('ëþ', 0x40DEAD)
+<il: jump(0x40dead)>
+>>>
+
+
+
+
+ +
+
+get_modified_regs_on_write(reg)[source]
+

get_modified_regs_on_write returns a list of register names that are modified when reg is written.

+ +++ + + + + + + + +
Parameters:reg (str) – string register name
Returns:list of register names
Return type:list(str)
+
+ +
+
+get_reg_index(reg)[source]
+
+ +
+
+get_reg_name(reg)[source]
+

get_reg_name gets a register name from a register number.

+ +++ + + + + + + + +
Parameters:reg (int) – register number
Returns:the corresponding register string
Return type:str
+
+ +
+
+get_reg_stack_for_reg(reg)[source]
+
+ +
+
+get_reg_stack_index(reg_stack)[source]
+
+ +
+
+get_reg_stack_name(reg_stack)[source]
+

get_reg_stack_name gets a register stack name from a register stack number.

+ +++ + + + + + + + +
Parameters:reg_stack (int) – register stack number
Returns:the corresponding register string
Return type:str
+
+ +
+
+get_semantic_flag_class_by_name(sem_class)[source]
+

get_semantic_flag_class_by_name gets the semantic flag class index by name.

+ +++ + + + + + + + +
Parameters:sem_class (int) – semantic flag class
Returns:semantic flag class index
Return type:str
+
+ +
+
+get_semantic_flag_class_index(sem_class)[source]
+
+ +
+
+get_semantic_flag_class_name(class_index)[source]
+

get_semantic_flag_class_name gets the name of a semantic flag class from the index.

+ +++ + + + + + + + +
Parameters:_index (int) – class_index
Returns:the name of the semantic flag class
Return type:str
+
+ +
+
+get_semantic_flag_group_by_name(sem_group)[source]
+

get_semantic_flag_group_by_name gets the semantic flag group index by name.

+ +++ + + + + + + + +
Parameters:sem_group (int) – semantic flag group
Returns:semantic flag group index
Return type:str
+
+ +
+
+get_semantic_flag_group_index(sem_group)[source]
+
+ +
+
+get_semantic_flag_group_low_level_il(sem_group, il)[source]
+
+++ + + + + + +
Parameters: +
Return type:

LowLevelILExpr

+
+
+ +
+
+get_semantic_flag_group_name(group_index)[source]
+

get_semantic_flag_group_name gets the name of a semantic flag group from the index.

+ +++ + + + + + + + +
Parameters:group_index (int) – group_index
Returns:the name of the semantic flag group
Return type:str
+
+ +
+
+get_view_type_constant(type_name, const_name, default_value=0)[source]
+

get_view_type_constant retrieves the view type constant for the given type_name and const_name.

+ +++ + + + + + + + + + +
Parameters:
    +
  • type_name (str) – the BinaryView type name of the constant to be retrieved
  • +
  • const_name (str) – the constant name to retrieved
  • +
  • value (int) – optional default value if the type_name is not present. default value is zero.
  • +
+
Returns:

The BinaryView type constant or the default_value if not found

+
Return type:

int

+
Example:
>>> ELF_RELOC_COPY = 5
+>>> arch.set_view_type_constant("ELF", "R_COPY", ELF_RELOC_COPY)
+>>> arch.get_view_type_constant("ELF", "R_COPY")
+5L
+>>> arch.get_view_type_constant("ELF", "NOT_HERE", 100)
+100L
+
+
+
+
+ +
+
+invert_branch(data, addr)[source]
+

invert_branch reads the instruction(s) in data at virtual address addr and returns a string of bytes +of the same length which inverts the branch of provided instruction.

+
+

Note

+

Architecture subclasses should implement this method.

+
+ +++ + + + + + + + + + +
Parameters:
    +
  • data (str) – bytes for the instruction to be converted
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

string containing len(data) which always branches to the same location as the provided instruction

+
Return type:

str

+
Example:
>>> arch.get_instruction_text(arch.invert_branch(arch.assemble("je 10")[0], 0), 0)
+(['jne     ', '0xa'], 6L)
+>>> arch.get_instruction_text(arch.invert_branch(arch.assemble("jo 10")[0], 0), 0)
+(['jno     ', '0xa'], 6L)
+>>> arch.get_instruction_text(arch.invert_branch(arch.assemble("jge 10")[0], 0), 0)
+(['jl      ', '0xa'], 6L)
+>>>
+
+
+
+
+ +
+
+is_always_branch_patch_available(data, addr)[source]
+

is_always_branch_patch_available determines if the instruction data at addr can be made to +always branch.

+
+

Note

+

Architecture subclasses should implement this method.

+
+ +++ + + + + + + + + + +
Parameters:
    +
  • data (str) – bytes for the instruction to be checked
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

True if the instruction can be patched, False otherwise

+
Return type:

bool

+
Example:
>>> arch.is_always_branch_patch_available(arch.assemble("je 10")[0], 0)
+True
+>>> arch.is_always_branch_patch_available(arch.assemble("nop")[0], 0)
+False
+>>>
+
+
+
+
+ +
+
+is_invert_branch_patch_available(data, addr)[source]
+

is_always_branch_patch_available determines if the instruction data at addr can be inverted.

+
+

Note

+

Architecture subclasses should implement this method.

+
+ +++ + + + + + + + + + +
Parameters:
    +
  • data (str) – bytes for the instruction to be checked
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

True if the instruction can be patched, False otherwise

+
Return type:

bool

+
Example:
>>> arch.is_invert_branch_patch_available(arch.assemble("je 10")[0], 0)
+True
+>>> arch.is_invert_branch_patch_available(arch.assemble("nop")[0], 0)
+False
+>>>
+
+
+
+
+ +
+
+is_never_branch_patch_available(data, addr)[source]
+

is_never_branch_patch_available determines if the instruction data at addr can be made to never branch.

+
+

Note

+

Architecture subclasses should implement this method.

+
+ +++ + + + + + + + + + +
Parameters:
    +
  • data (str) – bytes for the instruction to be checked
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

True if the instruction can be patched, False otherwise

+
Return type:

bool

+
Example:
>>> arch.is_never_branch_patch_available(arch.assemble("je 10")[0], 0)
+True
+>>> arch.is_never_branch_patch_available(arch.assemble("nop")[0], 0)
+False
+>>>
+
+
+
+
+ +
+
+is_skip_and_return_value_patch_available(data, addr)[source]
+

is_skip_and_return_value_patch_available determines if the instruction data at addr is a call-like +instruction that can be made into an instruction returns a value.

+
+

Note

+

Architecture subclasses should implement this method.

+
+ +++ + + + + + + + + + +
Parameters:
    +
  • data (str) – bytes for the instruction to be checked
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

True if the instruction can be patched, False otherwise

+
Return type:

bool

+
Example:
>>> arch.is_skip_and_return_value_patch_available(arch.assemble("call 0")[0], 0)
+True
+>>> arch.is_skip_and_return_value_patch_available(arch.assemble("jmp eax")[0], 0)
+False
+>>>
+
+
+
+
+ +
+
+is_skip_and_return_zero_patch_available(data, addr)[source]
+

is_skip_and_return_zero_patch_available determines if the instruction data at addr is a call-like +instruction that can be made into an instruction returns zero.

+
+

Note

+

Architecture subclasses should implement this method.

+
+ +++ + + + + + + + + + +
Parameters:
    +
  • data (str) – bytes for the instruction to be checked
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

True if the instruction can be patched, False otherwise

+
Return type:

bool

+
Example:
>>> arch.is_skip_and_return_zero_patch_available(arch.assemble("call 0")[0], 0)
+True
+>>> arch.is_skip_and_return_zero_patch_available(arch.assemble("call eax")[0], 0)
+True
+>>> arch.is_skip_and_return_zero_patch_available(arch.assemble("jmp eax")[0], 0)
+False
+>>>
+
+
+
+
+ +
+
+is_view_type_constant_defined(type_name, const_name)[source]
+
+++ + + + + + + + +
Parameters:
    +
  • type_name (str) – the BinaryView type name of the constant to query
  • +
  • const_name (str) – the constant name to query
  • +
+
Return type:

None

+
Example:
>>> arch.set_view_type_constant("ELF", "R_COPY", ELF_RELOC_COPY)
+>>> arch.is_view_type_constant_defined("ELF", "R_COPY")
+True
+>>> arch.is_view_type_constant_defined("ELF", "NOT_THERE")
+False
+>>>
+
+
+
+
+ +
+
+perform_always_branch(data, addr)[source]
+

Deprecated method provided for compatibility. Architecture plugins should override always_branch.

+ +++ + + + + + + + +
Parameters:
    +
  • data (str) – bytes to be checked
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

The bytes of the replacement unconditional branch instruction

+
Return type:

str

+
+
+ +
+
+perform_assemble(code, addr)[source]
+

Deprecated method provided for compatibility. Architecture plugins should override assemble.

+ +++ + + + + + + + +
Parameters:
    +
  • code (str) – string representation of the instructions to be assembled
  • +
  • addr (int) – virtual address that the instructions will be loaded at
  • +
+
Returns:

the bytes for the assembled instructions or error string

+
Return type:

(a tuple of instructions and empty string) or (or None and error string)

+
+
+ +
+
+perform_convert_to_nop(data, addr)[source]
+

Deprecated method provided for compatibility. Architecture plugins should override convert_to_nop.

+ +++ + + + + + + + +
Parameters:
    +
  • data (str) – bytes at virtual address addr
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

nop sequence of same length as data or None

+
Return type:

str or None

+
+
+ +
+
+perform_get_associated_arch_by_address(addr)[source]
+

Deprecated method provided for compatibility. Architecture plugins should override get_associated_arch_by_address.

+
+ +
+
+perform_get_flag_condition_low_level_il(cond, sem_class, il)[source]
+

Deprecated method provided for compatibility. Architecture plugins should override get_flag_condition_low_level_il.

+ +++ + + + + + +
Parameters:
    +
  • cond (LowLevelILFlagCondition) – Flag condition to be computed
  • +
  • sem_class (str) – Semantic class to be used (None for default semantics)
  • +
  • il (LowLevelILFunction) – LowLevelILFunction object to append LowLevelILExpr objects to
  • +
+
Return type:

LowLevelILExpr

+
+
+ +
+
+perform_get_flag_role(flag, sem_class)[source]
+

Deprecated method provided for compatibility. Architecture plugins should override get_flag_role.

+
+ +
+
+perform_get_flag_write_low_level_il(op, size, write_type, flag, operands, il)[source]
+

Deprecated method provided for compatibility. Architecture plugins should override get_flag_write_low_level_il.

+ +++ + + + + + +
Parameters: +
Return type:

LowLevelILExpr

+
+
+ +
+
+perform_get_flags_required_for_flag_condition(cond, sem_class)[source]
+

Deprecated method provided for compatibility. Architecture plugins should override get_flags_required_for_flag_condition.

+
+ +
+
+perform_get_instruction_info(data, addr)[source]
+

Deprecated method provided for compatibility. Architecture plugins should override get_instruction_info.

+ +++ + + + + + + + +
Parameters:
    +
  • data (str) – bytes to decode
  • +
  • addr (int) – virtual address of the byte to be decoded
  • +
+
Returns:

a InstructionInfo object containing the length and branch types for the given instruction

+
Return type:

InstructionInfo

+
+
+ +
+
+perform_get_instruction_low_level_il(data, addr, il)[source]
+

Deprecated method provided for compatibility. Architecture plugins should override get_instruction_low_level_il.

+ +++ + + + + + +
Parameters:
    +
  • data (str) – bytes to be interpreted as low-level IL instructions
  • +
  • addr (int) – virtual address of start of data
  • +
  • il (LowLevelILFunction) – LowLevelILFunction object to append LowLevelILExpr objects to
  • +
+
Return type:

length of bytes read on success, None on failure

+
+
+ +
+
+perform_get_instruction_text(data, addr)[source]
+

Deprecated method provided for compatibility. Architecture plugins should override get_instruction_text.

+ +++ + + + + + + + +
Parameters:
    +
  • data (str) – bytes to decode
  • +
  • addr (int) – virtual address of the byte to be decoded
  • +
+
Returns:

a tuple of list(InstructionTextToken) and length of instruction decoded

+
Return type:

tuple(list(InstructionTextToken), int)

+
+
+ +
+
+perform_get_semantic_flag_group_low_level_il(sem_group, il)[source]
+

Deprecated method provided for compatibility. Architecture plugins should override get_semantic_flag_group_low_level_il.

+ +++ + + + + + +
Parameters:
    +
  • sem_group (str) – Semantic group to be computed
  • +
  • il (LowLevelILFunction) – LowLevelILFunction object to append LowLevelILExpr objects to
  • +
+
Return type:

LowLevelILExpr

+
+
+ +
+
+perform_invert_branch(data, addr)[source]
+

Deprecated method provided for compatibility. Architecture plugins should override invert_branch.

+ +++ + + + + + + + +
Parameters:
    +
  • data (str) – bytes to be checked
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

The bytes of the replacement unconditional branch instruction

+
Return type:

str

+
+
+ +
+
+perform_is_always_branch_patch_available(data, addr)[source]
+

Deprecated method provided for compatibility. Architecture plugins should override is_always_branch_patch_available.

+ +++ + + + + + + + +
Parameters:
    +
  • data (str) – bytes to be checked
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

True if the instruction can be patched, False otherwise

+
Return type:

bool

+
+
+ +
+
+perform_is_invert_branch_patch_available(data, addr)[source]
+

Deprecated method provided for compatibility. Architecture plugins should override is_invert_branch_patch_available.

+ +++ + + + + + + + +
Parameters:addr (int) – the virtual address of the instruction to be patched
Returns:True if the instruction can be patched, False otherwise
Return type:bool
+
+ +
+
+perform_is_never_branch_patch_available(data, addr)[source]
+

Deprecated method provided for compatibility. Architecture plugins should override is_never_branch_patch_available.

+
+

Note

+

Architecture subclasses should implement this method.

+
+
+

Warning

+

This method should never be called directly.

+
+ +++ + + + + + + + +
Parameters:
    +
  • data (str) – bytes to be checked
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

True if the instruction can be patched, False otherwise

+
Return type:

bool

+
+
+ +
+
+perform_is_skip_and_return_value_patch_available(data, addr)[source]
+

Deprecated method provided for compatibility. Architecture plugins should override is_skip_and_return_value_patch_available.

+ +++ + + + + + + + +
Parameters:
    +
  • data (str) – bytes to be checked
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

True if the instruction can be patched, False otherwise

+
Return type:

bool

+
+
+ +
+
+perform_is_skip_and_return_zero_patch_available(data, addr)[source]
+

Deprecated method provided for compatibility. Architecture plugins should override is_skip_and_return_zero_patch_available.

+ +++ + + + + + + + +
Parameters:
    +
  • data (str) – bytes to be checked
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

True if the instruction can be patched, False otherwise

+
Return type:

bool

+
+
+ +
+
+perform_skip_and_return_value(data, addr, value)[source]
+

Deprecated method provided for compatibility. Architecture plugins should override skip_and_return_value.

+ +++ + + + + + + + +
Parameters:
    +
  • data (str) – bytes to be checked
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
  • value (int) – value to be returned
  • +
+
Returns:

The bytes of the replacement unconditional branch instruction

+
Return type:

str

+
+
+ +
+
+register_calling_convention(cc)[source]
+

register_calling_convention registers a new calling convention for the Architecture.

+ +++ + + + + + +
Parameters:cc (CallingConvention) – CallingConvention object to be registered
Return type:None
+
+ +
+
+set_view_type_constant(type_name, const_name, value)[source]
+

set_view_type_constant creates a new binaryview type constant.

+ +++ + + + + + + + +
Parameters:
    +
  • type_name (str) – the BinaryView type name of the constant to be registered
  • +
  • const_name (str) – the constant name to register
  • +
  • value (int) – the value of the constant
  • +
+
Return type:

None

+
Example:
>>> ELF_RELOC_COPY = 5
+>>> arch.set_view_type_constant("ELF", "R_COPY", ELF_RELOC_COPY)
+>>>
+
+
+
+
+ +
+
+skip_and_return_value(data, addr, value)[source]
+

skip_and_return_value reads the instruction(s) in data at virtual address addr and returns a string of +bytes of the same length which doesn’t call and instead return a value.

+
+

Note

+

Architecture subclasses should implement this method.

+
+ +++ + + + + + + + + + +
Parameters:
    +
  • data (str) – bytes for the instruction to be converted
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

string containing len(data) which always branches to the same location as the provided instruction

+
Return type:

str

+
Example:
>>> arch.get_instruction_text(arch.skip_and_return_value(arch.assemble("call 10")[0], 0, 0), 0)
+(['mov     ', 'eax', ', ', '0x0'], 5L)
+>>>
+
+
+
+
+ +
+
+address_size = 8
+
+ +
+
+calling_conventions
+

Dict of CallingConvention objects (read-only)

+
+ +
+
+default_int_size = 4
+
+ +
+
+endianness = <Endianness.LittleEndian: 0>
+
+ +
+
+flag_conditions_for_semantic_flag_group = {}
+
+ +
+
+flag_roles = {}
+
+ +
+
+flag_write_types = []
+
+ +
+
+flags = []
+
+ +
+
+flags_required_for_flag_condition = {}
+
+ +
+
+flags_required_for_semantic_flag_group = {}
+
+ +
+
+flags_written_by_flag_write_type = {}
+
+ +
+
+full_width_regs
+

List of full width register strings (read-only)

+
+ +
+
+global_regs = []
+
+ +
+
+instr_alignment = 1
+
+ +
+
+intrinsics = {}
+
+ +
+ +
+ +
+
+list = []
+
+ +
+
+max_instr_length = 16
+
+ +
+
+name = None
+
+ +
+
+next_address = 0
+
+ +
+
+opcode_display_length = 8
+
+ +
+
+reg_stacks = {}
+
+ +
+
+regs = {}
+
+ +
+
+semantic_class_for_flag_write_type = {}
+
+ +
+
+semantic_flag_classes = []
+
+ +
+
+semantic_flag_groups = []
+
+ +
+
+stack_pointer = None
+
+ +
+
+standalone_platform
+

Architecture standalone platform (read-only)

+
+ +
+ +
+
+class ArchitectureHook(base_arch)[source]
+

Bases: binaryninja.architecture.CoreArchitecture

+
+
+register()[source]
+
+ +
+ +
+
+class CoreArchitecture(handle)[source]
+

Bases: binaryninja.architecture.Architecture

+
+
+always_branch(data, addr)[source]
+

always_branch reads the instruction(s) in data at virtual address addr and returns a string of bytes +of the same length which always branches.

+ +++ + + + + + + + + + +
Parameters:
    +
  • data (str) – bytes for the instruction to be converted
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

string containing len(data) which always branches to the same location as the provided instruction

+
Return type:

str

+
Example:
>>> bytes = arch.always_branch(arch.assemble("je 10")[0], 0)
+>>> arch.get_instruction_text(bytes, 0)
+(['nop     '], 1L)
+>>> arch.get_instruction_text(bytes[1:], 0)
+(['jmp     ', '0x9'], 5L)
+>>>
+
+
+
+
+ +
+
+assemble(code, addr=0)[source]
+

assemble converts the string of assembly instructions code loaded at virtual address addr to the +byte representation of those instructions.

+ +++ + + + + + + + + + +
Parameters:
    +
  • code (str) – string representation of the instructions to be assembled
  • +
  • addr (int) – virtual address that the instructions will be loaded at
  • +
+
Returns:

the bytes for the assembled instructions

+
Return type:

Python3 - a ‘bytes’ object; Python2 - a ‘bytes’ object

+
Example:
>>> arch.assemble("je 10")
+'\x0f\x84\x04\x00\x00\x00'
+>>>
+
+
+
+
+ +
+
+convert_to_nop(data, addr)[source]
+

convert_to_nop reads the instruction(s) in data at virtual address addr and returns a string of nop +instructions of the same length as data.

+ +++ + + + + + + + + + +
Parameters:
    +
  • data (str) – bytes for the instruction to be converted
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

string containing len(data) worth of no-operation instructions

+
Return type:

str

+
Example:
>>> arch.convert_to_nop("\x00\x00", 0)
+'\x90\x90'
+>>>
+
+
+
+
+ +
+
+get_associated_arch_by_address(addr)[source]
+
+ +
+
+get_flag_condition_low_level_il(cond, sem_class, il)[source]
+
+++ + + + + + +
Parameters:
    +
  • cond (LowLevelILFlagCondition) – Flag condition to be computed
  • +
  • sem_class (str) – Semantic class to be used (None for default semantics)
  • +
  • il (LowLevelILFunction) – LowLevelILFunction object to append LowLevelILExpr objects to
  • +
+
Return type:

LowLevelILExpr

+
+
+ +
+
+get_flag_role(flag, sem_class=None)[source]
+

get_flag_role gets the role of a given flag.

+ +++ + + + + + + + +
Parameters:
    +
  • flag (int) – flag
  • +
  • sem_class (int) – optional semantic flag class
  • +
+
Returns:

flag role

+
Return type:

FlagRole

+
+
+ +
+
+get_flag_write_low_level_il(op, size, write_type, flag, operands, il)[source]
+
+++ + + + + + +
Parameters: +
Return type:

LowLevelILExpr

+
+
+ +
+
+get_flags_required_for_flag_condition(cond, sem_class=None)[source]
+
+ +
+
+get_instruction_info(data, addr)[source]
+

get_instruction_info returns an InstructionInfo object for the instruction at the given virtual address +addr with data data.

+
+

Note

+

The instruction info object should always set the InstructionInfo.length to the instruction length, and the branches of the proper types should be added if the instruction is a branch.

+
+ +++ + + + + + + + +
Parameters:
    +
  • data (str) – max_instruction_length bytes from the binary at virtual address addr
  • +
  • addr (int) – virtual address of bytes in data
  • +
+
Returns:

the InstructionInfo for the current instruction

+
Return type:

InstructionInfo

+
+
+ +
+
+get_instruction_low_level_il(data, addr, il)[source]
+

get_instruction_low_level_il appends LowLevelILExpr objects to il for the instruction at the given +virtual address addr with data data.

+

This is used to analyze arbitrary data at an address, if you are working with an existing binary, you likely +want to be using Function.get_low_level_il_at.

+ +++ + + + + + + + +
Parameters:
    +
  • data (str) – max_instruction_length bytes from the binary at virtual address addr
  • +
  • addr (int) – virtual address of bytes in data
  • +
  • il (LowLevelILFunction) – The function the current instruction belongs to
  • +
+
Returns:

the length of the current instruction

+
Return type:

int

+
+
+ +
+
+get_instruction_text(data, addr)[source]
+

get_instruction_text returns a list of InstructionTextToken objects for the instruction at the given virtual +address addr with data data.

+ +++ + + + + + + + +
Parameters:
    +
  • data (str) – max_instruction_length bytes from the binary at virtual address addr
  • +
  • addr (int) – virtual address of bytes in data
  • +
+
Returns:

an InstructionTextToken list for the current instruction

+
Return type:

list(InstructionTextToken)

+
+
+ +
+
+get_semantic_flag_group_low_level_il(sem_group, il)[source]
+
+++ + + + + + +
Parameters: +
Return type:

LowLevelILExpr

+
+
+ +
+
+invert_branch(data, addr)[source]
+

invert_branch reads the instruction(s) in data at virtual address addr and returns a string of bytes +of the same length which inverts the branch of provided instruction.

+ +++ + + + + + + + + + +
Parameters:
    +
  • data (str) – bytes for the instruction to be converted
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

string containing len(data) which always branches to the same location as the provided instruction

+
Return type:

str

+
Example:
>>> arch.get_instruction_text(arch.invert_branch(arch.assemble("je 10")[0], 0), 0)
+(['jne     ', '0xa'], 6L)
+>>> arch.get_instruction_text(arch.invert_branch(arch.assemble("jo 10")[0], 0), 0)
+(['jno     ', '0xa'], 6L)
+>>> arch.get_instruction_text(arch.invert_branch(arch.assemble("jge 10")[0], 0), 0)
+(['jl      ', '0xa'], 6L)
+>>>
+
+
+
+
+ +
+
+is_always_branch_patch_available(data, addr)[source]
+

is_always_branch_patch_available determines if the instruction data at addr can be made to +always branch.

+ +++ + + + + + + + + + +
Parameters:
    +
  • data (str) – bytes for the instruction to be checked
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

True if the instruction can be patched, False otherwise

+
Return type:

bool

+
Example:
>>> arch.is_always_branch_patch_available(arch.assemble("je 10")[0], 0)
+True
+>>> arch.is_always_branch_patch_available(arch.assemble("nop")[0], 0)
+False
+>>>
+
+
+
+
+ +
+
+is_invert_branch_patch_available(data, addr)[source]
+

is_always_branch_patch_available determines if the instruction data at addr can be inverted.

+ +++ + + + + + + + + + +
Parameters:
    +
  • data (str) – bytes for the instruction to be checked
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

True if the instruction can be patched, False otherwise

+
Return type:

bool

+
Example:
>>> arch.is_invert_branch_patch_available(arch.assemble("je 10")[0], 0)
+True
+>>> arch.is_invert_branch_patch_available(arch.assemble("nop")[0], 0)
+False
+>>>
+
+
+
+
+ +
+
+is_never_branch_patch_available(data, addr)[source]
+

is_never_branch_patch_available determines if the instruction data at addr can be made to never branch.

+ +++ + + + + + + + + + +
Parameters:
    +
  • data (str) – bytes for the instruction to be checked
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

True if the instruction can be patched, False otherwise

+
Return type:

bool

+
Example:
>>> arch.is_never_branch_patch_available(arch.assemble("je 10")[0], 0)
+True
+>>> arch.is_never_branch_patch_available(arch.assemble("nop")[0], 0)
+False
+>>>
+
+
+
+
+ +
+
+is_skip_and_return_value_patch_available(data, addr)[source]
+

is_skip_and_return_value_patch_available determines if the instruction data at addr is a call-like +instruction that can be made into an instruction returns a value.

+ +++ + + + + + + + + + +
Parameters:
    +
  • data (str) – bytes for the instruction to be checked
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

True if the instruction can be patched, False otherwise

+
Return type:

bool

+
Example:
>>> arch.is_skip_and_return_value_patch_available(arch.assemble("call 0")[0], 0)
+True
+>>> arch.is_skip_and_return_value_patch_available(arch.assemble("jmp eax")[0], 0)
+False
+>>>
+
+
+
+
+ +
+
+is_skip_and_return_zero_patch_available(data, addr)[source]
+

is_skip_and_return_zero_patch_available determines if the instruction data at addr is a call-like +instruction that can be made into an instruction returns zero.

+ +++ + + + + + + + + + +
Parameters:
    +
  • data (str) – bytes for the instruction to be checked
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

True if the instruction can be patched, False otherwise

+
Return type:

bool

+
Example:
>>> arch.is_skip_and_return_zero_patch_available(arch.assemble("call 0")[0], 0)
+True
+>>> arch.is_skip_and_return_zero_patch_available(arch.assemble("call eax")[0], 0)
+True
+>>> arch.is_skip_and_return_zero_patch_available(arch.assemble("jmp eax")[0], 0)
+False
+>>>
+
+
+
+
+ +
+
+skip_and_return_value(data, addr, value)[source]
+

skip_and_return_value reads the instruction(s) in data at virtual address addr and returns a string of +bytes of the same length which doesn’t call and instead return a value.

+ +++ + + + + + + + + + +
Parameters:
    +
  • data (str) – bytes for the instruction to be converted
  • +
  • addr (int) – the virtual address of the instruction to be patched
  • +
+
Returns:

string containing len(data) which always branches to the same location as the provided instruction

+
Return type:

str

+
Example:
>>> arch.get_instruction_text(arch.skip_and_return_value(arch.assemble("call 10")[0], 0, 0), 0)
+(['mov     ', 'eax', ', ', '0x0'], 5L)
+>>>
+
+
+
+
+ +
+ +
+
+class ReferenceSource(func, arch, addr)[source]
+

Bases: object

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.architecture.Architecture.html b/personal/api-docs/binaryninja.architecture.Architecture.html new file mode 100644 index 0000000..b06b17f --- /dev/null +++ b/personal/api-docs/binaryninja.architecture.Architecture.html @@ -0,0 +1,657 @@ + + + + + + + + + + + binaryninja.architecture.Architecture — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.architecture.Architecture

+
+
+class Architecture[source]
+

class Architecture is the parent class for all CPU architectures. Subclasses of Architecture implement assembly, +disassembly, IL lifting, and patching.

+

class Architecture has a metaclass with the additional methods register, and supports +iteration:

+
>>> #List the architectures
+>>> list(Architecture)
+[<arch: aarch64>, <arch: armv7>, <arch: armv7eb>, <arch: mipsel32>, <arch: mips32>, <arch: powerpc>,
+<arch: x86>, <arch: x86_64>]
+>>> #Register a new Architecture
+>>> class MyArch(Architecture):
+...  name = "MyArch"
+...
+>>> MyArch.register()
+>>> list(Architecture)
+[<arch: aarch64>, <arch: armv7>, <arch: armv7eb>, <arch: mipsel32>, <arch: mips32>, <arch: powerpc>,
+<arch: x86>, <arch: x86_64>, <arch: MyArch>]
+>>>
+
+
+

For the purposes of this documentation the variable arch will be used in the following context

+
>>> from binaryninja import *
+>>> arch = Architecture['x86']
+
+
+
+
+__init__()[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__()x.__init__(…) initializes x; see help(type(x)) for signature
always_branch(data, addr)always_branch reads the instruction(s) in data at virtual address addr and returns a string of bytes of the same length which always branches.
assemble(code[, addr])assemble converts the string of assembly instructions code loaded at virtual address addr to the byte representation of those instructions.
convert_to_nop(data, addr)convert_to_nop reads the instruction(s) in data at virtual address addr and returns a string of nop instructions of the same length as data.
get_associated_arch_by_address(addr)
get_default_flag_condition_low_level_il(…) +++ + + + + +
param LowLevelILFlagCondition cond:
 
+
get_default_flag_write_low_level_il(op, …) +++ + + + + +
param LowLevelILOperation op:
 
+
get_flag_by_name(flag)get_flag_by_name get flag name for flag index.
get_flag_condition_low_level_il(cond, …) +++ + + + + +
param LowLevelILFlagCondition cond:
 Flag condition to be computed
+
get_flag_index(flag)
get_flag_name(flag)get_flag_name gets a flag name from a flag number.
get_flag_role(flag[, sem_class])get_flag_role gets the role of a given flag.
get_flag_write_low_level_il(op, size, …) +++ + + + + +
param LowLevelILOperation op:
 
+
get_flag_write_type_by_name(write_type)get_flag_write_type_by_name gets the flag write type name for the flag write type.
get_flag_write_type_name(write_type)get_flag_write_type_name gets the flag write type name for the given flag.
get_flags_required_for_flag_condition(cond)
get_instruction_info(data, addr)get_instruction_info returns an InstructionInfo object for the instruction at the given virtual address addr with data data.
get_instruction_low_level_il(data, addr, il)get_instruction_low_level_il appends LowLevelILExpr objects to il for the instruction at the given virtual address addr with data data.
get_instruction_low_level_il_instruction(bv, …)
get_instruction_text(data, addr)get_instruction_text returns a list of InstructionTextToken objects for the instruction at the given virtual address addr with data data.
get_intrinsic_index(intrinsic)
get_intrinsic_name(intrinsic)get_intrinsic_name gets an intrinsic name from an intrinsic number.
get_low_level_il_from_bytes(data, addr)get_low_level_il_from_bytes converts the instruction in bytes to il at the given virtual address
get_modified_regs_on_write(reg)get_modified_regs_on_write returns a list of register names that are modified when reg is written.
get_reg_index(reg)
get_reg_name(reg)get_reg_name gets a register name from a register number.
get_reg_stack_for_reg(reg)
get_reg_stack_index(reg_stack)
get_reg_stack_name(reg_stack)get_reg_stack_name gets a register stack name from a register stack number.
get_semantic_flag_class_by_name(sem_class)get_semantic_flag_class_by_name gets the semantic flag class index by name.
get_semantic_flag_class_index(sem_class)
get_semantic_flag_class_name(class_index)get_semantic_flag_class_name gets the name of a semantic flag class from the index.
get_semantic_flag_group_by_name(sem_group)get_semantic_flag_group_by_name gets the semantic flag group index by name.
get_semantic_flag_group_index(sem_group)
get_semantic_flag_group_low_level_il(…) +++ + + + + +
param str sem_group:
 
+
get_semantic_flag_group_name(group_index)get_semantic_flag_group_name gets the name of a semantic flag group from the index.
get_view_type_constant(type_name, const_name)get_view_type_constant retrieves the view type constant for the given type_name and const_name.
invert_branch(data, addr)invert_branch reads the instruction(s) in data at virtual address addr and returns a string of bytes of the same length which inverts the branch of provided instruction.
is_always_branch_patch_available(data, addr)is_always_branch_patch_available determines if the instruction data at addr can be made to always branch.
is_invert_branch_patch_available(data, addr)is_always_branch_patch_available determines if the instruction data at addr can be inverted.
is_never_branch_patch_available(data, addr)is_never_branch_patch_available determines if the instruction data at addr can be made to never branch.
is_skip_and_return_value_patch_available(…)is_skip_and_return_value_patch_available determines if the instruction data at addr is a call-like instruction that can be made into an instruction returns a value.
is_skip_and_return_zero_patch_available(…)is_skip_and_return_zero_patch_available determines if the instruction data at addr is a call-like instruction that can be made into an instruction returns zero.
is_view_type_constant_defined(type_name, …) +++ + + + + +
param str type_name:
 the BinaryView type name of the constant to query
+
perform_always_branch(data, addr)Deprecated method provided for compatibility.
perform_assemble(code, addr)Deprecated method provided for compatibility.
perform_convert_to_nop(data, addr)Deprecated method provided for compatibility.
perform_get_associated_arch_by_address(addr)Deprecated method provided for compatibility.
perform_get_flag_condition_low_level_il(…)Deprecated method provided for compatibility.
perform_get_flag_role(flag, sem_class)Deprecated method provided for compatibility.
perform_get_flag_write_low_level_il(op, …)Deprecated method provided for compatibility.
perform_get_flags_required_for_flag_condition(…)Deprecated method provided for compatibility.
perform_get_instruction_info(data, addr)Deprecated method provided for compatibility.
perform_get_instruction_low_level_il(data, …)Deprecated method provided for compatibility.
perform_get_instruction_text(data, addr)Deprecated method provided for compatibility.
perform_get_semantic_flag_group_low_level_il(…)Deprecated method provided for compatibility.
perform_invert_branch(data, addr)Deprecated method provided for compatibility.
perform_is_always_branch_patch_available(…)Deprecated method provided for compatibility.
perform_is_invert_branch_patch_available(…)Deprecated method provided for compatibility.
perform_is_never_branch_patch_available(…)Deprecated method provided for compatibility.
perform_is_skip_and_return_value_patch_available(…)Deprecated method provided for compatibility.
perform_is_skip_and_return_zero_patch_available(…)Deprecated method provided for compatibility.
perform_skip_and_return_value(data, addr, value)Deprecated method provided for compatibility.
register_calling_convention(cc)register_calling_convention registers a new calling convention for the Architecture.
set_view_type_constant(type_name, …)set_view_type_constant creates a new binaryview type constant.
skip_and_return_value(data, addr, value)skip_and_return_value reads the instruction(s) in data at virtual address addr and returns a string of bytes of the same length which doesn’t call and instead return a value.
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
address_size
calling_conventionsDict of CallingConvention objects (read-only)
default_int_size
endianness
flag_conditions_for_semantic_flag_group
flag_roles
flag_write_types
flags
flags_required_for_flag_condition
flags_required_for_semantic_flag_group
flags_written_by_flag_write_type
full_width_regsList of full width register strings (read-only)
global_regs
instr_alignment
intrinsics
link_reg
list
max_instr_length
name
next_address
opcode_display_length
reg_stacks
regs
semantic_class_for_flag_write_type
semantic_flag_classes
semantic_flag_groups
stack_pointer
standalone_platformArchitecture standalone platform (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.architecture.ArchitectureHook.html b/personal/api-docs/binaryninja.architecture.ArchitectureHook.html new file mode 100644 index 0000000..582bff7 --- /dev/null +++ b/personal/api-docs/binaryninja.architecture.ArchitectureHook.html @@ -0,0 +1,636 @@ + + + + + + + + + + + binaryninja.architecture.ArchitectureHook — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.architecture.ArchitectureHook

+
+
+class ArchitectureHook(base_arch)[source]
+
+
+__init__(base_arch)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__(base_arch)x.__init__(…) initializes x; see help(type(x)) for signature
always_branch(data, addr)always_branch reads the instruction(s) in data at virtual address addr and returns a string of bytes of the same length which always branches.
assemble(code[, addr])assemble converts the string of assembly instructions code loaded at virtual address addr to the byte representation of those instructions.
convert_to_nop(data, addr)convert_to_nop reads the instruction(s) in data at virtual address addr and returns a string of nop instructions of the same length as data.
get_associated_arch_by_address(addr)
get_default_flag_condition_low_level_il(…) +++ + + + + +
param LowLevelILFlagCondition cond:
 
+
get_default_flag_write_low_level_il(op, …) +++ + + + + +
param LowLevelILOperation op:
 
+
get_flag_by_name(flag)get_flag_by_name get flag name for flag index.
get_flag_condition_low_level_il(cond, …) +++ + + + + +
param LowLevelILFlagCondition cond:
 Flag condition to be computed
+
get_flag_index(flag)
get_flag_name(flag)get_flag_name gets a flag name from a flag number.
get_flag_role(flag[, sem_class])get_flag_role gets the role of a given flag.
get_flag_write_low_level_il(op, size, …) +++ + + + + +
param LowLevelILOperation op:
 
+
get_flag_write_type_by_name(write_type)get_flag_write_type_by_name gets the flag write type name for the flag write type.
get_flag_write_type_name(write_type)get_flag_write_type_name gets the flag write type name for the given flag.
get_flags_required_for_flag_condition(cond)
get_instruction_info(data, addr)get_instruction_info returns an InstructionInfo object for the instruction at the given virtual address addr with data data.
get_instruction_low_level_il(data, addr, il)get_instruction_low_level_il appends LowLevelILExpr objects to il for the instruction at the given virtual address addr with data data.
get_instruction_low_level_il_instruction(bv, …)
get_instruction_text(data, addr)get_instruction_text returns a list of InstructionTextToken objects for the instruction at the given virtual address addr with data data.
get_intrinsic_index(intrinsic)
get_intrinsic_name(intrinsic)get_intrinsic_name gets an intrinsic name from an intrinsic number.
get_low_level_il_from_bytes(data, addr)get_low_level_il_from_bytes converts the instruction in bytes to il at the given virtual address
get_modified_regs_on_write(reg)get_modified_regs_on_write returns a list of register names that are modified when reg is written.
get_reg_index(reg)
get_reg_name(reg)get_reg_name gets a register name from a register number.
get_reg_stack_for_reg(reg)
get_reg_stack_index(reg_stack)
get_reg_stack_name(reg_stack)get_reg_stack_name gets a register stack name from a register stack number.
get_semantic_flag_class_by_name(sem_class)get_semantic_flag_class_by_name gets the semantic flag class index by name.
get_semantic_flag_class_index(sem_class)
get_semantic_flag_class_name(class_index)get_semantic_flag_class_name gets the name of a semantic flag class from the index.
get_semantic_flag_group_by_name(sem_group)get_semantic_flag_group_by_name gets the semantic flag group index by name.
get_semantic_flag_group_index(sem_group)
get_semantic_flag_group_low_level_il(…) +++ + + + + +
param str sem_group:
 
+
get_semantic_flag_group_name(group_index)get_semantic_flag_group_name gets the name of a semantic flag group from the index.
get_view_type_constant(type_name, const_name)get_view_type_constant retrieves the view type constant for the given type_name and const_name.
invert_branch(data, addr)invert_branch reads the instruction(s) in data at virtual address addr and returns a string of bytes of the same length which inverts the branch of provided instruction.
is_always_branch_patch_available(data, addr)is_always_branch_patch_available determines if the instruction data at addr can be made to always branch.
is_invert_branch_patch_available(data, addr)is_always_branch_patch_available determines if the instruction data at addr can be inverted.
is_never_branch_patch_available(data, addr)is_never_branch_patch_available determines if the instruction data at addr can be made to never branch.
is_skip_and_return_value_patch_available(…)is_skip_and_return_value_patch_available determines if the instruction data at addr is a call-like instruction that can be made into an instruction returns a value.
is_skip_and_return_zero_patch_available(…)is_skip_and_return_zero_patch_available determines if the instruction data at addr is a call-like instruction that can be made into an instruction returns zero.
is_view_type_constant_defined(type_name, …) +++ + + + + +
param str type_name:
 the BinaryView type name of the constant to query
+
perform_always_branch(data, addr)Deprecated method provided for compatibility.
perform_assemble(code, addr)Deprecated method provided for compatibility.
perform_convert_to_nop(data, addr)Deprecated method provided for compatibility.
perform_get_associated_arch_by_address(addr)Deprecated method provided for compatibility.
perform_get_flag_condition_low_level_il(…)Deprecated method provided for compatibility.
perform_get_flag_role(flag, sem_class)Deprecated method provided for compatibility.
perform_get_flag_write_low_level_il(op, …)Deprecated method provided for compatibility.
perform_get_flags_required_for_flag_condition(…)Deprecated method provided for compatibility.
perform_get_instruction_info(data, addr)Deprecated method provided for compatibility.
perform_get_instruction_low_level_il(data, …)Deprecated method provided for compatibility.
perform_get_instruction_text(data, addr)Deprecated method provided for compatibility.
perform_get_semantic_flag_group_low_level_il(…)Deprecated method provided for compatibility.
perform_invert_branch(data, addr)Deprecated method provided for compatibility.
perform_is_always_branch_patch_available(…)Deprecated method provided for compatibility.
perform_is_invert_branch_patch_available(…)Deprecated method provided for compatibility.
perform_is_never_branch_patch_available(…)Deprecated method provided for compatibility.
perform_is_skip_and_return_value_patch_available(…)Deprecated method provided for compatibility.
perform_is_skip_and_return_zero_patch_available(…)Deprecated method provided for compatibility.
perform_skip_and_return_value(data, addr, value)Deprecated method provided for compatibility.
register()
register_calling_convention(cc)register_calling_convention registers a new calling convention for the Architecture.
set_view_type_constant(type_name, …)set_view_type_constant creates a new binaryview type constant.
skip_and_return_value(data, addr, value)skip_and_return_value reads the instruction(s) in data at virtual address addr and returns a string of bytes of the same length which doesn’t call and instead return a value.
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
address_size
calling_conventionsDict of CallingConvention objects (read-only)
default_int_size
endianness
flag_conditions_for_semantic_flag_group
flag_roles
flag_write_types
flags
flags_required_for_flag_condition
flags_required_for_semantic_flag_group
flags_written_by_flag_write_type
full_width_regsList of full width register strings (read-only)
global_regs
instr_alignment
intrinsics
link_reg
list
max_instr_length
name
next_address
opcode_display_length
reg_stacks
regs
semantic_class_for_flag_write_type
semantic_flag_classes
semantic_flag_groups
stack_pointer
standalone_platformArchitecture standalone platform (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.architecture.CoreArchitecture.html b/personal/api-docs/binaryninja.architecture.CoreArchitecture.html new file mode 100644 index 0000000..9cc8c17 --- /dev/null +++ b/personal/api-docs/binaryninja.architecture.CoreArchitecture.html @@ -0,0 +1,633 @@ + + + + + + + + + + + binaryninja.architecture.CoreArchitecture — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.architecture.CoreArchitecture

+
+
+class CoreArchitecture(handle)[source]
+
+
+__init__(handle)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__(handle)x.__init__(…) initializes x; see help(type(x)) for signature
always_branch(data, addr)always_branch reads the instruction(s) in data at virtual address addr and returns a string of bytes of the same length which always branches.
assemble(code[, addr])assemble converts the string of assembly instructions code loaded at virtual address addr to the byte representation of those instructions.
convert_to_nop(data, addr)convert_to_nop reads the instruction(s) in data at virtual address addr and returns a string of nop instructions of the same length as data.
get_associated_arch_by_address(addr)
get_default_flag_condition_low_level_il(…) +++ + + + + +
param LowLevelILFlagCondition cond:
 
+
get_default_flag_write_low_level_il(op, …) +++ + + + + +
param LowLevelILOperation op:
 
+
get_flag_by_name(flag)get_flag_by_name get flag name for flag index.
get_flag_condition_low_level_il(cond, …) +++ + + + + +
param LowLevelILFlagCondition cond:
 Flag condition to be computed
+
get_flag_index(flag)
get_flag_name(flag)get_flag_name gets a flag name from a flag number.
get_flag_role(flag[, sem_class])get_flag_role gets the role of a given flag.
get_flag_write_low_level_il(op, size, …) +++ + + + + +
param LowLevelILOperation op:
 
+
get_flag_write_type_by_name(write_type)get_flag_write_type_by_name gets the flag write type name for the flag write type.
get_flag_write_type_name(write_type)get_flag_write_type_name gets the flag write type name for the given flag.
get_flags_required_for_flag_condition(cond)
get_instruction_info(data, addr)get_instruction_info returns an InstructionInfo object for the instruction at the given virtual address addr with data data.
get_instruction_low_level_il(data, addr, il)get_instruction_low_level_il appends LowLevelILExpr objects to il for the instruction at the given virtual address addr with data data.
get_instruction_low_level_il_instruction(bv, …)
get_instruction_text(data, addr)get_instruction_text returns a list of InstructionTextToken objects for the instruction at the given virtual address addr with data data.
get_intrinsic_index(intrinsic)
get_intrinsic_name(intrinsic)get_intrinsic_name gets an intrinsic name from an intrinsic number.
get_low_level_il_from_bytes(data, addr)get_low_level_il_from_bytes converts the instruction in bytes to il at the given virtual address
get_modified_regs_on_write(reg)get_modified_regs_on_write returns a list of register names that are modified when reg is written.
get_reg_index(reg)
get_reg_name(reg)get_reg_name gets a register name from a register number.
get_reg_stack_for_reg(reg)
get_reg_stack_index(reg_stack)
get_reg_stack_name(reg_stack)get_reg_stack_name gets a register stack name from a register stack number.
get_semantic_flag_class_by_name(sem_class)get_semantic_flag_class_by_name gets the semantic flag class index by name.
get_semantic_flag_class_index(sem_class)
get_semantic_flag_class_name(class_index)get_semantic_flag_class_name gets the name of a semantic flag class from the index.
get_semantic_flag_group_by_name(sem_group)get_semantic_flag_group_by_name gets the semantic flag group index by name.
get_semantic_flag_group_index(sem_group)
get_semantic_flag_group_low_level_il(…) +++ + + + + +
param str sem_group:
 
+
get_semantic_flag_group_name(group_index)get_semantic_flag_group_name gets the name of a semantic flag group from the index.
get_view_type_constant(type_name, const_name)get_view_type_constant retrieves the view type constant for the given type_name and const_name.
invert_branch(data, addr)invert_branch reads the instruction(s) in data at virtual address addr and returns a string of bytes of the same length which inverts the branch of provided instruction.
is_always_branch_patch_available(data, addr)is_always_branch_patch_available determines if the instruction data at addr can be made to always branch.
is_invert_branch_patch_available(data, addr)is_always_branch_patch_available determines if the instruction data at addr can be inverted.
is_never_branch_patch_available(data, addr)is_never_branch_patch_available determines if the instruction data at addr can be made to never branch.
is_skip_and_return_value_patch_available(…)is_skip_and_return_value_patch_available determines if the instruction data at addr is a call-like instruction that can be made into an instruction returns a value.
is_skip_and_return_zero_patch_available(…)is_skip_and_return_zero_patch_available determines if the instruction data at addr is a call-like instruction that can be made into an instruction returns zero.
is_view_type_constant_defined(type_name, …) +++ + + + + +
param str type_name:
 the BinaryView type name of the constant to query
+
perform_always_branch(data, addr)Deprecated method provided for compatibility.
perform_assemble(code, addr)Deprecated method provided for compatibility.
perform_convert_to_nop(data, addr)Deprecated method provided for compatibility.
perform_get_associated_arch_by_address(addr)Deprecated method provided for compatibility.
perform_get_flag_condition_low_level_il(…)Deprecated method provided for compatibility.
perform_get_flag_role(flag, sem_class)Deprecated method provided for compatibility.
perform_get_flag_write_low_level_il(op, …)Deprecated method provided for compatibility.
perform_get_flags_required_for_flag_condition(…)Deprecated method provided for compatibility.
perform_get_instruction_info(data, addr)Deprecated method provided for compatibility.
perform_get_instruction_low_level_il(data, …)Deprecated method provided for compatibility.
perform_get_instruction_text(data, addr)Deprecated method provided for compatibility.
perform_get_semantic_flag_group_low_level_il(…)Deprecated method provided for compatibility.
perform_invert_branch(data, addr)Deprecated method provided for compatibility.
perform_is_always_branch_patch_available(…)Deprecated method provided for compatibility.
perform_is_invert_branch_patch_available(…)Deprecated method provided for compatibility.
perform_is_never_branch_patch_available(…)Deprecated method provided for compatibility.
perform_is_skip_and_return_value_patch_available(…)Deprecated method provided for compatibility.
perform_is_skip_and_return_zero_patch_available(…)Deprecated method provided for compatibility.
perform_skip_and_return_value(data, addr, value)Deprecated method provided for compatibility.
register_calling_convention(cc)register_calling_convention registers a new calling convention for the Architecture.
set_view_type_constant(type_name, …)set_view_type_constant creates a new binaryview type constant.
skip_and_return_value(data, addr, value)skip_and_return_value reads the instruction(s) in data at virtual address addr and returns a string of bytes of the same length which doesn’t call and instead return a value.
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
address_size
calling_conventionsDict of CallingConvention objects (read-only)
default_int_size
endianness
flag_conditions_for_semantic_flag_group
flag_roles
flag_write_types
flags
flags_required_for_flag_condition
flags_required_for_semantic_flag_group
flags_written_by_flag_write_type
full_width_regsList of full width register strings (read-only)
global_regs
instr_alignment
intrinsics
link_reg
list
max_instr_length
name
next_address
opcode_display_length
reg_stacks
regs
semantic_class_for_flag_write_type
semantic_flag_classes
semantic_flag_groups
stack_pointer
standalone_platformArchitecture standalone platform (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.architecture.ReferenceSource.html b/personal/api-docs/binaryninja.architecture.ReferenceSource.html new file mode 100644 index 0000000..6a4a6c5 --- /dev/null +++ b/personal/api-docs/binaryninja.architecture.ReferenceSource.html @@ -0,0 +1,291 @@ + + + + + + + + + + + binaryninja.architecture.ReferenceSource — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.architecture.ReferenceSource

+
+
+class ReferenceSource(func, arch, addr)[source]
+
+
+__init__(func, arch, addr)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(func, arch, addr)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.architecture.long.html b/personal/api-docs/binaryninja.architecture.long.html new file mode 100644 index 0000000..1d2d886 --- /dev/null +++ b/personal/api-docs/binaryninja.architecture.long.html @@ -0,0 +1,325 @@ + + + + + + + + + + + binaryninja.architecture.long — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.architecture.long

+
+
+class long(x=0) → long
+

long(x, base=10) -> long

+

Convert a number or string to a long integer, or return 0L if no arguments +are given. If x is floating point, the conversion truncates towards zero.

+

If x is not a number or if base is given, then x must be a string or +Unicode object representing an integer literal in the given base. The +literal can be preceded by ‘+’ or ‘-‘ and be surrounded by whitespace. +The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to +interpret the base from the string as an integer literal. +>>> int(‘0b100’, base=0) +4L

+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + +
bit_length()Number of bits necessary to represent self in binary.
conjugateReturns self, the complex conjugate of any long.
+

Attributes

+ ++++ + + + + + + + + + + + + + + +
denominatorthe denominator of a rational number in lowest terms
imagthe imaginary part of a complex number
numeratorthe numerator of a rational number in lowest terms
realthe real part of a complex number
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.architecture.range.html b/personal/api-docs/binaryninja.architecture.range.html new file mode 100644 index 0000000..43b5fa5 --- /dev/null +++ b/personal/api-docs/binaryninja.architecture.range.html @@ -0,0 +1,274 @@ + + + + + + + + + + + binaryninja.architecture.range — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.architecture.range

+
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.architecture.with_metaclass.html b/personal/api-docs/binaryninja.architecture.with_metaclass.html new file mode 100644 index 0000000..9ea41fd --- /dev/null +++ b/personal/api-docs/binaryninja.architecture.with_metaclass.html @@ -0,0 +1,274 @@ + + + + + + + + + + + binaryninja.architecture.with_metaclass — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.architecture.with_metaclass

+
+
+with_metaclass(meta, *bases)[source]
+

Create a base class with a metaclass.

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.atexit-module.html b/personal/api-docs/binaryninja.atexit-module.html new file mode 100644 index 0000000..7e0a1cb --- /dev/null +++ b/personal/api-docs/binaryninja.atexit-module.html @@ -0,0 +1,285 @@ + + + + + + + + + + + atexit module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

atexit module

+ ++++ + + + + + +
binaryninja.atexit.register(func, *targs, …)register a function to be executed upon normal program termination
+
+
+

atexit.py - allow programmer to define multiple exit functions to be executed +upon normal program termination.

+

One public function, register, is defined.

+
+
+register(func, *targs, **kargs)
+

register a function to be executed upon normal program termination

+

func - function to be called at exit +targs - optional arguments to pass to func +kargs - optional keyword arguments to pass to func

+

func is returned to facilitate usage as a decorator.

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.atexit.register.html b/personal/api-docs/binaryninja.atexit.register.html new file mode 100644 index 0000000..2da5929 --- /dev/null +++ b/personal/api-docs/binaryninja.atexit.register.html @@ -0,0 +1,272 @@ + + + + + + + + + + + binaryninja.atexit.register — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.atexit.register

+
+
+register(func, *targs, **kargs)
+

register a function to be executed upon normal program termination

+

func - function to be called at exit +targs - optional arguments to pass to func +kargs - optional keyword arguments to pass to func

+

func is returned to facilitate usage as a decorator.

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.basicblock-module.html b/personal/api-docs/binaryninja.basicblock-module.html new file mode 100644 index 0000000..acf76e3 --- /dev/null +++ b/personal/api-docs/binaryninja.basicblock-module.html @@ -0,0 +1,520 @@ + + + + + + + + + + + basicblock module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

basicblock module

+ ++++ + + + + + + + + + + + +
binaryninja.basicblock.BasicBlock(handle[, view])
binaryninja.basicblock.BasicBlockEdge(…)
binaryninja.basicblock.range(*args)A Python2 and Python3 Compatible Range Generator
+
+
+
+
+class BasicBlock(handle, view=None)[source]
+

Bases: object

+
+
+get_disassembly_text(settings=None)[source]
+

get_disassembly_text returns a list of binaryninja.function.DisassemblyTextLine objects for the current basic block.

+ +++ + + + + + +
Parameters:

settings (DisassemblySettings) – (optional) DisassemblySettings object

+
Example:
>>> current_basic_block.get_disassembly_text()
+[<0x100000f30: _main:>, <0x100000f30: push    rbp>, ... ]
+
+
+
+
+ +
+
+classmethod get_iterated_dominance_frontier(blocks)[source]
+
+ +
+
+mark_recent_use()[source]
+
+ +
+
+set_auto_highlight(color)[source]
+

set_auto_highlight highlights the current BasicBlock with the supplied color.

+

..warning:: Use only in analysis plugins. Do not use in regular plugins, as colors won’t be saved to the database.

+ +++ + + + +
Parameters:or highlight.HighlightColor color (HighlightStandardColor) – Color value to use for highlighting
+
+ +
+
+set_user_highlight(color)[source]
+

set_user_highlight highlights the current BasicBlock with the supplied color

+ +++ + + + + + +
Parameters:

or highlight.HighlightColor color (HighlightStandardColor) – Color value to use for highlighting

+
Example:
>>> current_basic_block.set_user_highlight(highlight.HighlightColor(red=0xff, blue=0xff, green=0))
+>>> current_basic_block.set_user_highlight(HighlightStandardColor.BlueHighlightColor)
+
+
+
+
+ +
+
+annotations
+

List of automatic annotations for the start of this block (read-only)

+
+ +
+
+arch
+

Basic block architecture (read-only)

+
+ +
+
+can_exit
+

Whether basic block can return or is tagged as ‘No Return’ (read-only)

+
+ +
+
+disassembly_text
+

disassembly_text property which returns a list of binaryninja.function.DisassemblyTextLine objects for the current basic block. +:Example:

+
>>> current_basic_block.disassembly_text
+[<0x100000f30: _main:>, ...]
+
+
+
+ +
+
+dominance_frontier
+

Dominance frontier for this basic block (read-only)

+
+ +
+
+dominator_tree_children
+

List of child blocks in the dominator tree for this basic block (read-only)

+
+ +
+
+dominators
+

List of dominators for this basic block (read-only)

+
+ +
+
+end
+

Basic block end (read-only)

+
+ +
+
+function
+

Basic block function (read-only)

+
+ +
+
+has_undetermined_outgoing_edges
+

Whether basic block has undetermined outgoing edges (read-only)

+
+ +
+
+highlight
+

Gets or sets the highlight color for basic block

+ +++ + + + +
Example:
>>> current_basic_block.highlight = HighlightStandardColor.BlueHighlightColor
+>>> current_basic_block.highlight
+<color: blue>
+
+
+
+
+ +
+
+immediate_dominator
+

Immediate dominator of this basic block (read-only)

+
+ +
+
+incoming_edges
+

List of basic block incoming edges (read-only)

+
+ +
+
+index
+

Basic block index in list of blocks for the function (read-only)

+
+ +
+
+instruction_count
+
+ +
+
+is_il
+

Whether the basic block contains IL

+
+ +
+
+is_low_level_il
+

Whether the basic block contains Low Level IL

+
+ +
+
+is_medium_level_il
+

Whether the basic block contains Medium Level IL

+
+ +
+
+length
+

Basic block length (read-only)

+
+ +
+
+outgoing_edges
+

List of basic block outgoing edges (read-only)

+
+ +
+
+source_block
+

Basic block source block (read-only)

+
+ +
+
+start
+

Basic block start (read-only)

+
+ +
+
+strict_dominators
+

List of strict dominators for this basic block (read-only)

+
+ +
+
+view
+

Binary view that contains the basic block (read-ony)

+
+ +
+ +
+
+class BasicBlockEdge(branch_type, source, target, back_edge, fall_through)[source]
+

Bases: object

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.basicblock.BasicBlock.html b/personal/api-docs/binaryninja.basicblock.BasicBlock.html new file mode 100644 index 0000000..c908fec --- /dev/null +++ b/personal/api-docs/binaryninja.basicblock.BasicBlock.html @@ -0,0 +1,374 @@ + + + + + + + + + + + binaryninja.basicblock.BasicBlock — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.basicblock.BasicBlock

+
+
+class BasicBlock(handle, view=None)[source]
+
+
+__init__(handle, view=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + +
__init__(handle[, view])x.__init__(…) initializes x; see help(type(x)) for signature
get_disassembly_text([settings])get_disassembly_text returns a list of binaryninja.function.DisassemblyTextLine objects for the current basic block.
get_iterated_dominance_frontier(blocks)
mark_recent_use()
set_auto_highlight(color)set_auto_highlight highlights the current BasicBlock with the supplied color.
set_user_highlight(color)set_user_highlight highlights the current BasicBlock with the supplied color
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
annotationsList of automatic annotations for the start of this block (read-only)
archBasic block architecture (read-only)
can_exitWhether basic block can return or is tagged as ‘No Return’ (read-only)
disassembly_textdisassembly_text property which returns a list of binaryninja.function.DisassemblyTextLine objects for the current basic block.
dominance_frontierDominance frontier for this basic block (read-only)
dominator_tree_childrenList of child blocks in the dominator tree for this basic block (read-only)
dominatorsList of dominators for this basic block (read-only)
endBasic block end (read-only)
functionBasic block function (read-only)
has_undetermined_outgoing_edgesWhether basic block has undetermined outgoing edges (read-only)
highlightGets or sets the highlight color for basic block
immediate_dominatorImmediate dominator of this basic block (read-only)
incoming_edgesList of basic block incoming edges (read-only)
indexBasic block index in list of blocks for the function (read-only)
is_ilWhether the basic block contains IL
is_low_level_ilWhether the basic block contains Low Level IL
is_medium_level_ilWhether the basic block contains Medium Level IL
lengthBasic block length (read-only)
outgoing_edgesList of basic block outgoing edges (read-only)
startBasic block start (read-only)
strict_dominatorsList of strict dominators for this basic block (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.basicblock.BasicBlockEdge.html b/personal/api-docs/binaryninja.basicblock.BasicBlockEdge.html new file mode 100644 index 0000000..f877ceb --- /dev/null +++ b/personal/api-docs/binaryninja.basicblock.BasicBlockEdge.html @@ -0,0 +1,287 @@ + + + + + + + + + + + binaryninja.basicblock.BasicBlockEdge — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.basicblock.BasicBlockEdge

+
+
+class BasicBlockEdge(branch_type, source, target, back_edge, fall_through)[source]
+
+
+__init__(branch_type, source, target, back_edge, fall_through)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(branch_type, source, target, …)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.basicblock.range.html b/personal/api-docs/binaryninja.basicblock.range.html new file mode 100644 index 0000000..db64241 --- /dev/null +++ b/personal/api-docs/binaryninja.basicblock.range.html @@ -0,0 +1,270 @@ + + + + + + + + + + + binaryninja.basicblock.range — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.basicblock.range

+
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview-module.html b/personal/api-docs/binaryninja.binaryview-module.html new file mode 100644 index 0000000..4c6aecb --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview-module.html @@ -0,0 +1,5511 @@ + + + + + + + + + + + binaryview module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryview module

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
binaryninja.binaryview.ActiveAnalysisInfo(…)
binaryninja.binaryview.AddressRange(start, end)
binaryninja.binaryview.AnalysisCompletionEvent(…)The AnalysisCompletionEvent object provides an asynchronous mechanism for receiving callbacks when analysis is complete.
binaryninja.binaryview.AnalysisInfo(state, …)
binaryninja.binaryview.AnalysisProgress(…)
binaryninja.binaryview.BinaryDataNotification()
binaryninja.binaryview.BinaryDataNotificationCallbacks(…)
binaryninja.binaryview.BinaryReader(view[, …])class BinaryReader is a convenience class for reading binary data.
binaryninja.binaryview.BinaryView([…])class BinaryView implements a view on binary data, and presents a queryable interface of a binary file.
binaryninja.binaryview.BinaryViewType(handle)
binaryninja.binaryview.BinaryWriter(view[, …])class BinaryWriter is a convenience class for writing binary data.
binaryninja.binaryview.DataVariable(addr, …)
binaryninja.binaryview.OrderedDict(**kwds)Dictionary that remembers insertion order
binaryninja.binaryview.Section(handle)
binaryninja.binaryview.Segment(handle)
binaryninja.binaryview.StringReference(bv, …)
binaryninja.binaryview.StructuredDataValue(…)
binaryninja.binaryview.StructuredDataView(bv, …)class StructuredDataView is a convenience class for reading structured binary data.
binaryninja.binaryview.range(*args)A Python2 and Python3 Compatible Range Generator
binaryninja.binaryview.with_metaclass(meta, …)Create a base class with a metaclass.
+
+
+
+
+class ActiveAnalysisInfo(func, analysis_time, update_count, submit_count)[source]
+

Bases: object

+
+ +
+
+class AddressRange(start, end)[source]
+

Bases: object

+
+
+length
+
+ +
+ +
+
+class AnalysisCompletionEvent(view, callback)[source]
+

Bases: object

+

The AnalysisCompletionEvent object provides an asynchronous mechanism for receiving +callbacks when analysis is complete. The callback runs once. A completion event must be added +for each new analysis in order to be notified of each analysis completion. The +AnalysisCompletionEvent class takes responsibility for keeping track of the object’s lifetime.

+ +++ + + + +
Example:
>>> def on_complete(self):
+...     print("Analysis Complete", self.view)
+...
+>>> evt = AnalysisCompletionEvent(bv, on_complete)
+>>>
+
+
+
+
+
+cancel()[source]
+

shut down and no further analysis should be done afterward.

+
+ +
+ +
+
+class AnalysisInfo(state, analysis_time, active_info)[source]
+

Bases: object

+
+ +
+
+class AnalysisProgress(state, count, total)[source]
+

Bases: object

+
+ +
+
+class BinaryDataNotification[source]
+

Bases: object

+
+
+data_inserted(view, offset, length)[source]
+
+ +
+
+data_removed(view, offset, length)[source]
+
+ +
+
+data_var_added(view, var)[source]
+
+ +
+
+data_var_removed(view, var)[source]
+
+ +
+
+data_var_updated(view, var)[source]
+
+ +
+
+data_written(view, offset, length)[source]
+
+ +
+
+function_added(view, func)[source]
+
+ +
+
+function_removed(view, func)[source]
+
+ +
+
+function_update_requested(view, func)[source]
+
+ +
+
+function_updated(view, func)[source]
+
+ +
+
+string_found(view, string_type, offset, length)[source]
+
+ +
+
+string_removed(view, string_type, offset, length)[source]
+
+ +
+
+type_defined(view, name, type)[source]
+
+ +
+
+type_undefined(view, name, type)[source]
+
+ +
+ +
+
+class BinaryDataNotificationCallbacks(view, notify)[source]
+

Bases: object

+
+ +
+
+class BinaryReader(view, endian=None)[source]
+

Bases: object

+

class BinaryReader is a convenience class for reading binary data.

+

BinaryReader can be instantiated as follows and the rest of the document will start from this context

+
>>> from binaryninja import *
+>>> bv = BinaryViewType['Mach-O'].open("/bin/ls")
+>>> br = BinaryReader(bv)
+>>> hex(br.read32())
+'0xfeedfacfL'
+>>>
+
+
+

Or using the optional endian parameter

+
>>> from binaryninja import *
+>>> br = BinaryReader(bv, Endianness.BigEndian)
+>>> hex(br.read32())
+'0xcffaedfeL'
+>>>
+
+
+
+
+read(length)[source]
+

read returns length bytes read from the current offset, adding length to offset.

+ +++ + + + + + + + + + +
Parameters:

length (int) – number of bytes to read.

+
Returns:

length bytes from current offset

+
Return type:

str, or None on failure

+
Example:
>>> br.read(8)
+'\xcf\xfa\xed\xfe\x07\x00\x00\x01'
+>>>
+
+
+
+
+ +
+
+read16()[source]
+

read16 returns a two byte integer from offset incrementing the offset by two, using specified endianness.

+ +++ + + + + + + + +
Returns:

a two byte integer at offset.

+
Return type:

int, or None on failure

+
Example:
>>> br.seek(0x100000000)
+>>> hex(br.read16())
+'0xfacf'
+>>>
+
+
+
+
+ +
+
+read16be()[source]
+

read16be returns a two byte big endian integer from offset incrementing the offset by two.

+ +++ + + + + + + + +
Returns:

a two byte integer at offset.

+
Return type:

int, or None on failure

+
Example:
>>> br.seek(0x100000000)
+>>> hex(br.read16be())
+'0xcffa'
+>>>
+
+
+
+
+ +
+
+read16le()[source]
+

read16le returns a two byte little endian integer from offset incrementing the offset by two.

+ +++ + + + + + + + +
Returns:

a two byte integer at offset.

+
Return type:

int, or None on failure

+
Exmaple:
>>> br.seek(0x100000000)
+>>> hex(br.read16le())
+'0xfacf'
+>>>
+
+
+
+
+ +
+
+read32()[source]
+

read32 returns a four byte integer from offset incrementing the offset by four, using specified endianness.

+ +++ + + + + + + + +
Returns:

a four byte integer at offset.

+
Return type:

int, or None on failure

+
Example:
>>> br.seek(0x100000000)
+>>> hex(br.read32())
+'0xfeedfacfL'
+>>>
+
+
+
+
+ +
+
+read32be()[source]
+

read32be returns a four byte big endian integer from offset incrementing the offset by four.

+ +++ + + + + + + + +
Returns:

a four byte integer at offset.

+
Return type:

int, or None on failure

+
Example:
>>> br.seek(0x100000000)
+>>> hex(br.read32be())
+'0xcffaedfe'
+>>>
+
+
+
+
+ +
+
+read32le()[source]
+

read32le returns a four byte little endian integer from offset incrementing the offset by four.

+ +++ + + + + + + + +
Returns:

a four byte integer at offset.

+
Return type:

int, or None on failure

+
Example:
>>> br.seek(0x100000000)
+>>> hex(br.read32le())
+'0xfeedfacf'
+>>>
+
+
+
+
+ +
+
+read64()[source]
+

read64 returns an eight byte integer from offset incrementing the offset by eight, using specified endianness.

+ +++ + + + + + + + +
Returns:

an eight byte integer at offset.

+
Return type:

int, or None on failure

+
Example:
>>> br.seek(0x100000000)
+>>> hex(br.read64())
+'0x1000007feedfacfL'
+>>>
+
+
+
+
+ +
+
+read64be()[source]
+

read64be returns an eight byte big endian integer from offset incrementing the offset by eight.

+ +++ + + + + + + + +
Returns:

a eight byte integer at offset.

+
Return type:

int, or None on failure

+
Example:
>>> br.seek(0x100000000)
+>>> hex(br.read64be())
+'0xcffaedfe07000001L'
+
+
+
+
+ +
+
+read64le()[source]
+

read64le returns an eight byte little endian integer from offset incrementing the offset by eight.

+ +++ + + + + + + + +
Returns:

a eight byte integer at offset.

+
Return type:

int, or None on failure

+
Example:
>>> br.seek(0x100000000)
+>>> hex(br.read64le())
+'0x1000007feedfacf'
+>>>
+
+
+
+
+ +
+
+read8()[source]
+

read8 returns a one byte integer from offset incrementing the offset.

+ +++ + + + + + + + +
Returns:

byte at offset.

+
Return type:

int, or None on failure

+
Example:
>>> br.seek(0x100000000)
+>>> br.read8()
+207
+>>>
+
+
+
+
+ +
+
+seek(offset)[source]
+

seek update internal offset to offset.

+ +++ + + + + + + + +
Parameters:

offset (int) – offset to set the internal offset to

+
Return type:

None

+
Example:
>>> hex(br.offset)
+'0x100000008L'
+>>> br.seek(0x100000000)
+>>> hex(br.offset)
+'0x100000000L'
+>>>
+
+
+
+
+ +
+
+seek_relative(offset)[source]
+

seek_relative updates the internal offset by offset.

+ +++ + + + + + + + +
Parameters:

offset (int) – offset to add to the internal offset

+
Return type:

None

+
Example:
>>> hex(br.offset)
+'0x100000008L'
+>>> br.seek_relative(-8)
+>>> hex(br.offset)
+'0x100000000L'
+>>>
+
+
+
+
+ +
+
+endianness
+

The Endianness to read data. (read/write)

+ +++ + + + + + + + +
Getter:returns the endianness of the reader
Setter:sets the endianness of the reader (BigEndian or LittleEndian)
Type:Endianness
+
+ +
+
+eof
+

Is end of file (read-only)

+ +++ + + + + + +
Getter:returns boolean, true if end of file, false otherwise
Type:bool
+
+ +
+
+offset
+

The current read offset (read/write).

+ +++ + + + + + + + +
Getter:returns the current internal offset
Setter:sets the internal offset
Type:int
+
+ +
+ +
+
+class BinaryView(file_metadata=None, parent_view=None, handle=None)[source]
+

Bases: object

+

class BinaryView implements a view on binary data, and presents a queryable interface of a binary file. One key +job of BinaryView is file format parsing which allows Binary Ninja to read, write, insert, remove portions +of the file given a virtual address. For the purposes of this documentation we define a virtual address as the +memory address that the various pieces of the physical file will be loaded at.

+

A binary file does not have to have just one BinaryView, thus much of the interface to manipulate disassembly exists +within or is accessed through a BinaryView. All files are guaranteed to have at least the Raw BinaryView. The +Raw BinaryView is simply a hex editor, but is helpful for manipulating binary files via their absolute addresses.

+

BinaryViews are plugins and thus registered with Binary Ninja at startup, and thus should never be instantiated +directly as this is already done. The list of available BinaryViews can be seen in the BinaryViewType class which +provides an iterator and map of the various installed BinaryViews:

+
>>> list(BinaryViewType)
+[<view type: 'Raw'>, <view type: 'ELF'>, <view type: 'Mach-O'>, <view type: 'PE'>]
+>>> BinaryViewType['ELF']
+<view type: 'ELF'>
+
+
+

To open a file with a given BinaryView the following code can be used:

+
>>> bv = BinaryViewType['Mach-O'].open("/bin/ls")
+>>> bv
+<BinaryView: '/bin/ls', start 0x100000000, len 0xa000>
+
+
+

By convention in the rest of this document we will use bv to mean an open BinaryView of an executable file. +When a BinaryView is open on an executable view, analysis does not automatically run, this can be done by running +the update_analysis_and_wait() method which disassembles the executable and returns when all disassembly is +finished:

+
>>> bv.update_analysis_and_wait()
+>>>
+
+
+

Since BinaryNinja’s analysis is multi-threaded (depending on version) this can also be done in the background by +using the update_analysis() method instead.

+

By standard python convention methods which start with ‘_’ should be considered private and should not be called +externally. Additionally, methods which begin with perform_ should not be called either and are +used explicitly for subclassing the BinaryView.

+
+

Note

+

An important note on the *_user_*() methods. Binary Ninja makes a distinction between edits performed by the user and actions performed by auto analysis. Auto analysis actions that can quickly be recalculated are not saved to the database. Auto analysis actions that take a long time and all user edits are stored in the database (e.g. remove_user_function() rather than remove_function()). Thus use _user_ methods if saving to the database is desired.

+
+
+
+abort_analysis()[source]
+

abort_analysis will abort the currently running analysis.

+ +++ + + + +
Return type:None
+
+ +
+
+add_analysis_completion_event(callback)[source]
+

add_analysis_completion_event sets up a call back function to be called when analysis has been completed. +This is helpful when using update_analysis which does not wait for analysis completion before returning.

+

The callee of this function is not responsible for maintaining the lifetime of the returned AnalysisCompletionEvent object.

+ +++ + + + + + + + + + +
Parameters:

callback (callable()) – A function to be called with no parameters when analysis has completed.

+
Returns:

An initialized AnalysisCompletionEvent object.

+
Return type:

AnalysisCompletionEvent

+
Example:
>>> def completionEvent():
+...   print("done")
+...
+>>> bv.add_analysis_completion_event(completionEvent)
+<binaryninja.AnalysisCompletionEvent object at 0x10a2c9f10>
+>>> bv.update_analysis()
+done
+>>>
+
+
+
+
+ +
+
+add_analysis_option(name)[source]
+

add_analysis_option adds an analysis option. Analysis options elaborate the analysis phase. The user must +start analysis by calling either update_analysis() or update_analysis_and_wait().

+ +++ + + + + + + + +
Parameters:

name (str) – name of the analysis option. Available options: +“linearsweep” : apply linearsweep analysis during the next analysis update (run-once semantics)

+
Return type:

None

+
Example:
>>> bv.add_analysis_option("linearsweep")
+>>> bv.update_analysis_and_wait()
+
+
+
+
+ +
+
+add_auto_section(name, start, length, semantics=<SectionSemantics.DefaultSectionSemantics: 0>, type='', align=1, entry_size=1, linked_section='', info_section='', info_data=0)[source]
+
+ +
+
+add_auto_segment(start, length, data_offset, data_length, flags)[source]
+
+ +
+
+add_entry_point(addr, plat=None)[source]
+

add_entry_point adds an virtual address to start analysis from for a given plat.

+ +++ + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address to start analysis from
  • +
  • plat (Platform) – Platform for the entry point analysis
  • +
+
Return type:

None

+
Example:
>>> bv.add_entry_point(0xdeadbeef)
+>>>
+
+
+
+
+ +
+
+add_function(addr, plat=None)[source]
+

add_function add a new function of the given plat at the virtual address addr

+ +++ + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address of the function to be added
  • +
  • plat (Platform) – Platform for the function to be added
  • +
+
Return type:

None

+
Example:
>>> bv.add_function(1)
+>>> bv.functions
+[<func: x86_64@0x1>]
+
+
+
+
+ +
+
+add_undo_action(action)[source]
+
+ +
+
+add_user_section(name, start, length, semantics=<SectionSemantics.DefaultSectionSemantics: 0>, type='', align=1, entry_size=1, linked_section='', info_section='', info_data=0)[source]
+
+ +
+
+add_user_segment(start, length, data_offset, data_length, flags)[source]
+
+ +
+
+always_branch(addr, arch=None)[source]
+

always_branch convert the instruction of architecture arch at the virtual address addr to an +unconditional branch.

+
+

Note

+

This API performs a binary patch, analysis may need to be updated afterward. Additionally the binary file must be saved in order to preserve the changes made.

+
+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address of the instruction to be modified
  • +
  • arch (Architecture) – (optional) the architecture of the instructions if different from the default
  • +
+
Returns:

True on success, False on failure.

+
Return type:

bool

+
Example:
>>> bv.get_disassembly(0x100012ef)
+'jg      0x100012f5'
+>>> bv.always_branch(0x100012ef)
+True
+>>> bv.get_disassembly(0x100012ef)
+'jmp     0x100012f5'
+>>>
+
+
+
+
+ +
+
+begin_undo_actions()[source]
+

begin_undo_actions start recording actions taken so the can be undone at some point.

+ +++ + + + + + +
Return type:

None

+
Example:
>>> bv.get_disassembly(0x100012f1)
+'xor     eax, eax'
+>>> bv.begin_undo_actions()
+>>> bv.convert_to_nop(0x100012f1)
+True
+>>> bv.commit_undo_actions()
+>>> bv.get_disassembly(0x100012f1)
+'nop'
+>>> bv.undo()
+>>> bv.get_disassembly(0x100012f1)
+'xor     eax, eax'
+>>>
+
+
+
+
+ +
+
+commit_undo_actions()[source]
+

commit_undo_actions commit the actions taken since the last commit to the undo database.

+ +++ + + + + + +
Return type:

None

+
Example:
>>> bv.get_disassembly(0x100012f1)
+'xor     eax, eax'
+>>> bv.begin_undo_actions()
+>>> bv.convert_to_nop(0x100012f1)
+True
+>>> bv.commit_undo_actions()
+>>> bv.get_disassembly(0x100012f1)
+'nop'
+>>> bv.undo()
+>>> bv.get_disassembly(0x100012f1)
+'xor     eax, eax'
+>>>
+
+
+
+
+ +
+
+convert_to_nop(addr, arch=None)[source]
+

convert_to_nop converts the instruction at virtual address addr to a nop of the provided architecture.

+
+

Note

+

This API performs a binary patch, analysis may need to be updated afterward. Additionally the binary file must be saved in order to preserve the changes made.

+
+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address of the instruction to convert to nops
  • +
  • arch (Architecture) – (optional) the architecture of the instructions if different from the default
  • +
+
Returns:

True on success, False on failure.

+
Return type:

bool

+
Example:
>>> bv.get_disassembly(0x100012fb)
+'call    0x10001629'
+>>> bv.convert_to_nop(0x100012fb)
+True
+>>> #The above 'call' instruction is 5 bytes, a nop in x86 is 1 byte,
+>>> # thus 5 nops are used:
+>>> bv.get_disassembly(0x100012fb)
+'nop'
+>>> bv.get_next_disassembly()
+'nop'
+>>> bv.get_next_disassembly()
+'nop'
+>>> bv.get_next_disassembly()
+'nop'
+>>> bv.get_next_disassembly()
+'nop'
+>>> bv.get_next_disassembly()
+'mov     byte [ebp-0x1c], al'
+
+
+
+
+ +
+
+create_database(filename, progress_func=None)[source]
+

create_database writes the current database (.bndb) file out to the specified file.

+ +++ + + + + + + + +
Parameters:
    +
  • filename (str) – path and filename to write the bndb to, this string should have “.bndb” appended to it.
  • +
  • progress_func (callable()) – optional function to be called with the current progress and total count.
  • +
+
Returns:

true on success, false on failure

+
Return type:

bool

+
+
+ +
+
+create_user_function(addr, plat=None)[source]
+

create_user_function add a new user function of the given plat at the virtual address addr

+ +++ + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address of the user function to be added
  • +
  • plat (Platform) – Platform for the function to be added
  • +
+
Return type:

None

+
Example:
>>> bv.create_user_function(1)
+>>> bv.functions
+[<func: x86_64@0x1>]
+
+
+
+
+ +
+
+define_auto_symbol(sym)[source]
+

define_auto_symbol adds a symbol to the internal list of automatically discovered Symbol objects in a given +namespace.

+
+

Warning

+

If multiple symbols for the same address are defined, only the most recent symbol will ever be used.

+
+ +++ + + + + + +
Parameters:sym (Symbol) – the symbol to define
Return type:None
+
+ +
+
+define_auto_symbol_and_var_or_function(sym, sym_type, plat=None)[source]
+

define_auto_symbol_and_var_or_function

+
+

Warning

+

If multiple symbols for the same address are defined, only the most recent symbol will ever be used.

+
+ +++ + + + + + +
Parameters:
    +
  • sym (Symbol) – the symbol to define
  • +
  • sym_type (SymbolType) – Type of symbol being defined
  • +
  • plat (Platform) – (optional) platform
  • +
+
Return type:

None

+
+
+ +
+
+define_data_var(addr, var_type)[source]
+

define_data_var defines a non-user data variable var_type at the virtual address addr.

+ +++ + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address to define the given data variable
  • +
  • var_type (Type) – type to be defined at the given virtual address
  • +
+
Return type:

None

+
Example:
>>> t = bv.parse_type_string("int foo")
+>>> t
+(<type: int32_t>, 'foo')
+>>> bv.define_data_var(bv.entry_point, t[0])
+>>>
+
+
+
+
+ +
+
+define_imported_function(import_addr_sym, func)[source]
+

define_imported_function defines an imported Function func with a ImportedFunctionSymbol type.

+ +++ + + + + + +
Parameters:
    +
  • import_addr_sym (Symbol) – A Symbol object with type ImportedFunctionSymbol
  • +
  • func (Function) – A Function object to define as an imported function
  • +
+
Return type:

None

+
+
+ +
+
+define_type(type_id, default_name, type_obj)[source]
+

define_type registers a Type type_obj of the given name in the global list of types for +the current BinaryView. This method should only be used for automatically generated types.

+ +++ + + + + + + + + + +
Parameters:
    +
  • type_id (str) – Unique identifier for the automatically generated type
  • +
  • default_name (QualifiedName) – Name of the type to be registered
  • +
  • type_obj (Type) – Type object to be registered
  • +
+
Returns:

Registered name of the type. May not be the same as the requested name if the user has renamed types.

+
Return type:

QualifiedName

+
Example:
>>> type, name = bv.parse_type_string("int foo")
+>>> registered_name = bv.define_type(Type.generate_auto_type_id("source", name), name, type)
+>>> bv.get_type_by_name(registered_name)
+<type: int32_t>
+
+
+
+
+ +
+
+define_user_data_var(addr, var_type)[source]
+

define_user_data_var defines a user data variable var_type at the virtual address addr.

+ +++ + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address to define the given data variable
  • +
  • var_type (binaryninja.Type) – type to be defined at the given virtual address
  • +
+
Return type:

None

+
Example:
>>> t = bv.parse_type_string("int foo")
+>>> t
+(<type: int32_t>, 'foo')
+>>> bv.define_user_data_var(bv.entry_point, t[0])
+>>>
+
+
+
+
+ +
+
+define_user_symbol(sym)[source]
+

define_user_symbol adds a symbol to the internal list of user added Symbol objects.

+
+

Warning

+

If multiple symbols for the same address are defined, only the most recent symbol will ever be used.

+
+ +++ + + + + + +
Parameters:sym (Symbol) – the symbol to define
Return type:None
+
+ +
+
+define_user_type(name, type_obj)[source]
+

define_user_type registers a Type type_obj of the given name in the global list of user +types for the current BinaryView.

+ +++ + + + + + + + +
Parameters:
    +
  • name (QualifiedName) – Name of the user type to be registered
  • +
  • type_obj (Type) – Type object to be registered
  • +
+
Return type:

None

+
Example:
>>> type, name = bv.parse_type_string("int foo")
+>>> bv.define_user_type(name, type)
+>>> bv.get_type_by_name(name)
+<type: int32_t>
+
+
+
+
+ +
+
+eval(expression, here=0)[source]
+

Evaluates an string expression to an integer value. This is a more concise alias for the parse_expression API +See parse_expression for details on usage.

+
+ +
+
+classmethod external_namespace()[source]
+

External namespace for the current BinaryView

+
+ +
+
+find_next_constant(start, constant, settings=None)[source]
+

find_next_constant searches for integer constant constant occurring in the linear view output starting at the virtual +address start until the end of the BinaryView.

+ +++ + + + +
Parameters:
    +
  • start (int) – virtual address to start searching from.
  • +
  • constant (int) – constant to search for
  • +
+
+
+ +
+
+find_next_data(start, data, flags=<FindFlag.FindCaseSensitive: 0>)[source]
+

find_next_data searches for the bytes data starting at the virtual address start until the end of the BinaryView.

+ +++ + + + +
Parameters:
    +
  • start (int) – virtual address to start searching from.
  • +
  • data (str) – data to search for
  • +
  • flags (FindFlag) – (optional) defaults to case-insensitive data search
  • +
+
+
+ +
+
+find_next_text(start, text, settings=None, flags=<FindFlag.FindCaseSensitive: 0>)[source]
+

find_next_text searches for string text occurring in the linear view output starting at the virtual +address start until the end of the BinaryView.

+ +++ + + + +
Parameters:
    +
  • start (int) – virtual address to start searching from.
  • +
  • text (str) – text to search for
  • +
  • flags (FindFlag) – (optional) defaults to case-insensitive data search
  • +
+
+
+ +
+
+get_address_for_data_offset(offset)[source]
+
+ +
+
+get_address_input(prompt, title, current_address=None)[source]
+
+ +
+
+get_basic_blocks_at(addr)[source]
+

get_basic_blocks_at get a list of BasicBlock objects which exist at the provided virtual address.

+ +++ + + + + + + + +
Parameters:addr (int) – virtual address of BasicBlock desired
Returns:a list of BasicBlock objects
Return type:list(BasicBlock)
+
+ +
+
+get_basic_blocks_starting_at(addr)[source]
+

get_basic_blocks_starting_at get a list of BasicBlock objects which start at the provided virtual address.

+ +++ + + + + + + + +
Parameters:addr (int) – virtual address of BasicBlock desired
Returns:a list of BasicBlock objects
Return type:list(BasicBlock)
+
+ +
+
+get_code_refs(addr, length=None)[source]
+

get_code_refs returns a list of ReferenceSource objects (xrefs or cross-references) that point to the provided virtual address.

+ +++ + + + + + + + + + +
Parameters:

addr (int) – virtual address to query for references

+
Returns:

List of References for the given virtual address

+
Return type:

list(ReferenceSource)

+
Example:
>>> bv.get_code_refs(here)
+[<ref: x86@0x4165ff>]
+>>>
+
+
+
+
+ +
+
+get_data_refs(addr, length=None)[source]
+

get_data_refs returns a list of virtual addresses of data which references addr. Optionally specifying +a length. When length is set get_data_refs returns the data which references in the range addr-addr``+``length.

+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address to query for references
  • +
  • length (int) – optional length of query
  • +
+
Returns:

list of integers

+
Return type:

list(integer)

+
Example:
>>> bv.get_data_refs(here)
+[4203812]
+>>>
+
+
+
+
+ +
+
+get_data_refs_from(addr, length=None)[source]
+

get_data_refs_from returns a list of virtual addresses referenced by the address addr. Optionally specifying +a length. When length is set get_data_refs_from returns the data referenced in the range addr-addr``+``length.

+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address to query for references
  • +
  • length (int) – optional length of query
  • +
+
Returns:

list of integers

+
Return type:

list(integer)

+
Example:
>>> bv.get_data_refs_from(here)
+[4200327]
+>>>
+
+
+
+
+ +
+
+get_data_var_at(addr)[source]
+

get_data_var_at returns the data type at a given virtual address.

+ +++ + + + + + + + + + +
Parameters:

addr (int) – virtual address to get the data type from

+
Returns:

returns the DataVariable at the given virtual address, None on error.

+
Return type:

DataVariable

+
Example:
>>> t = bv.parse_type_string("int foo")
+>>> bv.define_data_var(bv.entry_point, t[0])
+>>> bv.get_data_var_at(bv.entry_point)
+<var 0x100001174: int32_t>
+
+
+
+
+ +
+
+get_disassembly(addr, arch=None)[source]
+

get_disassembly simple helper function for printing disassembly of a given address

+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address of instruction
  • +
  • arch (Architecture) – optional Architecture, self.arch is used if this parameter is None
  • +
+
Returns:

a str representation of the instruction at virtual address addr or None

+
Return type:

str or None

+
Example:
>>> bv.get_disassembly(bv.entry_point)
+'push    ebp'
+>>>
+
+
+
+
+ +
+
+get_entropy(addr, length, block_size=0)[source]
+

get_entropy returns the shannon entropy given the start addr, length in bytes, and optionally in +block_size chunks.

+ +++ + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address
  • +
  • length (int) – total length in bytes
  • +
  • block_size (int) – optional block size
  • +
+
Returns:

list of entropy values for each chunk

+
Return type:

list of entropy values or an empty list

+
+
+ +
+
+get_function_at(addr, plat=None)[source]
+

get_function_at gets a Function object for the function that starts at virtual address addr:

+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – starting virtual address of the desired function
  • +
  • plat (Platform) – plat of the desired function
  • +
+
Returns:

returns a Function object or None for the function at the virtual address provided

+
Return type:

Function

+
Example:
>>> bv.get_function_at(bv.entry_point)
+<func: x86_64@0x100001174>
+>>>
+
+
+
+
+ +
+
+get_functions_at(addr)[source]
+

get_functions_at get a list of binaryninja.Function objects (one for each valid plat) at the given +virtual address. Binary Ninja does not limit the number of platforms in a given file thus there may be multiple +functions defined from different architectures at the same location. This API allows you to query all of valid +platforms.

+ +++ + + + + + + + +
Parameters:addr (int) – virtual address of the desired Function object list.
Returns:a list of binaryninja.Function objects defined at the provided virtual address
Return type:list(Function)
+
+ +
+
+get_functions_containing(addr)[source]
+

get_functions_containing returns a list of functions which contain the given address or None on failure.

+ +++ + + + + + +
Parameters:addr (int) – virtual address to query.
Return type:list of Function objects or None
+
+ +
+
+get_instruction_length(addr, arch=None)[source]
+

get_instruction_length returns the number of bytes in the instruction of Architecture arch at the virtual +address addr

+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address of the instruction query
  • +
  • arch (Architecture) – (optional) the architecture of the instructions if different from the default
  • +
+
Returns:

Number of bytes in instruction

+
Return type:

int

+
Example:
>>> bv.get_disassembly(0x100012f1)
+'xor     eax, eax'
+>>> bv.get_instruction_length(0x100012f1)
+2L
+>>>
+
+
+
+
+ +
+
+get_linear_disassembly(settings)[source]
+

get_linear_disassembly gets an iterator for all lines in the linear disassembly of the view for the given +disassembly settings.

+
+

Note

+

linear_disassembly doesn’t just return disassembly it will return a single line from the linear view, and thus will contain both data views, and disassembly.

+
+ +++ + + + + + + + + + +
Parameters:

settings (DisassemblySettings) – instance specifying the desired output formatting.

+
Returns:

An iterator containing formatted disassembly lines.

+
Return type:

LinearDisassemblyIterator

+
Example:
>>> settings = DisassemblySettings()
+>>> lines = bv.get_linear_disassembly(settings)
+>>> for line in lines:
+...  print(line)
+...  break
+...
+cf fa ed fe 07 00 00 01  ........
+
+
+
+
+ +
+
+get_linear_disassembly_position_at(addr, settings)[source]
+

get_linear_disassembly_position_at instantiates a LinearDisassemblyPosition object for use in +get_previous_linear_disassembly_lines() or get_next_linear_disassembly_lines().

+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address of linear disassembly position
  • +
  • settings (DisassemblySettings) – an instantiated DisassemblySettings object
  • +
+
Returns:

An instantiated LinearDisassemblyPosition object for the provided virtual address

+
Return type:

LinearDisassemblyPosition

+
Example:
>>> settings = DisassemblySettings()
+>>> pos = bv.get_linear_disassembly_position_at(0x1000149f, settings)
+>>> lines = bv.get_previous_linear_disassembly_lines(pos, settings)
+>>> lines
+[<0x1000149a: pop     esi>, <0x1000149b: pop     ebp>,
+<0x1000149c: retn    0xc>, <0x1000149f: >]
+
+
+
+
+ +
+
+get_modification(addr, length=None)[source]
+

get_modification returns the modified bytes of up to length bytes from virtual address addr, or if +length is None returns the ModificationStatus.

+ +++ + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address to get modification from
  • +
  • length (int) – optional length of modification
  • +
+
Returns:

Either ModificationStatus of the byte at addr, or string of modified bytes at addr

+
Return type:

ModificationStatus or str

+
+
+ +
+
+get_next_basic_block_start_after(addr)[source]
+
+
get_next_basic_block_start_after returns the virtual address of the BasicBlock that occurs after the virtual
+
address addr
+
+ +++ + + + + + + + + + +
Parameters:

addr (int) – the virtual address to start looking from.

+
Returns:

the virtual address of the next BasicBlock

+
Return type:

int

+
Example:
>>> hex(bv.get_next_basic_block_start_after(bv.entry_point))
+'0x100014a8L'
+>>> hex(bv.get_next_basic_block_start_after(0x100014a8))
+'0x100014adL'
+>>>
+
+
+
+
+ +
+
+get_next_data_after(addr)[source]
+

get_next_data_after retrieves the virtual address of the next non-code byte.

+ +++ + + + + + + + + + +
Parameters:

addr (int) – the virtual address to start looking from.

+
Returns:

the virtual address of the next data byte which is data, not code

+
Return type:

int

+
Example:
>>> hex(bv.get_next_data_after(0x10000000))
+'0x10000001L'
+
+
+
+
+ +
+
+get_next_data_var_after(addr)[source]
+

get_next_data_var_after retrieves the next virtual address of the next DataVariable

+ +++ + + + + + + + + + +
Parameters:

addr (int) – the virtual address to start looking from.

+
Returns:

the virtual address of the next DataVariable

+
Return type:

int

+
Example:
>>> hex(bv.get_next_data_var_after(0x10000000))
+'0x1000003cL'
+>>> bv.get_data_var_at(0x1000003c)
+<var 0x1000003c: int32_t>
+>>>
+
+
+
+
+ +
+
+get_next_disassembly(arch=None)[source]
+

get_next_disassembly simple helper function for printing disassembly of the next instruction. +The internal state of the instruction to be printed is stored in the next_address attribute

+ +++ + + + + + + + + + +
Parameters:

arch (Architecture) – optional Architecture, self.arch is used if this parameter is None

+
Returns:

a str representation of the instruction at virtual address self.next_address

+
Return type:

str or None

+
Example:
>>> bv.get_next_disassembly()
+'push    ebp'
+>>> bv.get_next_disassembly()
+'mov     ebp, esp'
+>>> #Now reset the starting point back to the entry point
+>>> bv.next_address = bv.entry_point
+>>> bv.get_next_disassembly()
+'push    ebp'
+>>>
+
+
+
+
+ +
+
+get_next_function_start_after(addr)[source]
+

get_next_function_start_after returns the virtual address of the Function that occurs after the virtual address +addr

+ +++ + + + + + + + + + +
Parameters:

addr (int) – the virtual address to start looking from.

+
Returns:

the virtual address of the next Function

+
Return type:

int

+
Example:
>>> bv.get_next_function_start_after(bv.entry_point)
+268441061L
+>>> hex(bv.get_next_function_start_after(bv.entry_point))
+'0x100015e5L'
+>>> hex(bv.get_next_function_start_after(0x100015e5))
+'0x10001629L'
+>>> hex(bv.get_next_function_start_after(0x10001629))
+'0x1000165eL'
+>>>
+
+
+
+
+ +
+
+get_next_linear_disassembly_lines(pos, settings)[source]
+

get_next_linear_disassembly_lines retrieves a list of LinearDisassemblyLine objects for the +next disassembly lines, and updates the LinearDisassemblyPosition passed in. This function can be called +repeatedly to get more lines of linear disassembly.

+ +++ + + + + + + + +
Parameters: +
Returns:

a list of LinearDisassemblyLine objects for the next lines.

+
Example:
>>> settings = DisassemblySettings()
+>>> pos = bv.get_linear_disassembly_position_at(0x10001483, settings)
+>>> bv.get_next_linear_disassembly_lines(pos, settings)
+[<0x10001483: xor     eax, eax  {0x0}>, <0x10001485: inc     eax  {0x1}>, ... , <0x10001488: >]
+>>> bv.get_next_linear_disassembly_lines(pos, settings)
+[<0x10001488: push    dword [ebp+0x10 {arg_c}]>, ... , <0x1000149a: >]
+>>>
+
+
+
+
+ +
+
+get_previous_basic_block_end_before(addr)[source]
+

get_previous_basic_block_end_before

+ +++ + + + + + + + + + +
Parameters:

addr (int) – the virtual address to start looking from.

+
Returns:

the virtual address of the previous BasicBlock end

+
Return type:

int

+
Example:
>>> hex(bv.entry_point)
+'0x1000149fL'
+>>> hex(bv.get_next_basic_block_start_after(bv.entry_point))
+'0x100014a8L'
+>>> hex(bv.get_previous_basic_block_end_before(0x100014a8))
+'0x100014a8L'
+
+
+
+
+ +
+
+get_previous_basic_block_start_before(addr)[source]
+

get_previous_basic_block_start_before returns the virtual address of the BasicBlock that occurs prior to the +provided virtual address

+ +++ + + + + + + + + + +
Parameters:

addr (int) – the virtual address to start looking from.

+
Returns:

the virtual address of the previous BasicBlock

+
Return type:

int

+
Example:
>>> hex(bv.entry_point)
+'0x1000149fL'
+>>> hex(bv.get_next_basic_block_start_after(bv.entry_point))
+'0x100014a8L'
+>>> hex(bv.get_previous_basic_block_start_before(0x100014a8))
+'0x1000149fL'
+>>>
+
+
+
+
+ +
+
+get_previous_data_before(addr)[source]
+

get_previous_data_before

+ +++ + + + + + + + + + +
Parameters:

addr (int) – the virtual address to start looking from.

+
Returns:

the virtual address of the previous data (non-code) byte

+
Return type:

int

+
Example:
>>> hex(bv.get_previous_data_before(0x1000001))
+'0x1000000L'
+>>>
+
+
+
+
+ +
+
+get_previous_data_var_before(addr)[source]
+

get_previous_data_var_before

+ +++ + + + + + + + + + +
Parameters:

addr (int) – the virtual address to start looking from.

+
Returns:

the virtual address of the previous DataVariable

+
Return type:

int

+
Example:
>>> hex(bv.get_previous_data_var_before(0x1000003c))
+'0x10000000L'
+>>> bv.get_data_var_at(0x10000000)
+<var 0x10000000: int16_t>
+>>>
+
+
+
+
+ +
+
+get_previous_function_start_before(addr)[source]
+

get_previous_function_start_before returns the virtual address of the Function that occurs prior to the +virtual address provided

+ +++ + + + + + + + + + +
Parameters:

addr (int) – the virtual address to start looking from.

+
Returns:

the virtual address of the previous Function

+
Return type:

int

+
Example:
>>> hex(bv.entry_point)
+'0x1000149fL'
+>>> hex(bv.get_next_function_start_after(bv.entry_point))
+'0x100015e5L'
+>>> hex(bv.get_previous_function_start_before(0x100015e5))
+'0x1000149fL'
+>>>
+
+
+
+
+ +
+
+get_previous_linear_disassembly_lines(pos, settings)[source]
+

get_previous_linear_disassembly_lines retrieves a list of LinearDisassemblyLine objects for the +previous disassembly lines, and updates the LinearDisassemblyPosition passed in. This function can be called +repeatedly to get more lines of linear disassembly.

+ +++ + + + + + + + +
Parameters: +
Returns:

a list of LinearDisassemblyLine objects for the previous lines.

+
Example:
>>> settings = DisassemblySettings()
+>>> pos = bv.get_linear_disassembly_position_at(0x1000149a, settings)
+>>> bv.get_previous_linear_disassembly_lines(pos, settings)
+[<0x10001488: push    dword [ebp+0x10 {arg_c}]>, ... , <0x1000149a: >]
+>>> bv.get_previous_linear_disassembly_lines(pos, settings)
+[<0x10001483: xor     eax, eax  {0x0}>, ... , <0x10001488: >]
+
+
+
+
+ +
+
+get_recent_basic_block_at(addr)[source]
+
+ +
+
+get_recent_function_at(addr)[source]
+
+ +
+
+get_section_by_name(name)[source]
+
+ +
+
+get_sections_at(addr)[source]
+
+ +
+
+get_segment_at(addr)[source]
+
+ +
+
+get_strings(start=None, length=None)[source]
+

get_strings returns a list of strings defined in the binary in the optional virtual address range: +start-(start+length)

+ +++ + + + + + + + + + +
Parameters:
    +
  • start (int) – optional virtual address to start the string list from, defaults to start of the binary
  • +
  • length (int) – optional length range to return strings from, defaults to length of the binary
  • +
+
Returns:

a list of all strings or a list of strings defined between start and start+length

+
Return type:

list(str())

+
Example:
>>> bv.get_strings(0x1000004d, 1)
+[<AsciiString: 0x1000004d, len 0x2c>]
+>>>
+
+
+
+
+ +
+
+get_symbol_at(addr, namespace=None)[source]
+

get_symbol_at returns the Symbol at the provided virtual address.

+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address to query for symbol
  • +
  • namespace (NameSpace) – the namespace of the symbols to retrieve
  • +
+
Returns:

Symbol for the given virtual address

+
Return type:

Symbol

+
Example:
>>> bv.get_symbol_at(bv.entry_point)
+<FunctionSymbol: "_start" @ 0x100001174>
+>>>
+
+
+
+
+ +
+
+get_symbol_by_raw_name(name, namespace=None)[source]
+

get_symbol_by_raw_name retrieves a Symbol object for the given a raw (mangled) name.

+ +++ + + + + + + + + + +
Parameters:
    +
  • name (str) – raw (mangled) name of Symbol to be retrieved
  • +
  • namespace (NameSpace) – the namespace to search for the given symbol
  • +
+
Returns:

Symbol object corresponding to the provided raw name

+
Return type:

Symbol

+
Example:
>>> bv.get_symbol_by_raw_name('?testf@Foobar@@SA?AW4foo@1@W421@@Z')
+<FunctionSymbol: "public: static enum Foobar::foo __cdecl Foobar::testf(enum Foobar::foo)" @ 0x10001100>
+>>>
+
+
+
+
+ +
+
+get_symbols(start=None, length=None, namespace=None)[source]
+

get_symbols retrieves the list of all Symbol objects in the optionally provided range.

+ +++ + + + + + + + + + +
Parameters:
    +
  • start (int) – optional start virtual address
  • +
  • length (int) – optional length
  • +
+
Returns:

list of all Symbol objects, or those Symbol objects in the range of start-start+length

+
Return type:

list(Symbol)

+
Example:
>>> bv.get_symbols(0x1000200c, 1)
+[<ImportAddressSymbol: "KERNEL32!IsProcessorFeaturePresent@IAT" @ 0x1000200c>]
+>>>
+
+
+
+
+ +
+
+get_symbols_by_name(name, namespace=None)[source]
+

get_symbols_by_name retrieves a list of Symbol objects for the given symbol name.

+ +++ + + + + + + + + + +
Parameters:
    +
  • name (str) – name of Symbol object to be retrieved
  • +
  • namespace (NameSpace) – the namespace of the symbol
  • +
+
Returns:

Symbol object corresponding to the provided name

+
Return type:

Symbol

+
Example:
>>> bv.get_symbols_by_name('?testf@Foobar@@SA?AW4foo@1@W421@@Z')
+[<FunctionSymbol: "public: static enum Foobar::foo __cdecl Foobar::testf(enum Foobar::foo)" @ 0x10001100>]
+>>>
+
+
+
+
+ +
+
+get_symbols_of_type(sym_type, start=None, length=None, namespace=None)[source]
+
+
get_symbols_of_type retrieves a list of all Symbol objects of the provided symbol type in the optionally
+
provided range.
+
+ +++ + + + + + + + + + +
Parameters:
    +
  • sym_type (SymbolType) – A Symbol type: Symbol.
  • +
  • start (int) – optional start virtual address
  • +
  • length (int) – optional length
  • +
+
Returns:

list of all Symbol objects of type sym_type, or those Symbol objects in the range of start-start+length

+
Return type:

list(Symbol)

+
Example:
>>> bv.get_symbols_of_type(SymbolType.ImportAddressSymbol, 0x10002028, 1)
+[<ImportAddressSymbol: "KERNEL32!GetCurrentThreadId@IAT" @ 0x10002028>]
+>>>
+
+
+
+
+ +
+
+get_type_by_id(id)[source]
+

get_type_by_id returns the defined type whose unique identifier corresponds with the provided id

+ +++ + + + + + + + + + +
Parameters:

id (str) – Unique identifier to lookup

+
Returns:

A Type or None if the type does not exist

+
Return type:

Type or None

+
Example:
>>> type, name = bv.parse_type_string("int foo")
+>>> type_id = Type.generate_auto_type_id("source", name)
+>>> bv.define_type(type_id, name, type)
+>>> bv.get_type_by_id(type_id)
+<type: int32_t>
+>>>
+
+
+
+
+ +
+
+get_type_by_name(name)[source]
+

get_type_by_name returns the defined type whose name corresponds with the provided name

+ +++ + + + + + + + + + +
Parameters:

name (QualifiedName) – Type name to lookup

+
Returns:

A Type or None if the type does not exist

+
Return type:

Type or None

+
Example:
>>> type, name = bv.parse_type_string("int foo")
+>>> bv.define_user_type(name, type)
+>>> bv.get_type_by_name(name)
+<type: int32_t>
+>>>
+
+
+
+
+ +
+
+get_type_id(name)[source]
+

get_type_id returns the unique identifier of the defined type whose name corresponds with the +provided name

+ +++ + + + + + + + + + +
Parameters:

name (QualifiedName) – Type name to lookup

+
Returns:

The unique identifier of the type

+
Return type:

str

+
Example:
>>> type, name = bv.parse_type_string("int foo")
+>>> type_id = Type.generate_auto_type_id("source", name)
+>>> registered_name = bv.define_type(type_id, name, type)
+>>> bv.get_type_id(registered_name) == type_id
+True
+>>>
+
+
+
+
+ +
+
+get_type_name_by_id(id)[source]
+

get_type_name_by_id returns the defined type name whose unique identifier corresponds with the provided id

+ +++ + + + + + + + + + +
Parameters:

id (str) – Unique identifier to lookup

+
Returns:

A QualifiedName or None if the type does not exist

+
Return type:

QualifiedName or None

+
Example:
>>> type, name = bv.parse_type_string("int foo")
+>>> type_id = Type.generate_auto_type_id("source", name)
+>>> bv.define_type(type_id, name, type)
+'foo'
+>>> bv.get_type_name_by_id(type_id)
+'foo'
+>>>
+
+
+
+
+ +
+
+get_unique_section_names(name_list)[source]
+
+ +
+
+get_view_of_type(name)[source]
+

get_view_of_type returns the BinaryView associated with the provided name if it exists.

+ +++ + + + + + + + +
Parameters:name (str) – Name of the view to be retrieved
Returns:BinaryView object associated with the provided name or None on failure
Return type:BinaryView or None
+
+ +
+
+init()[source]
+
+ +
+
+insert(addr, data)[source]
+

insert inserts the bytes in data to the virtual address addr.

+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address to write to.
  • +
  • data (str) – data to be inserted at addr.
  • +
+
Returns:

number of bytes inserted to virtual address addr

+
Return type:

int

+
Example:
>>> bv.insert(0,"BBBB")
+4L
+>>> bv.read(0,8)
+'BBBBAAAA'
+
+
+
+
+ +
+
+classmethod internal_namespace()[source]
+

Internal namespace for the current BinaryView

+
+ +
+
+invert_branch(addr, arch=None)[source]
+

invert_branch convert the branch instruction of architecture arch at the virtual address addr to the +inverse branch.

+
+

Note

+

This API performs a binary patch, analysis may need to be updated afterward. Additionally the binary

+
+

file must be saved in order to preserve the changes made.

+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address of the instruction to be modified
  • +
  • arch (Architecture) – (optional) the architecture of the instructions if different from the default
  • +
+
Returns:

True on success, False on failure.

+
Return type:

bool

+
Example:
>>> bv.get_disassembly(0x1000130e)
+'je      0x10001317'
+>>> bv.invert_branch(0x1000130e)
+True
+>>>
+>>> bv.get_disassembly(0x1000130e)
+'jne     0x10001317'
+>>>
+
+
+
+
+ +
+
+is_always_branch_patch_available(addr, arch=None)[source]
+

is_always_branch_patch_available queries the architecture plugin to determine if the +instruction at addr can be made to always branch. The actual logic of which is implemented in the +perform_is_always_branch_patch_available in the corresponding architecture.

+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – the virtual address of the instruction to be patched
  • +
  • arch (Architecture) – (optional) the architecture for the current view
  • +
+
Returns:

True if the instruction can be patched, False otherwise

+
Return type:

bool

+
Example:
>>> bv.get_disassembly(0x100012ed)
+'test    eax, eax'
+>>> bv.is_always_branch_patch_available(0x100012ed)
+False
+>>> bv.get_disassembly(0x100012ef)
+'jg      0x100012f5'
+>>> bv.is_always_branch_patch_available(0x100012ef)
+True
+>>>
+
+
+
+
+ +
+
+is_invert_branch_patch_available(addr, arch=None)[source]
+

is_invert_branch_patch_available queries the architecture plugin to determine if the instruction at addr +is a branch that can be inverted. The actual logic of which is implemented in the +perform_is_invert_branch_patch_available in the corresponding architecture.

+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – the virtual address of the instruction to be patched
  • +
  • arch (Architecture) – (optional) the architecture of the instructions if different from the default
  • +
+
Returns:

True if the instruction can be patched, False otherwise

+
Return type:

bool

+
Example:
>>> bv.get_disassembly(0x100012ed)
+'test    eax, eax'
+>>> bv.is_invert_branch_patch_available(0x100012ed)
+False
+>>> bv.get_disassembly(0x100012ef)
+'jg      0x100012f5'
+>>> bv.is_invert_branch_patch_available(0x100012ef)
+True
+>>>
+
+
+
+
+ +
+
+is_never_branch_patch_available(addr, arch=None)[source]
+

is_never_branch_patch_available queries the architecture plugin to determine if the instruction at the +instruction at addr can be made to never branch. The actual logic of which is implemented in the +perform_is_never_branch_patch_available in the corresponding architecture.

+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – the virtual address of the instruction to be patched
  • +
  • arch (Architecture) – (optional) the architecture of the instructions if different from the default
  • +
+
Returns:

True if the instruction can be patched, False otherwise

+
Return type:

bool

+
Example:
>>> bv.get_disassembly(0x100012ed)
+'test    eax, eax'
+>>> bv.is_never_branch_patch_available(0x100012ed)
+False
+>>> bv.get_disassembly(0x100012ef)
+'jg      0x100012f5'
+>>> bv.is_never_branch_patch_available(0x100012ef)
+True
+>>>
+
+
+
+
+ +
+
+is_offset_code_semantics(addr)[source]
+

is_offset_code_semantics checks if an virtual address addr is semantically valid for code.

+ +++ + + + + + + + +
Parameters:addr (int) – a virtual address to be checked
Returns:true if the virtual address is valid for writing, false if the virtual address is invalid or error
Return type:bool
+
+ +
+
+is_offset_executable(addr)[source]
+

is_offset_executable checks if an virtual address addr is valid for executing.

+ +++ + + + + + + + +
Parameters:addr (int) – a virtual address to be checked
Returns:true if the virtual address is valid for executing, false if the virtual address is invalid or error
Return type:bool
+
+ +
+
+is_offset_extern_semantics(addr)[source]
+

is_offset_extern_semantics checks if an virtual address addr is semantically valid for external references.

+ +++ + + + + + + + +
Parameters:addr (int) – a virtual address to be checked
Returns:true if the virtual address is valid for writing, false if the virtual address is invalid or error
Return type:bool
+
+ +
+
+is_offset_readable(addr)[source]
+

is_offset_readable checks if an virtual address addr is valid for reading.

+ +++ + + + + + + + +
Parameters:addr (int) – a virtual address to be checked
Returns:true if the virtual address is valid for reading, false if the virtual address is invalid or error
Return type:bool
+
+ +
+
+is_offset_writable(addr)[source]
+

is_offset_writable checks if an virtual address addr is valid for writing.

+ +++ + + + + + + + +
Parameters:addr (int) – a virtual address to be checked
Returns:true if the virtual address is valid for writing, false if the virtual address is invalid or error
Return type:bool
+
+ +
+
+is_offset_writable_semantics(addr)[source]
+

is_offset_writable_semantics checks if an virtual address addr is semantically writable. Some sections +may have writable permissions for linking purposes but can be treated as read-only for the purposes of +analysis.

+ +++ + + + + + + + +
Parameters:addr (int) – a virtual address to be checked
Returns:true if the virtual address is valid for writing, false if the virtual address is invalid or error
Return type:bool
+
+ +
+
+is_skip_and_return_value_patch_available(addr, arch=None)[source]
+

is_skip_and_return_value_patch_available queries the architecture plugin to determine if the +instruction at addr is similar to an x86 “call” instruction which can be made to return a value. The actual +logic of which is implemented in the perform_is_skip_and_return_value_patch_available in the corresponding +architecture.

+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – the virtual address of the instruction to be patched
  • +
  • arch (Architecture) – (optional) the architecture of the instructions if different from the default
  • +
+
Returns:

True if the instruction can be patched, False otherwise

+
Return type:

bool

+
Example:
>>> bv.get_disassembly(0x100012f6)
+'mov     dword [0x10003020], eax'
+>>> bv.is_skip_and_return_value_patch_available(0x100012f6)
+False
+>>> bv.get_disassembly(0x100012fb)
+'call    0x10001629'
+>>> bv.is_skip_and_return_value_patch_available(0x100012fb)
+True
+>>>
+
+
+
+
+ +
+
+is_skip_and_return_zero_patch_available(addr, arch=None)[source]
+

is_skip_and_return_zero_patch_available queries the architecture plugin to determine if the +instruction at addr is similar to an x86 “call” instruction which can be made to return zero. The actual +logic of which is implemented in the perform_is_skip_and_return_zero_patch_available in the corresponding +architecture.

+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – the virtual address of the instruction to be patched
  • +
  • arch (Architecture) – (optional) the architecture of the instructions if different from the default
  • +
+
Returns:

True if the instruction can be patched, False otherwise

+
Return type:

bool

+
Example:
>>> bv.get_disassembly(0x100012f6)
+'mov     dword [0x10003020], eax'
+>>> bv.is_skip_and_return_zero_patch_available(0x100012f6)
+False
+>>> bv.get_disassembly(0x100012fb)
+'call    0x10001629'
+>>> bv.is_skip_and_return_zero_patch_available(0x100012fb)
+True
+>>>
+
+
+
+
+ +
+
+is_type_auto_defined(name)[source]
+

is_type_auto_defined queries the user type list of name. If name is not in the user type list then the name +is considered an auto type.

+ +++ + + + + + + + +
Parameters:

name (QualifiedName) – Name of type to query

+
Returns:

True if the type is not a user type. False if the type is a user type.

+
Example:
>>> bv.is_type_auto_defined("foo")
+True
+>>> bv.define_user_type("foo", bv.parse_type_string("struct {int x,y;}")[0])
+>>> bv.is_type_auto_defined("foo")
+False
+>>>
+
+
+
+
+ +
+
+is_valid_offset(addr)[source]
+

is_valid_offset checks if an virtual address addr is valid .

+ +++ + + + + + + + +
Parameters:addr (int) – a virtual address to be checked
Returns:true if the virtual address is valid, false if the virtual address is invalid or error
Return type:bool
+
+ +
+
+navigate(view, offset)[source]
+
+ +
+
+never_branch(addr, arch=None)[source]
+

never_branch convert the branch instruction of architecture arch at the virtual address addr to +a fall through.

+
+

Note

+

This API performs a binary patch, analysis may need to be updated afterward. Additionally the binary file must be saved in order to preserve the changes made.

+
+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address of the instruction to be modified
  • +
  • arch (Architecture) – (optional) the architecture of the instructions if different from the default
  • +
+
Returns:

True on success, False on failure.

+
Return type:

bool

+
Example:
>>> bv.get_disassembly(0x1000130e)
+'jne     0x10001317'
+>>> bv.never_branch(0x1000130e)
+True
+>>> bv.get_disassembly(0x1000130e)
+'nop'
+>>>
+
+
+
+
+ +
+
+classmethod new(data=None, file_metadata=None)[source]
+
+ +
+
+notify_data_inserted(offset, length)[source]
+
+ +
+
+notify_data_removed(offset, length)[source]
+
+ +
+
+notify_data_written(offset, length)[source]
+
+ +
+
+classmethod open(src, file_metadata=None)[source]
+
+ +
+
+parse_expression(expression, here=0)[source]
+

Evaluates an string expression to an integer value.

+
+
The parser uses the following rules:
+
+
    +
  • symbols are defined by the lexer as [A-Za-z0-9_:<>][A-Za-z0-9_:$-<>]+ or anything enclosed in either single or
  • +
+
+
+
double quotes
+
    +
  • Numbers are defaulted to hexadecimal thus _printf + 10 is equivalent to printf + 0x10 If decimal numbers required use the decimal prefix.
  • +
  • Since numbers and symbols can be ambiguous its recommended that you prefix your numbers with the following: +- 0x - Hexadecimal +- 0n - Decimal +- 0 - Octal
  • +
  • In the case of an ambiguous number/symbol (one with no prefix) for instance 12345 we will first attempt +to look up the string as a symbol, if a symbol is found its address is used, otherwise we attempt to convert +it to a hexadecimal number.
  • +
  • The following operations are valid: +, -, *, /, %, (), &, |, ^, ~
  • +
  • In addition to the above operators there are _il-style_ dereference operators +- [<expression>] - read the _current address size_ at <expression> +- [<expression>].b - read the byte at <expression> +- [<expression>].w - read the word (2 bytes) at <expression> +- [<expression>].d - read the dword (4 bytes) at <expression> +- [<expression>].q - read the quadword (8 bytes) at <expression>
  • +
  • The $here keyword can be used in calculations and is defined as the here parameter
  • +
+
+
+
+
+ +++ + + + + + +
Parameters:
    +
  • expression (string) – Arithmetic expression to be evaluated
  • +
  • here (int) – (optional) Base address for relative expressions, defaults to zero
  • +
+
Return type:

int

+
+
+ +
+
+parse_type_string(text)[source]
+

parse_type_string converts C-style string into a Type.

+ +++ + + + + + + + + + +
Parameters:

text (str) – C-style string of type to create

+
Returns:

A tuple of a Type and type name

+
Return type:

tuple(Type, QualifiedName)

+
Example:
>>> bv.parse_type_string("int foo")
+(<type: int32_t>, 'foo')
+>>>
+
+
+
+
+ +
+
+perform_get_address_size()[source]
+
+ +
+
+perform_get_default_endianness()[source]
+

perform_get_default_endianness implements a check which returns true if the BinaryView is executable.

+
+

Note

+

This method may be implemented for custom BinaryViews that are not LittleEndian.

+
+
+

Warning

+

This method must not be called directly.

+
+ +++ + + + + + +
Returns:either Endianness.LittleEndian or Endianness.BigEndian
Return type:Endianness
+
+ +
+
+perform_get_entry_point()[source]
+

perform_get_entry_point implements a query for the initial entry point for code execution.

+
+

Note

+

This method should be implemented for custom BinaryViews that are executable.

+
+
+

Warning

+

This method must not be called directly.

+
+ +++ + + + + + +
Returns:the virtual address of the entry point
Return type:int
+
+ +
+
+perform_get_length()[source]
+

perform_get_length implements a query for the size of the virtual address range used by +the BinaryView.

+
+

Note

+

This method may be overridden by custom BinaryViews. Use add_auto_segment to provide

+
+

data without overriding this method. +.. warning:: This method must not be called directly.

+ +++ + + + + + +
Returns:returns the size of the virtual address range used by the BinaryView.
Return type:int
+
+ +
+
+perform_get_modification(addr)[source]
+

perform_get_modification implements query to the whether the virtual address addr is modified.

+
+

Note

+

This method may be overridden by custom BinaryViews. Use add_auto_segment to provide

+
+

data without overriding this method. +.. warning:: This method must not be called directly.

+ +++ + + + + + + + +
Parameters:addr (int) – a virtual address to be checked
Returns:One of the following: Original = 0, Changed = 1, Inserted = 2
Return type:ModificationStatus
+
+ +
+
+perform_get_next_valid_offset(addr)[source]
+

perform_get_next_valid_offset implements a query for the next valid readable, writable, or executable virtual +memory address.

+
+

Note

+

This method may be overridden by custom BinaryViews. Use add_auto_segment to provide

+
+

data without overriding this method. +.. warning:: This method must not be called directly.

+ +++ + + + + + + + +
Parameters:addr (int) – a virtual address to start checking from.
Returns:the next readable, writable, or executable virtual memory address
Return type:int
+
+ +
+
+perform_get_start()[source]
+

perform_get_start implements a query for the first readable, writable, or executable virtual address in +the BinaryView.

+
+

Note

+

This method may be overridden by custom BinaryViews. Use add_auto_segment to provide

+
+

data without overriding this method. +.. warning:: This method must not be called directly.

+ +++ + + + + + +
Returns:returns the first virtual address in the BinaryView.
Return type:int
+
+ +
+
+perform_insert(addr, data)[source]
+

perform_insert implements a mapping between a virtual address and an absolute file offset, inserting +the bytes data to rebased address addr.

+
+

Note

+

This method may be overridden by custom BinaryViews. If not overridden, inserting is disallowed

+
+
+

Warning

+

This method must not be called directly.

+
+ +++ + + + + + + + +
Parameters:
    +
  • addr (int) – a virtual address
  • +
  • data (str) – the data to be inserted
  • +
+
Returns:

length of data inserted, should return 0 on error

+
Return type:

int

+
+
+ +
+
+perform_is_executable()[source]
+

perform_is_executable implements a check which returns true if the BinaryView is executable.

+
+

Note

+

This method must be implemented for custom BinaryViews that are executable.

+
+
+

Warning

+

This method must not be called directly.

+
+ +++ + + + + + +
Returns:true if the current BinaryView is executable, false if it is not executable or on error
Return type:bool
+
+ +
+
+perform_is_offset_executable(addr)[source]
+

perform_is_offset_executable implements a check if a virtual address addr is executable.

+
+

Note

+

This method may be overridden by custom BinaryViews. Use add_auto_segment to provide

+
+

data without overriding this method. +.. warning:: This method must not be called directly.

+ +++ + + + + + + + +
Parameters:addr (int) – a virtual address to be checked
Returns:true if the virtual address is executable, false if the virtual address is not executable or error
Return type:int
+
+ +
+
+perform_is_offset_readable(offset)[source]
+

perform_is_offset_readable implements a check if an virtual address is readable.

+
+

Note

+

This method may be overridden by custom BinaryViews. Use add_auto_segment to provide

+
+

data without overriding this method. +.. warning:: This method must not be called directly.

+ +++ + + + + + + + +
Parameters:offset (int) – a virtual address to be checked
Returns:true if the virtual address is readable, false if the virtual address is not readable or error
Return type:bool
+
+ +
+
+perform_is_offset_writable(addr)[source]
+

perform_is_offset_writable implements a check if a virtual address addr is writable.

+
+

Note

+

This method may be overridden by custom BinaryViews. Use add_auto_segment to provide

+
+

data without overriding this method. +.. warning:: This method must not be called directly.

+ +++ + + + + + + + +
Parameters:addr (int) – a virtual address to be checked
Returns:true if the virtual address is writable, false if the virtual address is not writable or error
Return type:bool
+
+ +
+
+perform_is_relocatable()[source]
+

perform_is_relocatable implements a check which returns true if the BinaryView is relocatable. Defaults to +True.

+
+

Note

+

This method may be implemented for custom BinaryViews that are relocatable.

+
+
+

Warning

+

This method must not be called directly.

+
+ +++ + + + + + +
Returns:True if the BinaryView is relocatable, False otherwise
Return type:boolean
+
+ +
+
+perform_is_valid_offset(addr)[source]
+

perform_is_valid_offset implements a check if an virtual address addr is valid.

+
+

Note

+

This method may be overridden by custom BinaryViews. Use add_auto_segment to provide

+
+

data without overriding this method. +.. warning:: This method must not be called directly.

+ +++ + + + + + + + +
Parameters:addr (int) – a virtual address to be checked
Returns:true if the virtual address is valid, false if the virtual address is invalid or error
Return type:bool
+
+ +
+
+perform_read(addr, length)[source]
+

perform_read implements a mapping between a virtual address and an absolute file offset, reading +length bytes from the rebased address addr.

+
+

Note

+

This method may be overridden by custom BinaryViews. Use add_auto_segment to provide

+
+

data without overriding this method. +.. warning:: This method must not be called directly.

+ +++ + + + + + + + +
Parameters:
    +
  • addr (int) – a virtual address to attempt to read from
  • +
  • length (int) – the number of bytes to be read
  • +
+
Returns:

length bytes read from addr, should return empty string on error

+
Return type:

str

+
+
+ +
+
+perform_remove(addr, length)[source]
+

perform_remove implements a mapping between a virtual address and an absolute file offset, removing +length bytes from the rebased address addr.

+
+

Note

+

This method may be overridden by custom BinaryViews. If not overridden, removing data is disallowed

+
+
+

Warning

+

This method must not be called directly.

+
+ +++ + + + + + + + +
Parameters:
    +
  • addr (int) – a virtual address
  • +
  • data (str) – the data to be removed
  • +
+
Returns:

length of data removed, should return 0 on error

+
Return type:

int

+
+
+ +
+
+perform_save(accessor)[source]
+
+ +
+
+perform_write(addr, data)[source]
+

perform_write implements a mapping between a virtual address and an absolute file offset, writing +the bytes data to rebased address addr.

+
+

Note

+

This method may be overridden by custom BinaryViews. Use add_auto_segment to provide

+
+

data without overriding this method. +.. warning:: This method must not be called directly.

+ +++ + + + + + + + +
Parameters:
    +
  • addr (int) – a virtual address
  • +
  • data (str) – the data to be written
  • +
+
Returns:

length of data written, should return 0 on error

+
Return type:

int

+
+
+ +
+
+query_metadata(key)[source]
+

query_metadata retrieves a metadata associated with the given key stored in the current BinaryView.

+ +++ + + + + + + + +
Parameters:

key (string) – key to query

+
Return type:

metadata associated with the key

+
Example:
>>> bv.store_metadata("integer", 1337)
+>>> bv.query_metadata("integer")
+1337L
+>>> bv.store_metadata("list", [1,2,3])
+>>> bv.query_metadata("list")
+[1L, 2L, 3L]
+>>> bv.store_metadata("string", "my_data")
+>>> bv.query_metadata("string")
+'my_data'
+
+
+
+
+ +
+
+read(addr, length)[source]
+

read returns the data reads at most length bytes from virtual address addr.

+

Note: Python2 returns a str, but Python3 returns a bytes object. str(DataBufferObject) will +still get you a str in either case.

+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address to read from.
  • +
  • length (int) – number of bytes to read.
  • +
+
Returns:

at most length bytes from the virtual address addr, empty string on error or no data.

+
Return type:

python2 - str; python3 - bytes

+
Example:
>>> #Opening a x86_64 Mach-O binary
+>>> bv = BinaryViewType['Raw'].open("/bin/ls")
+>>> bv.read(0,4)
+'\xcf\xfa\xed\xfe'
+
+
+
+
+ +
+
+reanalyze()[source]
+

reanalyze causes all functions to be reanalyzed. This function does not wait for the analysis to finish.

+ +++ + + + +
Return type:None
+
+ +
+
+redo()[source]
+

redo redo the last committed action in the undo database.

+ +++ + + + + + +
Return type:

None

+
Example:
>>> bv.get_disassembly(0x100012f1)
+'xor     eax, eax'
+>>> bv.begin_undo_actions()
+>>> bv.convert_to_nop(0x100012f1)
+True
+>>> bv.commit_undo_actions()
+>>> bv.get_disassembly(0x100012f1)
+'nop'
+>>> bv.undo()
+>>> bv.get_disassembly(0x100012f1)
+'xor     eax, eax'
+>>> bv.redo()
+>>> bv.get_disassembly(0x100012f1)
+'nop'
+>>>
+
+
+
+
+ +
+
+classmethod register()[source]
+
+ +
+
+register_notification(notify)[source]
+

register_notification provides a mechanism for receiving callbacks for various analysis events. A full +list of callbacks can be seen in BinaryDataNotification.

+ +++ + + + + + +
Parameters:notify (BinaryDataNotification) – notify is a subclassed instance of BinaryDataNotification.
Return type:None
+
+ +
+
+register_platform_types(platform)[source]
+

register_platform_types ensures that the platform-specific types for a Platform are available +for the current BinaryView. This is automatically performed when adding a new function or setting +the default platform.

+ +++ + + + + + + + +
Parameters:

platform (Platform) – Platform containing types to be registered

+
Return type:

None

+
Example:
>>> platform = Platform["linux-x86"]
+>>> bv.register_platform_types(platform)
+>>>
+
+
+
+
+ +
+
+relocation_ranges_at(addr)[source]
+

List of relocation range tuples for a given address

+
+ +
+
+remove(addr, length)[source]
+

remove removes at most length bytes from virtual address addr.

+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address to remove from.
  • +
  • length (int) – number of bytes to remove.
  • +
+
Returns:

number of bytes removed from virtual address addr

+
Return type:

int

+
Example:
>>> bv.read(0,8)
+'BBBBAAAA'
+>>> bv.remove(0,4)
+4L
+>>> bv.read(0,4)
+'AAAA'
+
+
+
+
+ +
+
+remove_auto_section(name)[source]
+
+ +
+
+remove_auto_segment(start, length)[source]
+
+ +
+
+remove_function(func)[source]
+

remove_function removes the function func from the list of functions

+ +++ + + + + + + + +
Parameters:

func (Function) – a Function object.

+
Return type:

None

+
Example:
>>> bv.functions
+[<func: x86_64@0x1>]
+>>> bv.remove_function(bv.functions[0])
+>>> bv.functions
+[]
+
+
+
+
+ +
+
+remove_metadata(key)[source]
+

remove_metadata removes the metadata associated with key from the current BinaryView.

+ +++ + + + + + + + +
Parameters:

key (string) – key associated with metadata to remove from the BinaryView

+
Return type:

None

+
Example:
>>> bv.store_metadata("integer", 1337)
+>>> bv.remove_metadata("integer")
+
+
+
+
+ +
+
+remove_user_function(func)[source]
+

remove_user_function removes the user function func from the list of functions

+ +++ + + + + + + + +
Parameters:

func (Function) – a Function object.

+
Return type:

None

+
Example:
>>> bv.functions
+[<func: x86_64@0x1>]
+>>> bv.remove_user_function(bv.functions[0])
+>>> bv.functions
+[]
+
+
+
+
+ +
+
+remove_user_section(name)[source]
+
+ +
+
+remove_user_segment(start, length)[source]
+
+ +
+
+rename_type(old_name, new_name)[source]
+

rename_type renames a type in the global list of types for the current BinaryView

+ +++ + + + + + + + +
Parameters: +
Return type:

None

+
Example:
>>> type, name = bv.parse_type_string("int foo")
+>>> bv.define_user_type(name, type)
+>>> bv.get_type_by_name("foo")
+<type: int32_t>
+>>> bv.rename_type("foo", "bar")
+>>> bv.get_type_by_name("bar")
+<type: int32_t>
+>>>
+
+
+
+
+ +
+
+save(dest)[source]
+

save saves the original binary file to the provided destination dest along with any modifications.

+ +++ + + + + + + + +
Parameters:dest (str) – destination path and filename of file to be written
Returns:boolean True on success, False on failure
Return type:bool
+
+ +
+
+save_auto_snapshot(progress_func=None)[source]
+

save_auto_snapshot saves the current database to the already created file.

+
+

Note

+

create_database() should have been called prior to executing this method

+
+ +++ + + + + + + + +
Parameters:progress_func (callable()) – optional function to be called with the current progress and total count.
Returns:True if it successfully saved the snapshot, False otherwise
Return type:bool
+
+ +
+
+classmethod set_default_session_data(name, value)[source]
+

set_default_session_data saves a variable to the BinaryView. +:param name: name of the variable to be saved +:param value: value of the variable to be saved

+ +++ + + + +
Example:
>>> BinaryView.set_default_session_data("variable_name", "value")
+>>> bv.session_data.variable_name
+'value'
+
+
+
+
+ +
+
+show_graph_report(title, graph)[source]
+
+ +
+
+show_html_report(title, contents, plaintext='')[source]
+

show_html_report displays the HTML contents in UI applications and plaintext in command-line +applications. HTML reports support hyperlinking into the BinaryView. Hyperlinks can be specified as follows: +binaryninja://?expr=_start Where expr= specifies an expression parsable by the parse_expression API.

+
+
Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line
+
a simple text prompt is used.
+
+ +++ + + + + + + + +
Parameters:
    +
  • contents (str) – HTML contents to display
  • +
  • plaintext (str) – Plain text version to display (used on the command-line)
  • +
+
Return type:

None

+
Example:
>>> bv.show_html_report("title", "<h1>Contents</h1>", "Plain text contents")
+Plain text contents
+
+
+
+
+ +
+
+show_markdown_report(title, contents, plaintext='')[source]
+

show_markdown_report displays the markdown contents in UI applications and plaintext in command-line +applications. Markdown reports support hyperlinking into the BinaryView. Hyperlinks can be specified as follows: +binaryninja://?expr=_start Where expr= specifies an expression parsable by the parse_expression API.

+
+
Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line
+
a simple text prompt is used.
+
+ +++ + + + + + + + +
Parameters:
    +
  • contents (str) – markdown contents to display
  • +
  • plaintext (str) – Plain text version to display (used on the command-line)
  • +
+
Return type:

None

+
Example:
>>> bv.show_markdown_report("title", "##Contents", "Plain text contents")
+Plain text contents
+
+
+
+
+ +
+
+show_plain_text_report(title, contents)[source]
+
+ +
+
+skip_and_return_value(addr, value, arch=None)[source]
+

skip_and_return_value convert the call instruction of architecture arch at the virtual address +addr to the equivalent of returning a value.

+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address of the instruction to be modified
  • +
  • value (int) – value to make the instruction return
  • +
  • arch (Architecture) – (optional) the architecture of the instructions if different from the default
  • +
+
Returns:

True on success, False on failure.

+
Return type:

bool

+
Example:
>>> bv.get_disassembly(0x1000132a)
+'call    0x1000134a'
+>>> bv.skip_and_return_value(0x1000132a, 42)
+True
+>>> #The return value from x86 functions is stored in eax thus:
+>>> bv.get_disassembly(0x1000132a)
+'mov     eax, 0x2a'
+>>>
+
+
+
+
+ +
+
+store_metadata(key, md)[source]
+

store_metadata stores an object for the given key in the current BinaryView. Objects stored using +store_metadata can be retrieved when the database is reopened. Objects stored are not arbitrary python +objects! The values stored must be able to be held in a Metadata object. See Metadata +for more information. Python objects could obviously be serialized using pickle but this intentionally +a task left to the user since there is the potential security issues.

+ +++ + + + + + + + +
Parameters:
    +
  • key (string) – key value to associate the Metadata object with
  • +
  • md (Varies) – object to store.
  • +
+
Return type:

None

+
Example:
>>> bv.store_metadata("integer", 1337)
+>>> bv.query_metadata("integer")
+1337L
+>>> bv.store_metadata("list", [1,2,3])
+>>> bv.query_metadata("list")
+[1L, 2L, 3L]
+>>> bv.store_metadata("string", "my_data")
+>>> bv.query_metadata("string")
+'my_data'
+
+
+
+
+ +
+
+undefine_auto_symbol(sym)[source]
+

undefine_auto_symbol removes a symbol from the internal list of automatically discovered Symbol objects.

+ +++ + + + + + +
Parameters:sym (Symbol) – the symbol to undefine
Return type:None
+
+ +
+
+undefine_data_var(addr)[source]
+

undefine_data_var removes the non-user data variable at the virtual address addr.

+ +++ + + + + + + + +
Parameters:

addr (int) – virtual address to define the data variable to be removed

+
Return type:

None

+
Example:
>>> bv.undefine_data_var(bv.entry_point)
+>>>
+
+
+
+
+ +
+
+undefine_type(type_id)[source]
+

undefine_type removes a Type from the global list of types for the current BinaryView

+ +++ + + + + + + + +
Parameters:

type_id (str) – Unique identifier of type to be undefined

+
Return type:

None

+
Example:
>>> type, name = bv.parse_type_string("int foo")
+>>> type_id = Type.generate_auto_type_id("source", name)
+>>> bv.define_type(type_id, name, type)
+>>> bv.get_type_by_name(name)
+<type: int32_t>
+>>> bv.undefine_type(type_id)
+>>> bv.get_type_by_name(name)
+>>>
+
+
+
+
+ +
+
+undefine_user_data_var(addr)[source]
+

undefine_user_data_var removes the user data variable at the virtual address addr.

+ +++ + + + + + + + +
Parameters:

addr (int) – virtual address to define the data variable to be removed

+
Return type:

None

+
Example:
>>> bv.undefine_user_data_var(bv.entry_point)
+>>>
+
+
+
+
+ +
+
+undefine_user_symbol(sym)[source]
+

undefine_user_symbol removes a symbol from the internal list of user added Symbol objects.

+ +++ + + + + + +
Parameters:sym (Symbol) – the symbol to undefine
Return type:None
+
+ +
+
+undefine_user_type(name)[source]
+

undefine_user_type removes a Type from the global list of user types for the current +BinaryView

+ +++ + + + + + + + +
Parameters:

name (QualifiedName) – Name of user type to be undefined

+
Return type:

None

+
Example:
>>> type, name = bv.parse_type_string("int foo")
+>>> bv.define_user_type(name, type)
+>>> bv.get_type_by_name(name)
+<type: int32_t>
+>>> bv.undefine_user_type(name)
+>>> bv.get_type_by_name(name)
+>>>
+
+
+
+
+ +
+
+undo()[source]
+

undo undo the last committed action in the undo database.

+ +++ + + + + + +
Return type:

None

+
Example:
>>> bv.get_disassembly(0x100012f1)
+'xor     eax, eax'
+>>> bv.begin_undo_actions()
+>>> bv.convert_to_nop(0x100012f1)
+True
+>>> bv.commit_undo_actions()
+>>> bv.get_disassembly(0x100012f1)
+'nop'
+>>> bv.undo()
+>>> bv.get_disassembly(0x100012f1)
+'xor     eax, eax'
+>>> bv.redo()
+>>> bv.get_disassembly(0x100012f1)
+'nop'
+>>>
+
+
+
+
+ +
+
+unregister_notification(notify)[source]
+

unregister_notification unregisters the BinaryDataNotification object passed to +register_notification

+ +++ + + + + + +
Parameters:notify (BinaryDataNotification) – notify is a subclassed instance of BinaryDataNotification.
Return type:None
+
+ +
+
+update_analysis()[source]
+

update_analysis asynchronously starts the analysis running and returns immediately. Analysis of BinaryViews +does not occur automatically, the user must start analysis by calling either update_analysis() or +update_analysis_and_wait(). An analysis update must be run after changes are made which could change +analysis results such as adding functions.

+ +++ + + + +
Return type:None
+
+ +
+
+update_analysis_and_wait()[source]
+

update_analysis_and_wait blocking call to update the analysis, this call returns when the analysis is +complete. Analysis of BinaryViews does not occur automatically, the user must start analysis by calling either +update_analysis() or update_analysis_and_wait(). An analysis update must be run after changes are +made which could change analysis results such as adding functions.

+ +++ + + + +
Return type:None
+
+ +
+
+write(addr, data)[source]
+

write writes the bytes in data to the virtual address addr.

+ +++ + + + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address to write to.
  • +
  • data (str) – data to be written at addr.
  • +
+
Returns:

number of bytes written to virtual address addr

+
Return type:

int

+
Example:
>>> bv.read(0,4)
+'BBBB'
+>>> bv.write(0, "AAAA")
+4L
+>>> bv.read(0,4)
+'AAAA'
+
+
+
+
+ +
+
+address_size
+

Address size of the binary (read-only)

+
+ +
+
+allocated_ranges
+

List of valid address ranges for this view (read-only)

+
+ +
+
+analysis_changed
+

boolean analysis state changed of the currently running analysis (read-only)

+
+ +
+
+analysis_info
+

Provides instantaneous analysis state information and a list of current functions under analysis (read-only). +All times are given in units of milliseconds (ms). Per function analysis_time is the aggregation of time spent +performing incremental updates and is reset on a full function update. Per function update_count tracks the +current number of incremental updates and is reset on a full function update. Per function submit_count tracks the +current number of full updates that have completed. Note that the submit_count is currently not reset across analysis updates.

+
+ +
+
+analysis_progress
+

Status of current analysis (read-only)

+
+ +
+
+arch
+

The architecture associated with the current BinaryView (read/write)

+
+ +
+
+available_view_types
+

Available view types (read-only)

+
+ +
+
+basic_blocks
+

A generator of all BasicBlock objects in the BinaryView

+
+ +
+
+data_vars
+

List of data variables (read-only)

+
+ +
+
+end
+

End offset of the binary (read-only)

+
+ +
+
+endianness
+

Endianness of the binary (read-only)

+
+ +
+
+entry_function
+

Entry function (read-only)

+
+ +
+
+entry_point
+

Entry point of the binary (read-only)

+
+ +
+
+executable
+

Whether the binary is an executable (read-only)

+
+ +
+
+functions
+

List of functions (read-only)

+
+ +
+
+global_pointer_value
+

Discovered value of the global pointer register, if the binary uses one (read-only)

+
+ +
+
+has_database
+

boolean has a database been written to disk (read-only)

+
+ +
+
+has_functions
+

Boolean whether the binary has functions (read-only)

+
+ +
+
+instructions
+

A generator of instruction tokens and their start addresses

+
+ +
+
+linear_disassembly
+

Iterator for all lines in the linear disassembly of the view

+
+ +
+
+llil_basic_blocks
+

A generator of all LowLevelILBasicBlock objects in the BinaryView

+
+ +
+
+llil_instructions
+

A generator of llil instructions

+
+ +
+
+long_name = None
+
+ +
+
+max_function_size_for_analysis
+

Maximum size of function (sum of basic block sizes in bytes) for auto analysis

+
+ +
+
+mlil_basic_blocks
+

A generator of all MediumLevelILBasicBlock objects in the BinaryView

+
+ +
+
+mlil_instructions
+

A generator of mlil instructions

+
+ +
+
+modified
+

boolean modification state of the BinaryView (read/write)

+
+ +
+
+name = None
+
+ +
+
+namespaces
+

Returns a list of namespaces for the current BinaryView

+
+ +
+
+new_auto_function_analysis_suppressed
+

Whether or not automatically discovered functions will be analyzed

+
+ +
+
+next_address = 0
+
+ +
+
+offset
+
+ +
+
+parameters_for_analysis
+
+ +
+
+parent_view
+

View that contains the raw data used by this view (read-only)

+
+ +
+
+platform
+

The platform associated with the current BinaryView (read/write)

+
+ +
+
+registered_view_type = None
+
+ +
+
+relocatable
+

Boolean - is the binary relocatable (read-only)

+
+ +
+
+relocation_ranges
+

List of relocation range tuples (read-only)

+
+ +
+
+saved
+

boolean state of whether or not the file has been saved (read/write)

+
+ +
+
+sections
+

List of sections (read-only)

+
+ +
+
+segments
+

List of segments (read-only)

+
+ +
+
+session_data
+

Dictionary object where plugins can store arbitrary data associated with the view

+
+ +
+
+start
+

Start offset of the binary (read-only)

+
+ +
+
+strings
+

List of strings (read-only)

+
+ +
+
+symbols
+

Dict of symbols (read-only)

+
+ +
+
+types
+

List of defined types (read-only)

+
+ +
+
+view
+
+ +
+
+view_type
+

View type (read-only)

+
+ +
+ +
+
+class BinaryViewType(handle)[source]
+

Bases: object

+
+
+create(data)[source]
+
+ +
+
+get_arch(ident, endian)[source]
+
+ +
+
+get_platform(ident, arch)[source]
+
+ +
+
+classmethod get_view_of_file(filename, update_analysis=True, progress_func=None)[source]
+

get_view_of_file returns the first available, non-Raw BinaryView available.

+ +++ + + + + + + + +
Parameters:
    +
  • filename (str) – Path to filename or bndb
  • +
  • update_analysis (bool) – defaults to True. Pass False to not run update_analysis_and_wait.
  • +
  • progress_func (callable()) – optional function to be called with the current progress and total count.
  • +
+
Returns:

returns a BinaryView object for the given filename.

+
Return type:

BinaryView or None

+
+
+ +
+
+is_valid_for_data(data)[source]
+
+ +
+
+open(src, file_metadata=None)[source]
+
+ +
+
+register_arch(ident, endian, arch)[source]
+
+ +
+
+register_default_platform(arch, plat)[source]
+
+ +
+
+register_platform(ident, arch, plat)[source]
+
+ +
+
+list = [<view type: 'Raw'>, <view type: 'ELF'>, <view type: 'Mach-O'>, <view type: 'PE'>]
+
+ +
+
+long_name
+

BinaryView long name (read-only)

+
+ +
+
+name
+

BinaryView name (read-only)

+
+ +
+ +
+
+class BinaryWriter(view, endian=None)[source]
+

Bases: object

+

class BinaryWriter is a convenience class for writing binary data.

+

BinaryWriter can be instantiated as follows and the rest of the document will start from this context

+
>>> from binaryninja import *
+>>> bv = BinaryViewType['Mach-O'].open("/bin/ls")
+>>> br = BinaryReader(bv)
+>>> bw = BinaryWriter(bv)
+>>>
+
+
+

Or using the optional endian parameter

+
>>> from binaryninja import *
+>>> br = BinaryReader(bv, Endianness.BigEndian)
+>>> bw = BinaryWriter(bv, Endianness.BigEndian)
+>>>
+
+
+
+
+seek(offset)[source]
+

seek update internal offset to offset.

+ +++ + + + + + + + +
Parameters:

offset (int) – offset to set the internal offset to

+
Return type:

None

+
Example:
>>> hex(bw.offset)
+'0x100000008L'
+>>> bw.seek(0x100000000)
+>>> hex(bw.offset)
+'0x100000000L'
+>>>
+
+
+
+
+ +
+
+seek_relative(offset)[source]
+

seek_relative updates the internal offset by offset.

+ +++ + + + + + + + +
Parameters:

offset (int) – offset to add to the internal offset

+
Return type:

None

+
Example:
>>> hex(bw.offset)
+'0x100000008L'
+>>> bw.seek_relative(-8)
+>>> hex(bw.offset)
+'0x100000000L'
+>>>
+
+
+
+
+ +
+
+write(value)[source]
+

write writes len(value) bytes to the internal offset, without regard to endianness.

+ +++ + + + + + + + + + +
Parameters:

value (str) – bytes to be written at current offset

+
Returns:

boolean True on success, False on failure.

+
Return type:

bool

+
Example:
>>> bw.write("AAAA")
+True
+>>> br.read(4)
+'AAAA'
+>>>
+
+
+
+
+ +
+
+write16(value)[source]
+

write16 writes the lowest order two bytes from the integer value to the current offset, using internal endianness.

+ +++ + + + + + + + +
Parameters:value (int) – integer value to write.
Returns:boolean True on success, False on failure.
Return type:bool
+
+ +
+
+write16be(value)[source]
+

write16be writes the lowest order two bytes from the big endian integer value to the current offset.

+ +++ + + + + + + + +
Parameters:value (int) – integer value to write.
Returns:boolean True on success, False on failure.
Return type:bool
+
+ +
+
+write16le(value)[source]
+

write16le writes the lowest order two bytes from the little endian integer value to the current offset.

+ +++ + + + + + + + +
Parameters:value (int) – integer value to write.
Returns:boolean True on success, False on failure.
Return type:bool
+
+ +
+
+write32(value)[source]
+

write32 writes the lowest order four bytes from the integer value to the current offset, using internal endianness.

+ +++ + + + + + + + +
Parameters:value (int) – integer value to write.
Returns:boolean True on success, False on failure.
Return type:bool
+
+ +
+
+write32be(value)[source]
+

write32be writes the lowest order four bytes from the big endian integer value to the current offset.

+ +++ + + + + + + + +
Parameters:value (int) – integer value to write.
Returns:boolean True on success, False on failure.
Return type:bool
+
+ +
+
+write32le(value)[source]
+

write32le writes the lowest order four bytes from the little endian integer value to the current offset.

+ +++ + + + + + + + +
Parameters:value (int) – integer value to write.
Returns:boolean True on success, False on failure.
Return type:bool
+
+ +
+
+write64(value)[source]
+

write64 writes the lowest order eight bytes from the integer value to the current offset, using internal endianness.

+ +++ + + + + + + + +
Parameters:value (int) – integer value to write.
Returns:boolean True on success, False on failure.
Return type:bool
+
+ +
+
+write64be(value)[source]
+

write64be writes the lowest order eight bytes from the big endian integer value to the current offset.

+ +++ + + + + + + + +
Parameters:value (int) – integer value to write.
Returns:boolean True on success, False on failure.
Return type:bool
+
+ +
+
+write64le(value)[source]
+

write64le writes the lowest order eight bytes from the little endian integer value to the current offset.

+ +++ + + + + + + + +
Parameters:value (int) – integer value to write.
Returns:boolean True on success, False on failure.
Return type:bool
+
+ +
+
+write8(value)[source]
+

write8 lowest order byte from the integer value to the current offset.

+ +++ + + + + + + + + + +
Parameters:

value (str) – bytes to be written at current offset

+
Returns:

boolean

+
Return type:

int

+
Example:
>>> bw.write8(0x42)
+True
+>>> br.read(1)
+'B'
+>>>
+
+
+
+
+ +
+
+endianness
+

The Endianness to written data. (read/write)

+ +++ + + + + + + + +
Getter:returns the endianness of the reader
Setter:sets the endianness of the reader (BigEndian or LittleEndian)
Type:Endianness
+
+ +
+
+offset
+

The current write offset (read/write).

+ +++ + + + + + + + +
Getter:returns the current internal offset
Setter:sets the internal offset
Type:int
+
+ +
+ +
+
+class DataVariable(addr, var_type, auto_discovered, view=None)[source]
+

Bases: object

+
+
+code_refs
+

code references to this data variable (read-only)

+
+ +
+
+data_refs
+

data cross references to this data variable (read-only)

+
+ +
+
+data_refs_from
+

data cross references from this data variable (read-only)

+
+ +
+ +
+
+class Section(handle)[source]
+

Bases: object

+
+
+align
+
+ +
+
+auto_defined
+
+ +
+
+end
+
+ +
+
+entry_size
+
+ +
+
+info_data
+
+ +
+
+info_section
+
+ +
+
+linked_section
+
+ +
+
+name
+
+ +
+
+semantics
+
+ +
+
+start
+
+ +
+
+type
+
+ +
+ +
+
+class Segment(handle)[source]
+

Bases: object

+
+
+relocation_ranges_at(addr)[source]
+

List of relocation range tuples (read-only)

+
+ +
+
+data_end
+
+ +
+
+data_length
+
+ +
+
+data_offset
+
+ +
+
+end
+
+ +
+
+executable
+
+ +
+
+readable
+
+ +
+
+relocation_count
+
+ +
+
+relocation_ranges
+

List of relocation range tuples (read-only)

+
+ +
+
+start
+
+ +
+
+writable
+
+ +
+ +
+
+class StringReference(bv, string_type, start, length)[source]
+

Bases: object

+
+
+value
+
+ +
+ +
+
+class StructuredDataValue(type, address, value)[source]
+

Bases: object

+
+
+address
+
+ +
+
+int
+
+ +
+
+str
+
+ +
+
+type
+
+ +
+
+value
+
+ +
+
+width
+
+ +
+ +
+
+class StructuredDataView(bv, structure_name, address)[source]
+

Bases: object

+

class StructuredDataView is a convenience class for reading structured binary data.

+

StructuredDataView can be instantiated as follows:

+
>>> from binaryninja import *
+>>> bv = BinaryViewType['Mach-O'].open("/bin/ls")
+>>> structure = "Elf64_Header"
+>>> address = bv.start
+>>> elf = StructuredDataView(bv, structure, address)
+>>>
+
+
+

Once instantiated, members can be accessed:

+
>>> print("{:x}".format(elf.machine))
+003e
+>>>
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview.ActiveAnalysisInfo.html b/personal/api-docs/binaryninja.binaryview.ActiveAnalysisInfo.html new file mode 100644 index 0000000..4049208 --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview.ActiveAnalysisInfo.html @@ -0,0 +1,304 @@ + + + + + + + + + + + binaryninja.binaryview.ActiveAnalysisInfo — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.binaryview.ActiveAnalysisInfo

+
+
+class ActiveAnalysisInfo(func, analysis_time, update_count, submit_count)[source]
+
+
+__init__(func, analysis_time, update_count, submit_count)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(func, analysis_time, update_count, …)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview.AddressRange.html b/personal/api-docs/binaryninja.binaryview.AddressRange.html new file mode 100644 index 0000000..9ce3a51 --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview.AddressRange.html @@ -0,0 +1,316 @@ + + + + + + + + + + + binaryninja.binaryview.AddressRange — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.binaryview.AddressRange

+
+
+class AddressRange(start, end)[source]
+
+
+__init__(start, end)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(start, end)x.__init__(…) initializes x; see help(type(x)) for signature
+

Attributes

+ ++++ + + + + + +
length
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview.AnalysisCompletionEvent.html b/personal/api-docs/binaryninja.binaryview.AnalysisCompletionEvent.html new file mode 100644 index 0000000..04b22a6 --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview.AnalysisCompletionEvent.html @@ -0,0 +1,326 @@ + + + + + + + + + + + binaryninja.binaryview.AnalysisCompletionEvent — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.binaryview.AnalysisCompletionEvent

+
+
+class AnalysisCompletionEvent(view, callback)[source]
+

The AnalysisCompletionEvent object provides an asynchronous mechanism for receiving +callbacks when analysis is complete. The callback runs once. A completion event must be added +for each new analysis in order to be notified of each analysis completion. The +AnalysisCompletionEvent class takes responsibility for keeping track of the object’s lifetime.

+ +++ + + + +
Example:
>>> def on_complete(self):
+...     print("Analysis Complete", self.view)
+...
+>>> evt = AnalysisCompletionEvent(bv, on_complete)
+>>>
+
+
+
+
+
+__init__(view, callback)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + +
__init__(view, callback)x.__init__(…) initializes x; see help(type(x)) for signature
cancel()
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview.AnalysisInfo.html b/personal/api-docs/binaryninja.binaryview.AnalysisInfo.html new file mode 100644 index 0000000..3f85903 --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview.AnalysisInfo.html @@ -0,0 +1,304 @@ + + + + + + + + + + + binaryninja.binaryview.AnalysisInfo — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.binaryview.AnalysisInfo

+
+
+class AnalysisInfo(state, analysis_time, active_info)[source]
+
+
+__init__(state, analysis_time, active_info)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(state, analysis_time, active_info)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview.AnalysisProgress.html b/personal/api-docs/binaryninja.binaryview.AnalysisProgress.html new file mode 100644 index 0000000..5ddf3da --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview.AnalysisProgress.html @@ -0,0 +1,304 @@ + + + + + + + + + + + binaryninja.binaryview.AnalysisProgress — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.binaryview.AnalysisProgress

+
+
+class AnalysisProgress(state, count, total)[source]
+
+
+__init__(state, count, total)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(state, count, total)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview.BinaryDataNotification.html b/personal/api-docs/binaryninja.binaryview.BinaryDataNotification.html new file mode 100644 index 0000000..9b3a1d0 --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview.BinaryDataNotification.html @@ -0,0 +1,346 @@ + + + + + + + + + + + binaryninja.binaryview.BinaryDataNotification — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.binaryview.BinaryDataNotification

+
+
+class BinaryDataNotification[source]
+
+
+__init__()[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__()x.__init__(…) initializes x; see help(type(x)) for signature
data_inserted(view, offset, length)
data_removed(view, offset, length)
data_var_added(view, var)
data_var_removed(view, var)
data_var_updated(view, var)
data_written(view, offset, length)
function_added(view, func)
function_removed(view, func)
function_update_requested(view, func)
function_updated(view, func)
string_found(view, string_type, offset, length)
string_removed(view, string_type, offset, length)
type_defined(view, name, type)
type_undefined(view, name, type)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview.BinaryDataNotificationCallbacks.html b/personal/api-docs/binaryninja.binaryview.BinaryDataNotificationCallbacks.html new file mode 100644 index 0000000..b796536 --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview.BinaryDataNotificationCallbacks.html @@ -0,0 +1,304 @@ + + + + + + + + + + + binaryninja.binaryview.BinaryDataNotificationCallbacks — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.binaryview.BinaryDataNotificationCallbacks

+
+
+class BinaryDataNotificationCallbacks(view, notify)[source]
+
+
+__init__(view, notify)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(view, notify)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview.BinaryReader.html b/personal/api-docs/binaryninja.binaryview.BinaryReader.html new file mode 100644 index 0000000..c88fb4c --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview.BinaryReader.html @@ -0,0 +1,379 @@ + + + + + + + + + + + binaryninja.binaryview.BinaryReader — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.binaryview.BinaryReader

+
+
+class BinaryReader(view, endian=None)[source]
+

class BinaryReader is a convenience class for reading binary data.

+

BinaryReader can be instantiated as follows and the rest of the document will start from this context

+
>>> from binaryninja import *
+>>> bv = BinaryViewType['Mach-O'].open("/bin/ls")
+>>> br = BinaryReader(bv)
+>>> hex(br.read32())
+'0xfeedfacfL'
+>>>
+
+
+

Or using the optional endian parameter

+
>>> from binaryninja import *
+>>> br = BinaryReader(bv, Endianness.BigEndian)
+>>> hex(br.read32())
+'0xcffaedfeL'
+>>>
+
+
+
+
+__init__(view, endian=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__(view[, endian])x.__init__(…) initializes x; see help(type(x)) for signature
read(length)read returns length bytes read from the current offset, adding length to offset.
read16()read16 returns a two byte integer from offset incrementing the offset by two, using specified endianness.
read16be()read16be returns a two byte big endian integer from offset incrementing the offset by two.
read16le()read16le returns a two byte little endian integer from offset incrementing the offset by two.
read32()read32 returns a four byte integer from offset incrementing the offset by four, using specified endianness.
read32be()read32be returns a four byte big endian integer from offset incrementing the offset by four.
read32le()read32le returns a four byte little endian integer from offset incrementing the offset by four.
read64()read64 returns an eight byte integer from offset incrementing the offset by eight, using specified endianness.
read64be()read64be returns an eight byte big endian integer from offset incrementing the offset by eight.
read64le()read64le returns an eight byte little endian integer from offset incrementing the offset by eight.
read8()read8 returns a one byte integer from offset incrementing the offset.
seek(offset)seek update internal offset to offset.
seek_relative(offset)seek_relative updates the internal offset by offset.
+

Attributes

+ ++++ + + + + + + + + + + + +
endiannessThe Endianness to read data.
eofIs end of file (read-only)
offsetThe current read offset (read/write).
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview.BinaryView.html b/personal/api-docs/binaryninja.binaryview.BinaryView.html new file mode 100644 index 0000000..ce6c53d --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview.BinaryView.html @@ -0,0 +1,958 @@ + + + + + + + + + + + binaryninja.binaryview.BinaryView — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.binaryview.BinaryView

+
+
+class BinaryView(file_metadata=None, parent_view=None, handle=None)[source]
+

class BinaryView implements a view on binary data, and presents a queryable interface of a binary file. One key +job of BinaryView is file format parsing which allows Binary Ninja to read, write, insert, remove portions +of the file given a virtual address. For the purposes of this documentation we define a virtual address as the +memory address that the various pieces of the physical file will be loaded at.

+

A binary file does not have to have just one BinaryView, thus much of the interface to manipulate disassembly exists +within or is accessed through a BinaryView. All files are guaranteed to have at least the Raw BinaryView. The +Raw BinaryView is simply a hex editor, but is helpful for manipulating binary files via their absolute addresses.

+

BinaryViews are plugins and thus registered with Binary Ninja at startup, and thus should never be instantiated +directly as this is already done. The list of available BinaryViews can be seen in the BinaryViewType class which +provides an iterator and map of the various installed BinaryViews:

+
>>> list(BinaryViewType)
+[<view type: 'Raw'>, <view type: 'ELF'>, <view type: 'Mach-O'>, <view type: 'PE'>]
+>>> BinaryViewType['ELF']
+<view type: 'ELF'>
+
+
+

To open a file with a given BinaryView the following code can be used:

+
>>> bv = BinaryViewType['Mach-O'].open("/bin/ls")
+>>> bv
+<BinaryView: '/bin/ls', start 0x100000000, len 0xa000>
+
+
+

By convention in the rest of this document we will use bv to mean an open BinaryView of an executable file. +When a BinaryView is open on an executable view, analysis does not automatically run, this can be done by running +the update_analysis_and_wait() method which disassembles the executable and returns when all disassembly is +finished:

+
>>> bv.update_analysis_and_wait()
+>>>
+
+
+

Since BinaryNinja’s analysis is multi-threaded (depending on version) this can also be done in the background by +using the update_analysis() method instead.

+

By standard python convention methods which start with ‘_’ should be considered private and should not be called +externally. Additionally, methods which begin with perform_ should not be called either and are +used explicitly for subclassing the BinaryView.

+
+

Note

+

An important note on the *_user_*() methods. Binary Ninja makes a distinction between edits performed by the user and actions performed by auto analysis. Auto analysis actions that can quickly be recalculated are not saved to the database. Auto analysis actions that take a long time and all user edits are stored in the database (e.g. remove_user_function() rather than remove_function()). Thus use _user_ methods if saving to the database is desired.

+
+
+
+__init__(file_metadata=None, parent_view=None, handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__([file_metadata, parent_view, handle])x.__init__(…) initializes x; see help(type(x)) for signature
abort_analysis()abort_analysis will abort the currently running analysis.
add_analysis_completion_event(callback)add_analysis_completion_event sets up a call back function to be called when analysis has been completed.
add_analysis_option(name)add_analysis_option adds an analysis option.
add_auto_section(name, start, length[, …])
add_auto_segment(start, length, data_offset, …)
add_entry_point(addr[, plat])add_entry_point adds an virtual address to start analysis from for a given plat.
add_function(addr[, plat])add_function add a new function of the given plat at the virtual address addr
add_undo_action(action)
add_user_section(name, start, length[, …])
add_user_segment(start, length, data_offset, …)
always_branch(addr[, arch])always_branch convert the instruction of architecture arch at the virtual address addr to an unconditional branch.
begin_undo_actions()begin_undo_actions start recording actions taken so the can be undone at some point.
commit_undo_actions()commit_undo_actions commit the actions taken since the last commit to the undo database.
convert_to_nop(addr[, arch])convert_to_nop converts the instruction at virtual address addr to a nop of the provided architecture.
create_database(filename[, progress_func])create_database writes the current database (.bndb) file out to the specified file.
create_user_function(addr[, plat])create_user_function add a new user function of the given plat at the virtual address addr
define_auto_symbol(sym)define_auto_symbol adds a symbol to the internal list of automatically discovered Symbol objects in a given namespace.
define_auto_symbol_and_var_or_function(sym, …)define_auto_symbol_and_var_or_function
define_data_var(addr, var_type)define_data_var defines a non-user data variable var_type at the virtual address addr.
define_imported_function(import_addr_sym, func)define_imported_function defines an imported Function func with a ImportedFunctionSymbol type.
define_type(type_id, default_name, type_obj)define_type registers a Type type_obj of the given name in the global list of types for the current BinaryView.
define_user_data_var(addr, var_type)define_user_data_var defines a user data variable var_type at the virtual address addr.
define_user_symbol(sym)define_user_symbol adds a symbol to the internal list of user added Symbol objects.
define_user_type(name, type_obj)define_user_type registers a Type type_obj of the given name in the global list of user types for the current BinaryView.
eval(expression[, here])Evaluates an string expression to an integer value.
external_namespace()External namespace for the current BinaryView
find_next_constant(start, constant[, settings])find_next_constant searches for integer constant constant occurring in the linear view output starting at the virtual address start until the end of the BinaryView.
find_next_data(start, data[, flags])find_next_data searches for the bytes data starting at the virtual address start until the end of the BinaryView.
find_next_text(start, text[, settings, flags])find_next_text searches for string text occurring in the linear view output starting at the virtual address start until the end of the BinaryView.
get_address_for_data_offset(offset)
get_address_input(prompt, title[, …])
get_basic_blocks_at(addr)get_basic_blocks_at get a list of BasicBlock objects which exist at the provided virtual address.
get_basic_blocks_starting_at(addr)get_basic_blocks_starting_at get a list of BasicBlock objects which start at the provided virtual address.
get_code_refs(addr[, length])get_code_refs returns a list of ReferenceSource objects (xrefs or cross-references) that point to the provided virtual address.
get_data_refs(addr[, length])get_data_refs returns a list of virtual addresses of data which references addr.
get_data_var_at(addr)get_data_var_at returns the data type at a given virtual address.
get_disassembly(addr[, arch])get_disassembly simple helper function for printing disassembly of a given address
get_function_at(addr[, plat])get_function_at gets a Function object for the function that starts at virtual address addr:
get_functions_at(addr)get_functions_at get a list of binaryninja.Function objects (one for each valid plat) at the given virtual address.
get_functions_containing(addr)get_functions_containing returns a list of functions which contain the given address or None on failure.
get_instruction_length(addr[, arch])get_instruction_length returns the number of bytes in the instruction of Architecture arch at the virtual address addr
get_linear_disassembly(settings)get_linear_disassembly gets an iterator for all lines in the linear disassembly of the view for the given disassembly settings.
get_linear_disassembly_position_at(addr, …)get_linear_disassembly_position_at instantiates a LinearDisassemblyPosition object for use in get_previous_linear_disassembly_lines() or get_next_linear_disassembly_lines().
get_modification(addr[, length])get_modification returns the modified bytes of up to length bytes from virtual address addr, or if length is None returns the ModificationStatus.
get_next_basic_block_start_after(addr)get_next_basic_block_start_after returns the virtual address of the BasicBlock that occurs after the virtual
get_next_data_after(addr)get_next_data_after retrieves the virtual address of the next non-code byte.
get_next_data_var_after(addr)get_next_data_var_after retrieves the next virtual address of the next DataVariable
get_next_disassembly([arch])get_next_disassembly simple helper function for printing disassembly of the next instruction.
get_next_function_start_after(addr)get_next_function_start_after returns the virtual address of the Function that occurs after the virtual address addr
get_next_linear_disassembly_lines(pos, settings)get_next_linear_disassembly_lines retrieves a list of LinearDisassemblyLine objects for the next disassembly lines, and updates the LinearDisassemblyPosition passed in.
get_previous_basic_block_end_before(addr)get_previous_basic_block_end_before
get_previous_basic_block_start_before(addr)get_previous_basic_block_start_before returns the virtual address of the BasicBlock that occurs prior to the provided virtual address
get_previous_data_before(addr)get_previous_data_before
get_previous_data_var_before(addr)get_previous_data_var_before
get_previous_function_start_before(addr)get_previous_function_start_before returns the virtual address of the Function that occurs prior to the virtual address provided
get_previous_linear_disassembly_lines(pos, …)get_previous_linear_disassembly_lines retrieves a list of LinearDisassemblyLine objects for the previous disassembly lines, and updates the LinearDisassemblyPosition passed in.
get_recent_basic_block_at(addr)
get_recent_function_at(addr)
get_section_by_name(name)
get_sections_at(addr)
get_segment_at(addr)
get_strings([start, length])get_strings returns a list of strings defined in the binary in the optional virtual address range: start-(start+length)
get_symbol_at(addr[, namespace])get_symbol_at returns the Symbol at the provided virtual address.
get_symbol_by_raw_name(name[, namespace])get_symbol_by_raw_name retrieves a Symbol object for the given a raw (mangled) name.
get_symbols([start, length, namespace])get_symbols retrieves the list of all Symbol objects in the optionally provided range.
get_symbols_by_name(name[, namespace])get_symbols_by_name retrieves a list of Symbol objects for the given symbol name.
get_symbols_of_type(sym_type[, start, …])get_symbols_of_type retrieves a list of all Symbol objects of the provided symbol type in the optionally
get_type_by_id(id)get_type_by_id returns the defined type whose unique identifier corresponds with the provided id
get_type_by_name(name)get_type_by_name returns the defined type whose name corresponds with the provided name
get_type_id(name)get_type_id returns the unique identifier of the defined type whose name corresponds with the provided name
get_type_name_by_id(id)get_type_name_by_id returns the defined type name whose unique identifier corresponds with the provided id
get_unique_section_names(name_list)
get_view_of_type(name)get_view_of_type returns the BinaryView associated with the provided name if it exists.
init()
insert(addr, data)insert inserts the bytes in data to the virtual address addr.
internal_namespace()Internal namespace for the current BinaryView
invert_branch(addr[, arch])invert_branch convert the branch instruction of architecture arch at the virtual address addr to the inverse branch.
is_always_branch_patch_available(addr[, arch])is_always_branch_patch_available queries the architecture plugin to determine if the instruction at addr can be made to always branch.
is_invert_branch_patch_available(addr[, arch])is_invert_branch_patch_available queries the architecture plugin to determine if the instruction at addr is a branch that can be inverted.
is_never_branch_patch_available(addr[, arch])is_never_branch_patch_available queries the architecture plugin to determine if the instruction at the instruction at addr can be made to never branch.
is_offset_code_semantics(addr)is_offset_code_semantics checks if an virtual address addr is semantically valid for code.
is_offset_executable(addr)is_offset_executable checks if an virtual address addr is valid for executing.
is_offset_extern_semantics(addr)is_offset_extern_semantics checks if an virtual address addr is semantically valid for external references.
is_offset_readable(addr)is_offset_readable checks if an virtual address addr is valid for reading.
is_offset_writable(addr)is_offset_writable checks if an virtual address addr is valid for writing.
is_offset_writable_semantics(addr)is_offset_writable_semantics checks if an virtual address addr is semantically writable.
is_skip_and_return_value_patch_available(addr)is_skip_and_return_value_patch_available queries the architecture plugin to determine if the instruction at addr is similar to an x86 “call” instruction which can be made to return a value.
is_skip_and_return_zero_patch_available(addr)is_skip_and_return_zero_patch_available queries the architecture plugin to determine if the instruction at addr is similar to an x86 “call” instruction which can be made to return zero.
is_type_auto_defined(name)is_type_auto_defined queries the user type list of name.
is_valid_offset(addr)is_valid_offset checks if an virtual address addr is valid .
navigate(view, offset)
never_branch(addr[, arch])never_branch convert the branch instruction of architecture arch at the virtual address addr to a fall through.
new([data, file_metadata])
notify_data_inserted(offset, length)
notify_data_removed(offset, length)
notify_data_written(offset, length)
open(src[, file_metadata])
parse_expression(expression[, here])Evaluates an string expression to an integer value.
parse_type_string(text)parse_type_string converts C-style string into a Type.
perform_get_address_size()
perform_get_default_endianness()perform_get_default_endianness implements a check which returns true if the BinaryView is executable.
perform_get_entry_point()perform_get_entry_point implements a query for the initial entry point for code execution.
perform_get_length()perform_get_length implements a query for the size of the virtual address range used by the BinaryView.
perform_get_modification(addr)perform_get_modification implements query to the whether the virtual address addr is modified.
perform_get_next_valid_offset(addr)perform_get_next_valid_offset implements a query for the next valid readable, writable, or executable virtual memory address.
perform_get_start()perform_get_start implements a query for the first readable, writable, or executable virtual address in the BinaryView.
perform_insert(addr, data)perform_insert implements a mapping between a virtual address and an absolute file offset, inserting the bytes data to rebased address addr.
perform_is_executable()perform_is_executable implements a check which returns true if the BinaryView is executable.
perform_is_offset_executable(addr)perform_is_offset_executable implements a check if a virtual address addr is executable.
perform_is_offset_readable(offset)perform_is_offset_readable implements a check if an virtual address is readable.
perform_is_offset_writable(addr)perform_is_offset_writable implements a check if a virtual address addr is writable.
perform_is_relocatable()perform_is_relocatable implements a check which returns true if the BinaryView is relocatable.
perform_is_valid_offset(addr)perform_is_valid_offset implements a check if an virtual address addr is valid.
perform_read(addr, length)perform_read implements a mapping between a virtual address and an absolute file offset, reading length bytes from the rebased address addr.
perform_remove(addr, length)perform_remove implements a mapping between a virtual address and an absolute file offset, removing length bytes from the rebased address addr.
perform_save(accessor)
perform_write(addr, data)perform_write implements a mapping between a virtual address and an absolute file offset, writing the bytes data to rebased address addr.
query_metadata(key)query_metadata retrieves a metadata associated with the given key stored in the current BinaryView.
read(addr, length)read returns the data reads at most length bytes from virtual address addr.
reanalyze()reanalyze causes all functions to be reanalyzed.
redo()redo redo the last committed action in the undo database.
register()
register_notification(notify)register_notification provides a mechanism for receiving callbacks for various analysis events.
register_platform_types(platform)register_platform_types ensures that the platform-specific types for a Platform are available for the current BinaryView.
relocation_ranges_at(addr)List of relocation range tuples for a given address
remove(addr, length)remove removes at most length bytes from virtual address addr.
remove_auto_section(name)
remove_auto_segment(start, length)
remove_function(func)remove_function removes the function func from the list of functions
remove_metadata(key)remove_metadata removes the metadata associated with key from the current BinaryView.
remove_user_function(func)remove_user_function removes the user function func from the list of functions
remove_user_section(name)
remove_user_segment(start, length)
rename_type(old_name, new_name)rename_type renames a type in the global list of types for the current BinaryView
save(dest)save saves the original binary file to the provided destination dest along with any modifications.
save_auto_snapshot([progress_func])save_auto_snapshot saves the current database to the already created file.
set_default_session_data(name, value)set_default_session_data saves a variable to the BinaryView.
show_graph_report(title, graph)
show_html_report(title, contents[, plaintext])show_html_report displays the HTML contents in UI applications and plaintext in command-line applications.
show_markdown_report(title, contents[, …])show_markdown_report displays the markdown contents in UI applications and plaintext in command-line applications.
show_plain_text_report(title, contents)
skip_and_return_value(addr, value[, arch])skip_and_return_value convert the call instruction of architecture arch at the virtual address addr to the equivalent of returning a value.
store_metadata(key, md)store_metadata stores an object for the given key in the current BinaryView.
undefine_auto_symbol(sym)undefine_auto_symbol removes a symbol from the internal list of automatically discovered Symbol objects.
undefine_data_var(addr)undefine_data_var removes the non-user data variable at the virtual address addr.
undefine_type(type_id)undefine_type removes a Type from the global list of types for the current BinaryView
undefine_user_data_var(addr)undefine_user_data_var removes the user data variable at the virtual address addr.
undefine_user_symbol(sym)undefine_user_symbol removes a symbol from the internal list of user added Symbol objects.
undefine_user_type(name)undefine_user_type removes a Type from the global list of user types for the current BinaryView
undo()undo undo the last committed action in the undo database.
unregister_notification(notify)unregister_notification unregisters the BinaryDataNotification object passed to register_notification
update_analysis()update_analysis asynchronously starts the analysis running and returns immediately.
update_analysis_and_wait()update_analysis_and_wait blocking call to update the analysis, this call returns when the analysis is complete.
write(addr, data)write writes the bytes in data to the virtual address addr.
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
address_sizeAddress size of the binary (read-only)
allocated_rangesList of valid address ranges for this view (read-only)
analysis_changedboolean analysis state changed of the currently running analysis (read-only)
analysis_infoProvides instantaneous analysis state information and a list of current functions under analysis (read-only).
analysis_progressStatus of current analysis (read-only)
archThe architecture associated with the current BinaryView (read/write)
available_view_typesAvailable view types (read-only)
basic_blocksA generator of all BasicBlock objects in the BinaryView
data_varsList of data variables (read-only)
endEnd offset of the binary (read-only)
endiannessEndianness of the binary (read-only)
entry_functionEntry function (read-only)
entry_pointEntry point of the binary (read-only)
executableWhether the binary is an executable (read-only)
functionsList of functions (read-only)
global_pointer_valueDiscovered value of the global pointer register, if the binary uses one (read-only)
has_databaseboolean has a database been written to disk (read-only)
has_functionsBoolean whether the binary has functions (read-only)
instructionsA generator of instruction tokens and their start addresses
linear_disassemblyIterator for all lines in the linear disassembly of the view
llil_basic_blocksA generator of all LowLevelILBasicBlock objects in the BinaryView
llil_instructionsA generator of llil instructions
long_name
max_function_size_for_analysisMaximum size of function (sum of basic block sizes in bytes) for auto analysis
mlil_basic_blocksA generator of all MediumLevelILBasicBlock objects in the BinaryView
mlil_instructionsA generator of mlil instructions
modifiedboolean modification state of the BinaryView (read/write)
name
namespacesReturns a list of namespaces for the current BinaryView
new_auto_function_analysis_suppressedWhether or not automatically discovered functions will be analyzed
next_address
offset
parameters_for_analysis
parent_viewView that contains the raw data used by this view (read-only)
platformThe platform associated with the current BinaryView (read/write)
registered_view_type
relocatableBoolean - is the binary relocatable (read-only)
relocation_rangesList of relocation range tuples (read-only)
savedboolean state of whether or not the file has been saved (read/write)
sectionsList of sections (read-only)
segmentsList of segments (read-only)
session_dataDictionary object where plugins can store arbitrary data associated with the view
startStart offset of the binary (read-only)
stringsList of strings (read-only)
symbolsDict of symbols (read-only)
typesList of defined types (read-only)
view
view_typeView type (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview.BinaryViewType.html b/personal/api-docs/binaryninja.binaryview.BinaryViewType.html new file mode 100644 index 0000000..e92d48a --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview.BinaryViewType.html @@ -0,0 +1,349 @@ + + + + + + + + + + + binaryninja.binaryview.BinaryViewType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.binaryview.BinaryViewType

+
+
+class BinaryViewType(handle)[source]
+
+
+__init__(handle)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__(handle)x.__init__(…) initializes x; see help(type(x)) for signature
create(data)
get_arch(ident, endian)
get_platform(ident, arch)
get_view_of_file(filename[, …])get_view_of_file returns the first available, non-Raw BinaryView available.
is_valid_for_data(data)
open(src[, file_metadata])
register_arch(ident, endian, arch)
register_default_platform(arch, plat)
register_platform(ident, arch, plat)
+

Attributes

+ ++++ + + + + + + + + + + + +
list
long_nameBinaryView long name (read-only)
nameBinaryView name (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview.BinaryWriter.html b/personal/api-docs/binaryninja.binaryview.BinaryWriter.html new file mode 100644 index 0000000..7c13887 --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview.BinaryWriter.html @@ -0,0 +1,374 @@ + + + + + + + + + + + binaryninja.binaryview.BinaryWriter — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.binaryview.BinaryWriter

+
+
+class BinaryWriter(view, endian=None)[source]
+

class BinaryWriter is a convenience class for writing binary data.

+

BinaryWriter can be instantiated as follows and the rest of the document will start from this context

+
>>> from binaryninja import *
+>>> bv = BinaryViewType['Mach-O'].open("/bin/ls")
+>>> br = BinaryReader(bv)
+>>> bw = BinaryWriter(bv)
+>>>
+
+
+

Or using the optional endian parameter

+
>>> from binaryninja import *
+>>> br = BinaryReader(bv, Endianness.BigEndian)
+>>> bw = BinaryWriter(bv, Endianness.BigEndian)
+>>>
+
+
+
+
+__init__(view, endian=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__(view[, endian])x.__init__(…) initializes x; see help(type(x)) for signature
seek(offset)seek update internal offset to offset.
seek_relative(offset)seek_relative updates the internal offset by offset.
write(value)write writes len(value) bytes to the internal offset, without regard to endianness.
write16(value)write16 writes the lowest order two bytes from the integer value to the current offset, using internal endianness.
write16be(value)write16be writes the lowest order two bytes from the big endian integer value to the current offset.
write16le(value)write16le writes the lowest order two bytes from the little endian integer value to the current offset.
write32(value)write32 writes the lowest order four bytes from the integer value to the current offset, using internal endianness.
write32be(value)write32be writes the lowest order four bytes from the big endian integer value to the current offset.
write32le(value)write32le writes the lowest order four bytes from the little endian integer value to the current offset.
write64(value)write64 writes the lowest order eight bytes from the integer value to the current offset, using internal endianness.
write64be(value)write64be writes the lowest order eight bytes from the big endian integer value to the current offset.
write64le(value)write64le writes the lowest order eight bytes from the little endian integer value to the current offset.
write8(value)write8 lowest order byte from the integer value to the current offset.
+

Attributes

+ ++++ + + + + + + + + +
endiannessThe Endianness to written data.
offsetThe current write offset (read/write).
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview.DataVariable.html b/personal/api-docs/binaryninja.binaryview.DataVariable.html new file mode 100644 index 0000000..bbf8e85 --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview.DataVariable.html @@ -0,0 +1,304 @@ + + + + + + + + + + + binaryninja.binaryview.DataVariable — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.binaryview.DataVariable

+
+
+class DataVariable(addr, var_type, auto_discovered, view=None)[source]
+
+
+__init__(addr, var_type, auto_discovered, view=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(addr, var_type, auto_discovered[, view])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview.OrderedDict.html b/personal/api-docs/binaryninja.binaryview.OrderedDict.html new file mode 100644 index 0000000..faca6d1 --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview.OrderedDict.html @@ -0,0 +1,361 @@ + + + + + + + + + + + binaryninja.binaryview.OrderedDict — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.binaryview.OrderedDict

+
+
+class OrderedDict(**kwds)[source]
+

Dictionary that remembers insertion order

+
+
+__init__(**kwds)[source]
+

Initialize an ordered dictionary. The signature is the same as +regular dictionaries, but keyword arguments are not recommended because +their insertion order is arbitrary.

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__(**kwds)Initialize an ordered dictionary.
clear()
copy()
fromkeys(S[, v])If not specified, the value defaults to None.
get(k[,d])
has_key(k)
items()
iteritems()od.iteritems -> an iterator over the (key, value) pairs in od
iterkeys()
itervalues()od.itervalues -> an iterator over the values in od
keys()
pop(k[,d])value.
popitem()Pairs are returned in LIFO order if last is true or FIFO order if false.
setdefault(k[,d])
update([E, ]**F)If E present and has a .keys() method, does: for k in E: D[k] = E[k] If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v In either case, this is followed by: for k, v in F.items(): D[k] = v
values()
viewitems()
viewkeys()
viewvalues()
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview.Section.html b/personal/api-docs/binaryninja.binaryview.Section.html new file mode 100644 index 0000000..050b35e --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview.Section.html @@ -0,0 +1,346 @@ + + + + + + + + + + + binaryninja.binaryview.Section — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.binaryview.Section

+
+
+class Section(handle)[source]
+
+
+__init__(handle)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(handle)x.__init__(…) initializes x; see help(type(x)) for signature
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
align
auto_defined
end
entry_size
info_data
info_section
linked_section
name
semantics
start
type
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview.Segment.html b/personal/api-docs/binaryninja.binaryview.Segment.html new file mode 100644 index 0000000..f4fe144 --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview.Segment.html @@ -0,0 +1,346 @@ + + + + + + + + + + + binaryninja.binaryview.Segment — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.binaryview.Segment

+
+
+class Segment(handle)[source]
+
+
+__init__(handle)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + +
__init__(handle)x.__init__(…) initializes x; see help(type(x)) for signature
relocation_ranges_at(addr)List of relocation range tuples (read-only)
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
data_end
data_length
data_offset
end
executable
readable
relocation_count
relocation_rangesList of relocation range tuples (read-only)
start
writable
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview.StringReference.html b/personal/api-docs/binaryninja.binaryview.StringReference.html new file mode 100644 index 0000000..00f31b8 --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview.StringReference.html @@ -0,0 +1,316 @@ + + + + + + + + + + + binaryninja.binaryview.StringReference — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.binaryview.StringReference

+
+
+class StringReference(bv, string_type, start, length)[source]
+
+
+__init__(bv, string_type, start, length)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(bv, string_type, start, length)x.__init__(…) initializes x; see help(type(x)) for signature
+

Attributes

+ ++++ + + + + + +
value
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview.StructuredDataValue.html b/personal/api-docs/binaryninja.binaryview.StructuredDataValue.html new file mode 100644 index 0000000..e14e679 --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview.StructuredDataValue.html @@ -0,0 +1,331 @@ + + + + + + + + + + + binaryninja.binaryview.StructuredDataValue — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.binaryview.StructuredDataValue

+
+
+class StructuredDataValue(type, address, value)[source]
+
+
+__init__(type, address, value)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(type, address, value)x.__init__(…) initializes x; see help(type(x)) for signature
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + +
address
int
str
type
value
width
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview.StructuredDataView.html b/personal/api-docs/binaryninja.binaryview.StructuredDataView.html new file mode 100644 index 0000000..f2d3df1 --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview.StructuredDataView.html @@ -0,0 +1,320 @@ + + + + + + + + + + + binaryninja.binaryview.StructuredDataView — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.binaryview.StructuredDataView

+
+
+class StructuredDataView(bv, structure_name, address)[source]
+

class StructuredDataView is a convenience class for reading structured binary data.

+

StructuredDataView can be instantiated as follows:

+
>>> from binaryninja import *
+>>> bv = BinaryViewType['Mach-O'].open("/bin/ls")
+>>> structure = "Elf64_Header"
+>>> address = bv.start
+>>> elf = StructuredDataView(bv, structure, address)
+>>>
+
+
+

Once instantiated, members can be accessed:

+
>>> print("{:x}".format(elf.machine))
+003e
+>>>
+
+
+
+
+__init__(bv, structure_name, address)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(bv, structure_name, address)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview.range.html b/personal/api-docs/binaryninja.binaryview.range.html new file mode 100644 index 0000000..260b4d5 --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview.range.html @@ -0,0 +1,287 @@ + + + + + + + + + + + binaryninja.binaryview.range — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.binaryview.range

+
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.binaryview.with_metaclass.html b/personal/api-docs/binaryninja.binaryview.with_metaclass.html new file mode 100644 index 0000000..49791bf --- /dev/null +++ b/personal/api-docs/binaryninja.binaryview.with_metaclass.html @@ -0,0 +1,287 @@ + + + + + + + + + + + binaryninja.binaryview.with_metaclass — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.binaryview.with_metaclass

+
+
+with_metaclass(meta, *bases)[source]
+

Create a base class with a metaclass.

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.callingconvention-module.html b/personal/api-docs/binaryninja.callingconvention-module.html new file mode 100644 index 0000000..a98743a --- /dev/null +++ b/personal/api-docs/binaryninja.callingconvention-module.html @@ -0,0 +1,392 @@ + + + + + + + + + + + callingconvention module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

callingconvention module

+ ++++ + + + + + + + + +
binaryninja.callingconvention.CallingConvention([…])
binaryninja.callingconvention.range(*args)A Python2 and Python3 Compatible Range Generator
+
+
+
+
+class CallingConvention(arch=None, name=None, handle=None, confidence=255)[source]
+

Bases: object

+
+
+get_incoming_flag_value(flag, func)[source]
+
+ +
+
+get_incoming_reg_value(reg, func)[source]
+
+ +
+
+get_incoming_var_for_parameter_var(in_var, func)[source]
+
+ +
+
+get_parameter_var_for_incoming_var(in_var, func)[source]
+
+ +
+
+perform_get_incoming_flag_value(reg, func)[source]
+
+ +
+
+perform_get_incoming_reg_value(reg, func)[source]
+
+ +
+
+perform_get_incoming_var_for_parameter_var(in_var, func)[source]
+
+ +
+
+perform_get_parameter_var_for_incoming_var(in_var, func)[source]
+
+ +
+
+with_confidence(confidence)[source]
+
+ +
+
+arg_regs_share_index = False
+
+ +
+
+callee_saved_regs = []
+
+ +
+
+caller_saved_regs = []
+
+ +
+
+float_arg_regs = []
+
+ +
+
+float_return_reg = None
+
+ +
+
+global_pointer_reg = None
+
+ +
+
+high_int_return_reg = None
+
+ +
+
+implicitly_defined_regs = []
+
+ +
+
+int_arg_regs = []
+
+ +
+
+int_return_reg = None
+
+ +
+
+name = None
+
+ +
+
+stack_adjusted_on_return = False
+
+ +
+
+stack_reserved_for_arg_regs = False
+
+ +
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.callingconvention.CallingConvention.html b/personal/api-docs/binaryninja.callingconvention.CallingConvention.html new file mode 100644 index 0000000..8f23daf --- /dev/null +++ b/personal/api-docs/binaryninja.callingconvention.CallingConvention.html @@ -0,0 +1,361 @@ + + + + + + + + + + + binaryninja.callingconvention.CallingConvention — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.callingconvention.CallingConvention

+
+
+class CallingConvention(arch=None, name=None, handle=None, confidence=255)[source]
+
+
+__init__(arch=None, name=None, handle=None, confidence=255)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__([arch, name, handle, confidence])x.__init__(…) initializes x; see help(type(x)) for signature
get_incoming_flag_value(flag, func)
get_incoming_reg_value(reg, func)
get_incoming_var_for_parameter_var(in_var, func)
get_parameter_var_for_incoming_var(in_var, func)
perform_get_incoming_flag_value(reg, func)
perform_get_incoming_reg_value(reg, func)
perform_get_incoming_var_for_parameter_var(…)
perform_get_parameter_var_for_incoming_var(…)
with_confidence(confidence)
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
arg_regs_share_index
callee_saved_regs
caller_saved_regs
float_arg_regs
float_return_reg
global_pointer_reg
high_int_return_reg
implicitly_defined_regs
int_arg_regs
int_return_reg
name
stack_adjusted_on_return
stack_reserved_for_arg_regs
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.callingconvention.range.html b/personal/api-docs/binaryninja.callingconvention.range.html new file mode 100644 index 0000000..fa58793 --- /dev/null +++ b/personal/api-docs/binaryninja.callingconvention.range.html @@ -0,0 +1,269 @@ + + + + + + + + + + + binaryninja.callingconvention.range — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.callingconvention.range

+
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.databuffer-module.html b/personal/api-docs/binaryninja.databuffer-module.html new file mode 100644 index 0000000..069422a --- /dev/null +++ b/personal/api-docs/binaryninja.databuffer-module.html @@ -0,0 +1,334 @@ + + + + + + + + + + + databuffer module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

databuffer module

+ ++++ + + + + + + + + + + + + + + + + + +
binaryninja.databuffer.DataBuffer([…])
binaryninja.databuffer.long([x])long(x, base=10) -> long
binaryninja.databuffer.escape_string(text)
binaryninja.databuffer.pyNativeStr(arg)
binaryninja.databuffer.unescape_string(text)
+
+
+
+
+class DataBuffer(contents='', handle=None)[source]
+

Bases: object

+
+
+base64_decode()[source]
+
+ +
+
+base64_encode()[source]
+
+ +
+
+escape()[source]
+
+ +
+
+unescape()[source]
+
+ +
+
+zlib_compress()[source]
+
+ +
+
+zlib_decompress()[source]
+
+ +
+ +
+
+escape_string(text)[source]
+
+ +
+
+unescape_string(text)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.databuffer.DataBuffer.html b/personal/api-docs/binaryninja.databuffer.DataBuffer.html new file mode 100644 index 0000000..dc9d3af --- /dev/null +++ b/personal/api-docs/binaryninja.databuffer.DataBuffer.html @@ -0,0 +1,307 @@ + + + + + + + + + + + binaryninja.databuffer.DataBuffer — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.databuffer.DataBuffer

+
+
+class DataBuffer(contents='', handle=None)[source]
+
+
+__init__(contents='', handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + +
__init__([contents, handle])x.__init__(…) initializes x; see help(type(x)) for signature
base64_decode()
base64_encode()
escape()
unescape()
zlib_compress()
zlib_decompress()
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.databuffer.escape_string.html b/personal/api-docs/binaryninja.databuffer.escape_string.html new file mode 100644 index 0000000..8c9fb94 --- /dev/null +++ b/personal/api-docs/binaryninja.databuffer.escape_string.html @@ -0,0 +1,271 @@ + + + + + + + + + + + binaryninja.databuffer.escape_string — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.databuffer.escape_string

+
+
+escape_string(text)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.databuffer.long.html b/personal/api-docs/binaryninja.databuffer.long.html new file mode 100644 index 0000000..d80f074 --- /dev/null +++ b/personal/api-docs/binaryninja.databuffer.long.html @@ -0,0 +1,323 @@ + + + + + + + + + + + binaryninja.databuffer.long — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.databuffer.long

+
+
+class long(x=0) → long
+

long(x, base=10) -> long

+

Convert a number or string to a long integer, or return 0L if no arguments +are given. If x is floating point, the conversion truncates towards zero.

+

If x is not a number or if base is given, then x must be a string or +Unicode object representing an integer literal in the given base. The +literal can be preceded by ‘+’ or ‘-‘ and be surrounded by whitespace. +The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to +interpret the base from the string as an integer literal. +>>> int(‘0b100’, base=0) +4L

+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + +
bit_length()Number of bits necessary to represent self in binary.
conjugateReturns self, the complex conjugate of any long.
+

Attributes

+ ++++ + + + + + + + + + + + + + + +
denominatorthe denominator of a rational number in lowest terms
imagthe imaginary part of a complex number
numeratorthe numerator of a rational number in lowest terms
realthe real part of a complex number
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.databuffer.pyNativeStr.html b/personal/api-docs/binaryninja.databuffer.pyNativeStr.html new file mode 100644 index 0000000..9f27f6b --- /dev/null +++ b/personal/api-docs/binaryninja.databuffer.pyNativeStr.html @@ -0,0 +1,271 @@ + + + + + + + + + + + binaryninja.databuffer.pyNativeStr — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.databuffer.pyNativeStr

+
+
+pyNativeStr(arg)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.databuffer.unescape_string.html b/personal/api-docs/binaryninja.databuffer.unescape_string.html new file mode 100644 index 0000000..f8eeff2 --- /dev/null +++ b/personal/api-docs/binaryninja.databuffer.unescape_string.html @@ -0,0 +1,271 @@ + + + + + + + + + + + binaryninja.databuffer.unescape_string — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.databuffer.unescape_string

+
+
+unescape_string(text)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.datarender-module.html b/personal/api-docs/binaryninja.datarender-module.html new file mode 100644 index 0000000..4c6fd26 --- /dev/null +++ b/personal/api-docs/binaryninja.datarender-module.html @@ -0,0 +1,332 @@ + + + + + + + + + + + datarender module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

datarender module

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + +
binaryninja.datarender.BinaryView([…])class BinaryView implements a view on binary data, and presents a queryable interface of a binary file.
binaryninja.datarender.DataRenderer([context])
binaryninja.datarender.DisassemblyTextLine(tokens)
binaryninja.datarender.FileMetadata([…])class FileMetadata represents the file being analyzed by Binary Ninja.
binaryninja.datarender.InstructionTextToken(…)class InstructionTextToken is used to tell the core about the various components in the disassembly views.
binaryninja.datarender.Type(handle[, …])
binaryninja.datarender.log_error(text)log_error Logs message to console, if run through the GUI it logs with Error icon, focusing the error console.
+
+
+
+
+class DataRenderer(context=None)[source]
+

Bases: object

+
+
+classmethod is_type_of_struct_name(type, name, context)[source]
+
+ +
+
+perform_free_object(ctxt)[source]
+
+ +
+
+perform_get_lines_for_data(ctxt, view, addr, type, prefix, width, context)[source]
+
+ +
+
+perform_is_valid_for_data(ctxt, view, addr, type, context)[source]
+
+ +
+
+register_generic()[source]
+
+ +
+
+register_type_specific()[source]
+
+ +
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.datarender.BinaryView.html b/personal/api-docs/binaryninja.datarender.BinaryView.html new file mode 100644 index 0000000..9a2fe99 --- /dev/null +++ b/personal/api-docs/binaryninja.datarender.BinaryView.html @@ -0,0 +1,945 @@ + + + + + + + + + + + binaryninja.datarender.BinaryView — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.datarender.BinaryView

+
+
+class BinaryView(file_metadata=None, parent_view=None, handle=None)[source]
+

class BinaryView implements a view on binary data, and presents a queryable interface of a binary file. One key +job of BinaryView is file format parsing which allows Binary Ninja to read, write, insert, remove portions +of the file given a virtual address. For the purposes of this documentation we define a virtual address as the +memory address that the various pieces of the physical file will be loaded at.

+

A binary file does not have to have just one BinaryView, thus much of the interface to manipulate disassembly exists +within or is accessed through a BinaryView. All files are guaranteed to have at least the Raw BinaryView. The +Raw BinaryView is simply a hex editor, but is helpful for manipulating binary files via their absolute addresses.

+

BinaryViews are plugins and thus registered with Binary Ninja at startup, and thus should never be instantiated +directly as this is already done. The list of available BinaryViews can be seen in the BinaryViewType class which +provides an iterator and map of the various installed BinaryViews:

+
>>> list(BinaryViewType)
+[<view type: 'Raw'>, <view type: 'ELF'>, <view type: 'Mach-O'>, <view type: 'PE'>]
+>>> BinaryViewType['ELF']
+<view type: 'ELF'>
+
+
+

To open a file with a given BinaryView the following code can be used:

+
>>> bv = BinaryViewType['Mach-O'].open("/bin/ls")
+>>> bv
+<BinaryView: '/bin/ls', start 0x100000000, len 0xa000>
+
+
+

By convention in the rest of this document we will use bv to mean an open BinaryView of an executable file. +When a BinaryView is open on an executable view, analysis does not automatically run, this can be done by running +the update_analysis_and_wait() method which disassembles the executable and returns when all disassembly is +finished:

+
>>> bv.update_analysis_and_wait()
+>>>
+
+
+

Since BinaryNinja’s analysis is multi-threaded (depending on version) this can also be done in the background by +using the update_analysis() method instead.

+

By standard python convention methods which start with ‘_’ should be considered private and should not be called +externally. Additionally, methods which begin with perform_ should not be called either and are +used explicitly for subclassing the BinaryView.

+
+

Note

+

An important note on the *_user_*() methods. Binary Ninja makes a distinction between edits performed by the user and actions performed by auto analysis. Auto analysis actions that can quickly be recalculated are not saved to the database. Auto analysis actions that take a long time and all user edits are stored in the database (e.g. remove_user_function() rather than remove_function()). Thus use _user_ methods if saving to the database is desired.

+
+
+
+__init__(file_metadata=None, parent_view=None, handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__([file_metadata, parent_view, handle])x.__init__(…) initializes x; see help(type(x)) for signature
abort_analysis()abort_analysis will abort the currently running analysis.
add_analysis_completion_event(callback)add_analysis_completion_event sets up a call back function to be called when analysis has been completed.
add_analysis_option(name)add_analysis_option adds an analysis option.
add_auto_section(name, start, length[, …])
add_auto_segment(start, length, data_offset, …)
add_entry_point(addr[, plat])add_entry_point adds an virtual address to start analysis from for a given plat.
add_function(addr[, plat])add_function add a new function of the given plat at the virtual address addr
add_undo_action(action)
add_user_section(name, start, length[, …])
add_user_segment(start, length, data_offset, …)
always_branch(addr[, arch])always_branch convert the instruction of architecture arch at the virtual address addr to an unconditional branch.
begin_undo_actions()begin_undo_actions start recording actions taken so the can be undone at some point.
commit_undo_actions()commit_undo_actions commit the actions taken since the last commit to the undo database.
convert_to_nop(addr[, arch])convert_to_nop converts the instruction at virtual address addr to a nop of the provided architecture.
create_database(filename[, progress_func])create_database writes the current database (.bndb) file out to the specified file.
create_user_function(addr[, plat])create_user_function add a new user function of the given plat at the virtual address addr
define_auto_symbol(sym)define_auto_symbol adds a symbol to the internal list of automatically discovered Symbol objects in a given namespace.
define_auto_symbol_and_var_or_function(sym, …)define_auto_symbol_and_var_or_function
define_data_var(addr, var_type)define_data_var defines a non-user data variable var_type at the virtual address addr.
define_imported_function(import_addr_sym, func)define_imported_function defines an imported Function func with a ImportedFunctionSymbol type.
define_type(type_id, default_name, type_obj)define_type registers a Type type_obj of the given name in the global list of types for the current BinaryView.
define_user_data_var(addr, var_type)define_user_data_var defines a user data variable var_type at the virtual address addr.
define_user_symbol(sym)define_user_symbol adds a symbol to the internal list of user added Symbol objects.
define_user_type(name, type_obj)define_user_type registers a Type type_obj of the given name in the global list of user types for the current BinaryView.
eval(expression[, here])Evaluates an string expression to an integer value.
external_namespace()External namespace for the current BinaryView
find_next_constant(start, constant[, settings])find_next_constant searches for integer constant constant occurring in the linear view output starting at the virtual address start until the end of the BinaryView.
find_next_data(start, data[, flags])find_next_data searches for the bytes data starting at the virtual address start until the end of the BinaryView.
find_next_text(start, text[, settings, flags])find_next_text searches for string text occurring in the linear view output starting at the virtual address start until the end of the BinaryView.
get_address_for_data_offset(offset)
get_address_input(prompt, title[, …])
get_basic_blocks_at(addr)get_basic_blocks_at get a list of BasicBlock objects which exist at the provided virtual address.
get_basic_blocks_starting_at(addr)get_basic_blocks_starting_at get a list of BasicBlock objects which start at the provided virtual address.
get_code_refs(addr[, length])get_code_refs returns a list of ReferenceSource objects (xrefs or cross-references) that point to the provided virtual address.
get_data_refs(addr[, length])get_data_refs returns a list of virtual addresses of data which references addr.
get_data_var_at(addr)get_data_var_at returns the data type at a given virtual address.
get_disassembly(addr[, arch])get_disassembly simple helper function for printing disassembly of a given address
get_function_at(addr[, plat])get_function_at gets a Function object for the function that starts at virtual address addr:
get_functions_at(addr)get_functions_at get a list of binaryninja.Function objects (one for each valid plat) at the given virtual address.
get_functions_containing(addr)get_functions_containing returns a list of functions which contain the given address or None on failure.
get_instruction_length(addr[, arch])get_instruction_length returns the number of bytes in the instruction of Architecture arch at the virtual address addr
get_linear_disassembly(settings)get_linear_disassembly gets an iterator for all lines in the linear disassembly of the view for the given disassembly settings.
get_linear_disassembly_position_at(addr, …)get_linear_disassembly_position_at instantiates a LinearDisassemblyPosition object for use in get_previous_linear_disassembly_lines() or get_next_linear_disassembly_lines().
get_modification(addr[, length])get_modification returns the modified bytes of up to length bytes from virtual address addr, or if length is None returns the ModificationStatus.
get_next_basic_block_start_after(addr)get_next_basic_block_start_after returns the virtual address of the BasicBlock that occurs after the virtual
get_next_data_after(addr)get_next_data_after retrieves the virtual address of the next non-code byte.
get_next_data_var_after(addr)get_next_data_var_after retrieves the next virtual address of the next DataVariable
get_next_disassembly([arch])get_next_disassembly simple helper function for printing disassembly of the next instruction.
get_next_function_start_after(addr)get_next_function_start_after returns the virtual address of the Function that occurs after the virtual address addr
get_next_linear_disassembly_lines(pos, settings)get_next_linear_disassembly_lines retrieves a list of LinearDisassemblyLine objects for the next disassembly lines, and updates the LinearDisassemblyPosition passed in.
get_previous_basic_block_end_before(addr)get_previous_basic_block_end_before
get_previous_basic_block_start_before(addr)get_previous_basic_block_start_before returns the virtual address of the BasicBlock that occurs prior to the provided virtual address
get_previous_data_before(addr)get_previous_data_before
get_previous_data_var_before(addr)get_previous_data_var_before
get_previous_function_start_before(addr)get_previous_function_start_before returns the virtual address of the Function that occurs prior to the virtual address provided
get_previous_linear_disassembly_lines(pos, …)get_previous_linear_disassembly_lines retrieves a list of LinearDisassemblyLine objects for the previous disassembly lines, and updates the LinearDisassemblyPosition passed in.
get_recent_basic_block_at(addr)
get_recent_function_at(addr)
get_section_by_name(name)
get_sections_at(addr)
get_segment_at(addr)
get_strings([start, length])get_strings returns a list of strings defined in the binary in the optional virtual address range: start-(start+length)
get_symbol_at(addr[, namespace])get_symbol_at returns the Symbol at the provided virtual address.
get_symbol_by_raw_name(name[, namespace])get_symbol_by_raw_name retrieves a Symbol object for the given a raw (mangled) name.
get_symbols([start, length, namespace])get_symbols retrieves the list of all Symbol objects in the optionally provided range.
get_symbols_by_name(name[, namespace])get_symbols_by_name retrieves a list of Symbol objects for the given symbol name.
get_symbols_of_type(sym_type[, start, …])get_symbols_of_type retrieves a list of all Symbol objects of the provided symbol type in the optionally
get_type_by_id(id)get_type_by_id returns the defined type whose unique identifier corresponds with the provided id
get_type_by_name(name)get_type_by_name returns the defined type whose name corresponds with the provided name
get_type_id(name)get_type_id returns the unique identifier of the defined type whose name corresponds with the provided name
get_type_name_by_id(id)get_type_name_by_id returns the defined type name whose unique identifier corresponds with the provided id
get_unique_section_names(name_list)
get_view_of_type(name)get_view_of_type returns the BinaryView associated with the provided name if it exists.
init()
insert(addr, data)insert inserts the bytes in data to the virtual address addr.
internal_namespace()Internal namespace for the current BinaryView
invert_branch(addr[, arch])invert_branch convert the branch instruction of architecture arch at the virtual address addr to the inverse branch.
is_always_branch_patch_available(addr[, arch])is_always_branch_patch_available queries the architecture plugin to determine if the instruction at addr can be made to always branch.
is_invert_branch_patch_available(addr[, arch])is_invert_branch_patch_available queries the architecture plugin to determine if the instruction at addr is a branch that can be inverted.
is_never_branch_patch_available(addr[, arch])is_never_branch_patch_available queries the architecture plugin to determine if the instruction at the instruction at addr can be made to never branch.
is_offset_code_semantics(addr)is_offset_code_semantics checks if an virtual address addr is semantically valid for code.
is_offset_executable(addr)is_offset_executable checks if an virtual address addr is valid for executing.
is_offset_extern_semantics(addr)is_offset_extern_semantics checks if an virtual address addr is semantically valid for external references.
is_offset_readable(addr)is_offset_readable checks if an virtual address addr is valid for reading.
is_offset_writable(addr)is_offset_writable checks if an virtual address addr is valid for writing.
is_offset_writable_semantics(addr)is_offset_writable_semantics checks if an virtual address addr is semantically writable.
is_skip_and_return_value_patch_available(addr)is_skip_and_return_value_patch_available queries the architecture plugin to determine if the instruction at addr is similar to an x86 “call” instruction which can be made to return a value.
is_skip_and_return_zero_patch_available(addr)is_skip_and_return_zero_patch_available queries the architecture plugin to determine if the instruction at addr is similar to an x86 “call” instruction which can be made to return zero.
is_type_auto_defined(name)is_type_auto_defined queries the user type list of name.
is_valid_offset(addr)is_valid_offset checks if an virtual address addr is valid .
navigate(view, offset)
never_branch(addr[, arch])never_branch convert the branch instruction of architecture arch at the virtual address addr to a fall through.
new([data, file_metadata])
notify_data_inserted(offset, length)
notify_data_removed(offset, length)
notify_data_written(offset, length)
open(src[, file_metadata])
parse_expression(expression[, here])Evaluates an string expression to an integer value.
parse_type_string(text)parse_type_string converts C-style string into a Type.
perform_get_address_size()
perform_get_default_endianness()perform_get_default_endianness implements a check which returns true if the BinaryView is executable.
perform_get_entry_point()perform_get_entry_point implements a query for the initial entry point for code execution.
perform_get_length()perform_get_length implements a query for the size of the virtual address range used by the BinaryView.
perform_get_modification(addr)perform_get_modification implements query to the whether the virtual address addr is modified.
perform_get_next_valid_offset(addr)perform_get_next_valid_offset implements a query for the next valid readable, writable, or executable virtual memory address.
perform_get_start()perform_get_start implements a query for the first readable, writable, or executable virtual address in the BinaryView.
perform_insert(addr, data)perform_insert implements a mapping between a virtual address and an absolute file offset, inserting the bytes data to rebased address addr.
perform_is_executable()perform_is_executable implements a check which returns true if the BinaryView is executable.
perform_is_offset_executable(addr)perform_is_offset_executable implements a check if a virtual address addr is executable.
perform_is_offset_readable(offset)perform_is_offset_readable implements a check if an virtual address is readable.
perform_is_offset_writable(addr)perform_is_offset_writable implements a check if a virtual address addr is writable.
perform_is_relocatable()perform_is_relocatable implements a check which returns true if the BinaryView is relocatable.
perform_is_valid_offset(addr)perform_is_valid_offset implements a check if an virtual address addr is valid.
perform_read(addr, length)perform_read implements a mapping between a virtual address and an absolute file offset, reading length bytes from the rebased address addr.
perform_remove(addr, length)perform_remove implements a mapping between a virtual address and an absolute file offset, removing length bytes from the rebased address addr.
perform_save(accessor)
perform_write(addr, data)perform_write implements a mapping between a virtual address and an absolute file offset, writing the bytes data to rebased address addr.
query_metadata(key)query_metadata retrieves a metadata associated with the given key stored in the current BinaryView.
read(addr, length)read returns the data reads at most length bytes from virtual address addr.
reanalyze()reanalyze causes all functions to be reanalyzed.
redo()redo redo the last committed action in the undo database.
register()
register_notification(notify)register_notification provides a mechanism for receiving callbacks for various analysis events.
register_platform_types(platform)register_platform_types ensures that the platform-specific types for a Platform are available for the current BinaryView.
relocation_ranges_at(addr)List of relocation range tuples for a given address
remove(addr, length)remove removes at most length bytes from virtual address addr.
remove_auto_section(name)
remove_auto_segment(start, length)
remove_function(func)remove_function removes the function func from the list of functions
remove_metadata(key)remove_metadata removes the metadata associated with key from the current BinaryView.
remove_user_function(func)remove_user_function removes the user function func from the list of functions
remove_user_section(name)
remove_user_segment(start, length)
rename_type(old_name, new_name)rename_type renames a type in the global list of types for the current BinaryView
save(dest)save saves the original binary file to the provided destination dest along with any modifications.
save_auto_snapshot([progress_func])save_auto_snapshot saves the current database to the already created file.
set_default_session_data(name, value)set_default_session_data saves a variable to the BinaryView.
show_graph_report(title, graph)
show_html_report(title, contents[, plaintext])show_html_report displays the HTML contents in UI applications and plaintext in command-line applications.
show_markdown_report(title, contents[, …])show_markdown_report displays the markdown contents in UI applications and plaintext in command-line applications.
show_plain_text_report(title, contents)
skip_and_return_value(addr, value[, arch])skip_and_return_value convert the call instruction of architecture arch at the virtual address addr to the equivalent of returning a value.
store_metadata(key, md)store_metadata stores an object for the given key in the current BinaryView.
undefine_auto_symbol(sym)undefine_auto_symbol removes a symbol from the internal list of automatically discovered Symbol objects.
undefine_data_var(addr)undefine_data_var removes the non-user data variable at the virtual address addr.
undefine_type(type_id)undefine_type removes a Type from the global list of types for the current BinaryView
undefine_user_data_var(addr)undefine_user_data_var removes the user data variable at the virtual address addr.
undefine_user_symbol(sym)undefine_user_symbol removes a symbol from the internal list of user added Symbol objects.
undefine_user_type(name)undefine_user_type removes a Type from the global list of user types for the current BinaryView
undo()undo undo the last committed action in the undo database.
unregister_notification(notify)unregister_notification unregisters the BinaryDataNotification object passed to register_notification
update_analysis()update_analysis asynchronously starts the analysis running and returns immediately.
update_analysis_and_wait()update_analysis_and_wait blocking call to update the analysis, this call returns when the analysis is complete.
write(addr, data)write writes the bytes in data to the virtual address addr.
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
address_sizeAddress size of the binary (read-only)
allocated_rangesList of valid address ranges for this view (read-only)
analysis_changedboolean analysis state changed of the currently running analysis (read-only)
analysis_infoProvides instantaneous analysis state information and a list of current functions under analysis (read-only).
analysis_progressStatus of current analysis (read-only)
archThe architecture associated with the current BinaryView (read/write)
available_view_typesAvailable view types (read-only)
basic_blocksA generator of all BasicBlock objects in the BinaryView
data_varsList of data variables (read-only)
endEnd offset of the binary (read-only)
endiannessEndianness of the binary (read-only)
entry_functionEntry function (read-only)
entry_pointEntry point of the binary (read-only)
executableWhether the binary is an executable (read-only)
functionsList of functions (read-only)
global_pointer_valueDiscovered value of the global pointer register, if the binary uses one (read-only)
has_databaseboolean has a database been written to disk (read-only)
has_functionsBoolean whether the binary has functions (read-only)
instructionsA generator of instruction tokens and their start addresses
linear_disassemblyIterator for all lines in the linear disassembly of the view
llil_basic_blocksA generator of all LowLevelILBasicBlock objects in the BinaryView
llil_instructionsA generator of llil instructions
long_name
max_function_size_for_analysisMaximum size of function (sum of basic block sizes in bytes) for auto analysis
mlil_basic_blocksA generator of all MediumLevelILBasicBlock objects in the BinaryView
mlil_instructionsA generator of mlil instructions
modifiedboolean modification state of the BinaryView (read/write)
name
namespacesReturns a list of namespaces for the current BinaryView
new_auto_function_analysis_suppressedWhether or not automatically discovered functions will be analyzed
next_address
offset
parameters_for_analysis
parent_viewView that contains the raw data used by this view (read-only)
platformThe platform associated with the current BinaryView (read/write)
registered_view_type
relocatableBoolean - is the binary relocatable (read-only)
relocation_rangesList of relocation range tuples (read-only)
savedboolean state of whether or not the file has been saved (read/write)
sectionsList of sections (read-only)
segmentsList of segments (read-only)
session_dataDictionary object where plugins can store arbitrary data associated with the view
startStart offset of the binary (read-only)
stringsList of strings (read-only)
symbolsDict of symbols (read-only)
typesList of defined types (read-only)
view
view_typeView type (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.datarender.DataRenderer.html b/personal/api-docs/binaryninja.datarender.DataRenderer.html new file mode 100644 index 0000000..dfcb32b --- /dev/null +++ b/personal/api-docs/binaryninja.datarender.DataRenderer.html @@ -0,0 +1,309 @@ + + + + + + + + + + + binaryninja.datarender.DataRenderer — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.datarender.DataRenderer

+
+
+class DataRenderer(context=None)[source]
+
+
+__init__(context=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + +
__init__([context])x.__init__(…) initializes x; see help(type(x)) for signature
is_type_of_struct_name(type, name, context)
perform_free_object(ctxt)
perform_get_lines_for_data(ctxt, view, addr, …)
perform_is_valid_for_data(ctxt, view, addr, …)
register_generic()
register_type_specific()
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.datarender.DisassemblyTextLine.html b/personal/api-docs/binaryninja.datarender.DisassemblyTextLine.html new file mode 100644 index 0000000..e484c05 --- /dev/null +++ b/personal/api-docs/binaryninja.datarender.DisassemblyTextLine.html @@ -0,0 +1,291 @@ + + + + + + + + + + + binaryninja.datarender.DisassemblyTextLine — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.datarender.DisassemblyTextLine

+
+
+class DisassemblyTextLine(tokens, address=None, il_instr=None, color=None)[source]
+
+
+__init__(tokens, address=None, il_instr=None, color=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(tokens[, address, il_instr, color])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.datarender.FileMetadata.html b/personal/api-docs/binaryninja.datarender.FileMetadata.html new file mode 100644 index 0000000..45d3669 --- /dev/null +++ b/personal/api-docs/binaryninja.datarender.FileMetadata.html @@ -0,0 +1,380 @@ + + + + + + + + + + + binaryninja.datarender.FileMetadata — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.datarender.FileMetadata

+
+
+class FileMetadata(filename=None, handle=None)[source]
+

class FileMetadata represents the file being analyzed by Binary Ninja. It is responsible for opening, +closing, creating the database (.bndb) files, and is used to keep track of undoable actions.

+
+
+__init__(filename=None, handle=None)[source]
+

Instantiates a new FileMetadata class.

+ +++ + + + +
Parameters:
    +
  • filename – The string path to the file to be opened. Defaults to None.
  • +
  • handle – A handle to the underlying C FileMetadata object. Defaults to None.
  • +
+
+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__([filename, handle])Instantiates a new FileMetadata class.
begin_undo_actions()begin_undo_actions start recording actions taken so the can be undone at some point.
close()Closes the underlying file handle.
commit_undo_actions()commit_undo_actions commit the actions taken since the last commit to the undo database.
create_database(filename[, progress_func])
get_view_of_type(name)
navigate(view, offset)
open_existing_database(filename[, progress_func])
redo()redo redo the last commited action in the undo database.
save_auto_snapshot([progress_func])
set_default_session_data(name, value)
undo()undo undo the last commited action in the undo database.
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
analysis_changedBoolean result of whether the auto-analysis results have changed (read-only)
filenameThe name of the open bndb or binary filename (read/write)
has_databaseWhether the FileMetadata is backed by a database (read-only)
modifiedBoolean result of whether the file is modified (Inverse of ‘saved’ property) (read/write)
navigation
offsetThe current offset into the file (read/write)
original_filenameThe original name of the binary opened if a bndb, otherwise reads or sets the current filename (read/write)
rawGets the “Raw” BinaryView of the file
savedBoolean result of whether the file has been saved (Inverse of ‘modified’ property) (read/write)
session_dataDictionary object where plugins can store arbitrary data associated with the file
view
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.datarender.InstructionTextToken.html b/personal/api-docs/binaryninja.datarender.InstructionTextToken.html new file mode 100644 index 0000000..ff03cd8 --- /dev/null +++ b/personal/api-docs/binaryninja.datarender.InstructionTextToken.html @@ -0,0 +1,397 @@ + + + + + + + + + + + binaryninja.datarender.InstructionTextToken — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.datarender.InstructionTextToken

+
+
+class InstructionTextToken(token_type, text, value=0, size=0, operand=4294967295, context=<InstructionTextTokenContext.NoTokenContext: 0>, address=0, confidence=255, typeNames=[])[source]
+

class InstructionTextToken is used to tell the core about the various components in the disassembly views.

+
+
++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
InstructionTextTokenTypeDescription
TextTokenText that doesn’t fit into the other tokens
InstructionTokenThe instruction mnemonic
OperandSeparatorTokenThe comma or whatever else separates tokens
RegisterTokenRegisters
IntegerTokenIntegers
PossibleAddressTokenIntegers that are likely addresses
BeginMemoryOperandTokenThe start of memory operand
EndMemoryOperandTokenThe end of a memory operand
FloatingPointTokenFloating point number
AnnotationTokenFor internal use only
CodeRelativeAddressTokenFor internal use only
StackVariableTypeTokenFor internal use only
DataVariableTypeTokenFor internal use only
FunctionReturnTypeTokenFor internal use only
FunctionAttributeTokenFor internal use only
ArgumentTypeTokenFor internal use only
ArgumentNameTokenFor internal use only
HexDumpByteValueTokenFor internal use only
HexDumpSkippedByteTokenFor internal use only
HexDumpInvalidByteTokenFor internal use only
HexDumpTextTokenFor internal use only
OpcodeTokenFor internal use only
StringTokenFor internal use only
CharacterConstantTokenFor internal use only
CodeSymbolTokenFor internal use only
DataSymbolTokenFor internal use only
StackVariableTokenFor internal use only
ImportTokenFor internal use only
AddressDisplayTokenFor internal use only
+
+
+
+__init__(token_type, text, value=0, size=0, operand=4294967295, context=<InstructionTextTokenContext.NoTokenContext: 0>, address=0, confidence=255, typeNames=[])[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + +
__init__(token_type, text[, value, size, …])x.__init__(…) initializes x; see help(type(x)) for signature
get_instruction_lines(tokens[, count])Helper method for converting between core.BNInstructionTextToken and InstructionTextToken lists
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.datarender.Type.html b/personal/api-docs/binaryninja.datarender.Type.html new file mode 100644 index 0000000..f22caa6 --- /dev/null +++ b/personal/api-docs/binaryninja.datarender.Type.html @@ -0,0 +1,429 @@ + + + + + + + + + + + binaryninja.datarender.Type — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.datarender.Type

+
+
+class Type(handle, platform=None, confidence=255)[source]
+
+
+__init__(handle, platform=None, confidence=255)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__(handle[, platform, confidence])x.__init__(…) initializes x; see help(type(x)) for signature
array(t, count)
bool()
char()
enumeration_type(arch, e[, width, sign])
float(width[, altname])float class method for creating an floating point Types.
function(ret, params[, calling_convention, …])function class method for creating an function Type.
generate_auto_demangled_type_id(name)
generate_auto_type_id(source, name)
get_auto_demangled_type_id_source()
get_string_after_name()
get_string_before_name()
get_tokens([base_confidence])
get_tokens_after_name([base_confidence])
get_tokens_before_name([base_confidence])
int(width[, sign, altname])int class method for creating an int Type.
named_type(named_type[, width, align])
named_type_from_registered_type(view, name)
named_type_from_type(name, t)
named_type_from_type_and_id(type_id, name, t)
pointer(arch, t[, const, volatile, ref_type])
structure_type(structure_type)
void()
with_confidence(confidence)
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
alignmentType alignment (read-only)
calling_conventionCalling convention (read-only)
can_returnWhether type can return (read-only)
constWhether type is const (read/write)
countType count (read-only)
element_typeTarget (read-only)
enumerationType enumeration (read-only)
has_variable_argumentsWhether type has variable arguments (read-only)
modifiedWhether type is modified (read-only)
named_type_referenceReference to a named type (read-only)
offsetOffset into structure (read-only)
parametersType parameters list (read-only)
return_valueReturn value (read-only)
signedWether type is signed (read-only)
stack_adjustmentStack adjustment for function (read-only)
structureStructure of the type (read-only)
targetTarget (read-only)
tokensType string as a list of tokens (read-only)
type_classType class (read-only)
widthType width (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.datarender.log_error.html b/personal/api-docs/binaryninja.datarender.log_error.html new file mode 100644 index 0000000..0519046 --- /dev/null +++ b/personal/api-docs/binaryninja.datarender.log_error.html @@ -0,0 +1,294 @@ + + + + + + + + + + + binaryninja.datarender.log_error — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.datarender.log_error

+
+
+log_error(text)[source]
+

log_error Logs message to console, if run through the GUI it logs with Error icon, focusing the error console.

+ +++ + + + + + + + +
Parameters:

text (str) – message to print

+
Return type:

None

+
Example:
>>> log_to_stdout(LogLevel.DebugLog)
+>>> log_error("Spanferkel!")
+Spanferkel!
+>>>
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.demangle-module.html b/personal/api-docs/binaryninja.demangle-module.html new file mode 100644 index 0000000..4a3870b --- /dev/null +++ b/personal/api-docs/binaryninja.demangle-module.html @@ -0,0 +1,353 @@ + + + + + + + + + + + demangle module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

demangle module

+ ++++ + + + + + + + + + + + + + + + + + +
binaryninja.demangle.demangle_gnu3(arch, …)
binaryninja.demangle.demangle_ms(arch, …)demangle_ms demangles a mangled Microsoft Visual Studio C++ name to a Type object.
binaryninja.demangle.get_qualified_name(names)get_qualified_name gets a qualified name for the provided name list.
binaryninja.demangle.pyNativeStr(arg)
binaryninja.demangle.range(*args)A Python2 and Python3 Compatible Range Generator
+
+
+
+
+demangle_gnu3(arch, mangled_name)[source]
+
+ +
+
+demangle_ms(arch, mangled_name)[source]
+

demangle_ms demangles a mangled Microsoft Visual Studio C++ name to a Type object.

+ +++ + + + + + + + + + +
Parameters:
    +
  • arch (Architecture) – Architecture for the symbol. Required for pointer and integer sizes.
  • +
  • mangled_name (str) – a mangled Microsoft Visual Studio C++ name
  • +
+
Returns:

returns tuple of (Type, demangled_name) or (None, mangled_name) on error

+
Return type:

Tuple

+
Example:
>>> demangle_ms(Architecture["x86_64"], "?testf@Foobar@@SA?AW4foo@1@W421@@Z")
+(<type: public: static enum Foobar::foo __cdecl (enum Foobar::foo)>, ['Foobar', 'testf'])
+>>>
+
+
+
+
+ +
+
+get_qualified_name(names)[source]
+

get_qualified_name gets a qualified name for the provided name list.

+ +++ + + + + + + + + + +
Parameters:

names (list(str)) – name list to qualify

+
Returns:

a qualified name

+
Return type:

str

+
Example:
>>> type, name = demangle_ms(Architecture["x86_64"], "?testf@Foobar@@SA?AW4foo@1@W421@@Z")
+>>> get_qualified_name(name)
+'Foobar::testf'
+>>>
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.demangle.demangle_gnu3.html b/personal/api-docs/binaryninja.demangle.demangle_gnu3.html new file mode 100644 index 0000000..3115e73 --- /dev/null +++ b/personal/api-docs/binaryninja.demangle.demangle_gnu3.html @@ -0,0 +1,271 @@ + + + + + + + + + + + binaryninja.demangle.demangle_gnu3 — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.demangle.demangle_gnu3

+
+
+demangle_gnu3(arch, mangled_name)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.demangle.demangle_ms.html b/personal/api-docs/binaryninja.demangle.demangle_ms.html new file mode 100644 index 0000000..53d3818 --- /dev/null +++ b/personal/api-docs/binaryninja.demangle.demangle_ms.html @@ -0,0 +1,297 @@ + + + + + + + + + + + binaryninja.demangle.demangle_ms — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.demangle.demangle_ms

+
+
+demangle_ms(arch, mangled_name)[source]
+

demangle_ms demangles a mangled Microsoft Visual Studio C++ name to a Type object.

+ +++ + + + + + + + + + +
Parameters:
    +
  • arch (Architecture) – Architecture for the symbol. Required for pointer and integer sizes.
  • +
  • mangled_name (str) – a mangled Microsoft Visual Studio C++ name
  • +
+
Returns:

returns tuple of (Type, demangled_name) or (None, mangled_name) on error

+
Return type:

Tuple

+
Example:
>>> demangle_ms(Architecture["x86_64"], "?testf@Foobar@@SA?AW4foo@1@W421@@Z")
+(<type: public: static enum Foobar::foo __cdecl (enum Foobar::foo)>, ['Foobar', 'testf'])
+>>>
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.demangle.get_qualified_name.html b/personal/api-docs/binaryninja.demangle.get_qualified_name.html new file mode 100644 index 0000000..3dd8078 --- /dev/null +++ b/personal/api-docs/binaryninja.demangle.get_qualified_name.html @@ -0,0 +1,295 @@ + + + + + + + + + + + binaryninja.demangle.get_qualified_name — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.demangle.get_qualified_name

+
+
+get_qualified_name(names)[source]
+

get_qualified_name gets a qualified name for the provided name list.

+ +++ + + + + + + + + + +
Parameters:

names (list(str)) – name list to qualify

+
Returns:

a qualified name

+
Return type:

str

+
Example:
>>> type, name = demangle_ms(Architecture["x86_64"], "?testf@Foobar@@SA?AW4foo@1@W421@@Z")
+>>> get_qualified_name(name)
+'Foobar::testf'
+>>>
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.demangle.pyNativeStr.html b/personal/api-docs/binaryninja.demangle.pyNativeStr.html new file mode 100644 index 0000000..ce23fe2 --- /dev/null +++ b/personal/api-docs/binaryninja.demangle.pyNativeStr.html @@ -0,0 +1,271 @@ + + + + + + + + + + + binaryninja.demangle.pyNativeStr — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.demangle.pyNativeStr

+
+
+pyNativeStr(arg)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.demangle.range.html b/personal/api-docs/binaryninja.demangle.range.html new file mode 100644 index 0000000..ca11eb8 --- /dev/null +++ b/personal/api-docs/binaryninja.demangle.range.html @@ -0,0 +1,272 @@ + + + + + + + + + + + binaryninja.demangle.range — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.demangle.range

+
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.downloadprovider-module.html b/personal/api-docs/binaryninja.downloadprovider-module.html new file mode 100644 index 0000000..5032461 --- /dev/null +++ b/personal/api-docs/binaryninja.downloadprovider-module.html @@ -0,0 +1,395 @@ + + + + + + + + + + + downloadprovider module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

downloadprovider module

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
binaryninja.downloadprovider.DownloadInstance(…)
binaryninja.downloadprovider.DownloadProvider([…])
binaryninja.downloadprovider.ProxyHandler([…])
binaryninja.downloadprovider.PythonDownloadInstance(…)
binaryninja.downloadprovider.PythonDownloadProvider([…])
binaryninja.downloadprovider.Settings([…])
binaryninja.downloadprovider.URLError(reason)
binaryninja.downloadprovider.build_opener(…)Create an opener object from a list of handlers.
binaryninja.downloadprovider.install_opener(opener)
binaryninja.downloadprovider.pyNativeStr(arg)
binaryninja.downloadprovider.range(*args)A Python2 and Python3 Compatible Range Generator
binaryninja.downloadprovider.urlopen(url[, …])
binaryninja.downloadprovider.with_metaclass(…)Create a base class with a metaclass.
+
+
+
+
+class DownloadInstance(provider, handle=None)[source]
+

Bases: object

+
+
+perform_destroy_instance()[source]
+
+ +
+
+perform_request(url, callbacks)[source]
+
+ +
+ +
+
+class DownloadProvider(handle=None)[source]
+

Bases: object

+
+
+create_instance()[source]
+
+ +
+
+register()[source]
+
+ +
+
+instance_class = None
+
+ +
+
+name = None
+
+ +
+ +
+
+class PythonDownloadInstance(provider)[source]
+

Bases: binaryninja.downloadprovider.DownloadInstance

+
+
+perform_destroy_instance()[source]
+
+ +
+
+perform_request(url)[source]
+
+ +
+ +
+
+class PythonDownloadProvider(handle=None)[source]
+

Bases: binaryninja.downloadprovider.DownloadProvider

+
+
+instance_class
+

alias of PythonDownloadInstance

+
+ +
+
+name = 'PythonDownloadProvider'
+
+ +
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.downloadprovider.DownloadInstance.html b/personal/api-docs/binaryninja.downloadprovider.DownloadInstance.html new file mode 100644 index 0000000..bdc70b8 --- /dev/null +++ b/personal/api-docs/binaryninja.downloadprovider.DownloadInstance.html @@ -0,0 +1,303 @@ + + + + + + + + + + + binaryninja.downloadprovider.DownloadInstance — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.downloadprovider.DownloadInstance

+
+
+class DownloadInstance(provider, handle=None)[source]
+
+
+__init__(provider, handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + +
__init__(provider[, handle])x.__init__(…) initializes x; see help(type(x)) for signature
perform_destroy_instance()
perform_request(url, callbacks)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.downloadprovider.DownloadProvider.html b/personal/api-docs/binaryninja.downloadprovider.DownloadProvider.html new file mode 100644 index 0000000..059ebbe --- /dev/null +++ b/personal/api-docs/binaryninja.downloadprovider.DownloadProvider.html @@ -0,0 +1,318 @@ + + + + + + + + + + + binaryninja.downloadprovider.DownloadProvider — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.downloadprovider.DownloadProvider

+
+
+class DownloadProvider(handle=None)[source]
+
+
+__init__(handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + +
__init__([handle])x.__init__(…) initializes x; see help(type(x)) for signature
create_instance()
register()
+

Attributes

+ ++++ + + + + + + + + +
instance_class
name
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.downloadprovider.ProxyHandler.html b/personal/api-docs/binaryninja.downloadprovider.ProxyHandler.html new file mode 100644 index 0000000..1170168 --- /dev/null +++ b/personal/api-docs/binaryninja.downloadprovider.ProxyHandler.html @@ -0,0 +1,317 @@ + + + + + + + + + + + binaryninja.downloadprovider.ProxyHandler — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.downloadprovider.ProxyHandler

+
+
+class ProxyHandler(proxies=None)[source]
+
+
+__init__(proxies=None)[source]
+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + +
__init__([proxies])
add_parent(parent)
close()
proxy_open(req, proxy, type)
+

Attributes

+ ++++ + + + + + +
handler_order
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.downloadprovider.PythonDownloadInstance.html b/personal/api-docs/binaryninja.downloadprovider.PythonDownloadInstance.html new file mode 100644 index 0000000..2186b13 --- /dev/null +++ b/personal/api-docs/binaryninja.downloadprovider.PythonDownloadInstance.html @@ -0,0 +1,303 @@ + + + + + + + + + + + binaryninja.downloadprovider.PythonDownloadInstance — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.downloadprovider.PythonDownloadInstance

+
+
+class PythonDownloadInstance(provider)[source]
+
+
+__init__(provider)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + +
__init__(provider)x.__init__(…) initializes x; see help(type(x)) for signature
perform_destroy_instance()
perform_request(url)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.downloadprovider.PythonDownloadProvider.html b/personal/api-docs/binaryninja.downloadprovider.PythonDownloadProvider.html new file mode 100644 index 0000000..f58108f --- /dev/null +++ b/personal/api-docs/binaryninja.downloadprovider.PythonDownloadProvider.html @@ -0,0 +1,315 @@ + + + + + + + + + + + binaryninja.downloadprovider.PythonDownloadProvider — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.downloadprovider.PythonDownloadProvider

+
+
+class PythonDownloadProvider(handle=None)[source]
+
+
+__init__(handle=None)
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + +
__init__([handle])x.__init__(…) initializes x; see help(type(x)) for signature
create_instance()
register()
+

Attributes

+ ++++ + + + + + +
name
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.downloadprovider.Settings.html b/personal/api-docs/binaryninja.downloadprovider.Settings.html new file mode 100644 index 0000000..458d641 --- /dev/null +++ b/personal/api-docs/binaryninja.downloadprovider.Settings.html @@ -0,0 +1,360 @@ + + + + + + + + + + + binaryninja.downloadprovider.Settings — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.downloadprovider.Settings

+
+
+class Settings(registry_id='default')[source]
+
+
+__init__(registry_id='default')[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__([registry_id])x.__init__(…) initializes x; see help(type(x)) for signature
get_bool(id[, view])
get_bool_with_scope(id[, view, scope])
get_double(id[, view])
get_double_with_scope(id[, view, scope])
get_integer(id[, view])
get_integer_with_scope(id[, view, scope])
get_schema()
get_string(id[, view])
get_string_list(id[, view])
get_string_list_with_scope(id[, view, scope])
get_string_with_scope(id[, view, scope])
register_group(group, title)register_group registers a group for use with this Settings registry.
register_setting(id, properties)register_setting registers a new setting with this Settings registry.
reset(id[, view, scope])
reset_all([view, scope])
set_bool(id, value[, view, scope])
set_double(id, value[, view, scope])
set_integer(id, value[, view, scope])
set_string(id, value[, view, scope])
set_string_list(id, value[, view, scope])
update_property(id, setting_property)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.downloadprovider.URLError.html b/personal/api-docs/binaryninja.downloadprovider.URLError.html new file mode 100644 index 0000000..d8c87b8 --- /dev/null +++ b/personal/api-docs/binaryninja.downloadprovider.URLError.html @@ -0,0 +1,279 @@ + + + + + + + + + + + binaryninja.downloadprovider.URLError — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.downloadprovider.URLError

+
+
+exception URLError(reason)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.downloadprovider.build_opener.html b/personal/api-docs/binaryninja.downloadprovider.build_opener.html new file mode 100644 index 0000000..53a7f1d --- /dev/null +++ b/personal/api-docs/binaryninja.downloadprovider.build_opener.html @@ -0,0 +1,284 @@ + + + + + + + + + + + binaryninja.downloadprovider.build_opener — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.downloadprovider.build_opener

+
+
+build_opener(*handlers)[source]
+

Create an opener object from a list of handlers.

+

The opener will use several default handlers, including support +for HTTP, FTP and when applicable, HTTPS.

+

If any of the handlers passed as arguments are subclasses of the +default handlers, the default handlers will not be used.

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.downloadprovider.install_opener.html b/personal/api-docs/binaryninja.downloadprovider.install_opener.html new file mode 100644 index 0000000..5a6fd6e --- /dev/null +++ b/personal/api-docs/binaryninja.downloadprovider.install_opener.html @@ -0,0 +1,279 @@ + + + + + + + + + + + binaryninja.downloadprovider.install_opener — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.downloadprovider.install_opener

+
+
+install_opener(opener)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.downloadprovider.pyNativeStr.html b/personal/api-docs/binaryninja.downloadprovider.pyNativeStr.html new file mode 100644 index 0000000..09951e8 --- /dev/null +++ b/personal/api-docs/binaryninja.downloadprovider.pyNativeStr.html @@ -0,0 +1,279 @@ + + + + + + + + + + + binaryninja.downloadprovider.pyNativeStr — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.downloadprovider.pyNativeStr

+
+
+pyNativeStr(arg)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.downloadprovider.range.html b/personal/api-docs/binaryninja.downloadprovider.range.html new file mode 100644 index 0000000..215e8f7 --- /dev/null +++ b/personal/api-docs/binaryninja.downloadprovider.range.html @@ -0,0 +1,280 @@ + + + + + + + + + + + binaryninja.downloadprovider.range — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.downloadprovider.range

+
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.downloadprovider.urlopen.html b/personal/api-docs/binaryninja.downloadprovider.urlopen.html new file mode 100644 index 0000000..6ead98b --- /dev/null +++ b/personal/api-docs/binaryninja.downloadprovider.urlopen.html @@ -0,0 +1,279 @@ + + + + + + + + + + + binaryninja.downloadprovider.urlopen — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.downloadprovider.urlopen

+
+
+urlopen(url, data=None, timeout=<object object>, cafile=None, capath=None, cadefault=False, context=None)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.downloadprovider.with_metaclass.html b/personal/api-docs/binaryninja.downloadprovider.with_metaclass.html new file mode 100644 index 0000000..3bda0ee --- /dev/null +++ b/personal/api-docs/binaryninja.downloadprovider.with_metaclass.html @@ -0,0 +1,280 @@ + + + + + + + + + + + binaryninja.downloadprovider.with_metaclass — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.downloadprovider.with_metaclass

+
+
+with_metaclass(meta, *bases)[source]
+

Create a base class with a metaclass.

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums-module.html b/personal/api-docs/binaryninja.enums-module.html new file mode 100644 index 0000000..d97c20b --- /dev/null +++ b/personal/api-docs/binaryninja.enums-module.html @@ -0,0 +1,4278 @@ + + + + + + + + + + + enums module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

enums module

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
binaryninja.enums.ActionType
binaryninja.enums.AnalysisSkipReason
binaryninja.enums.AnalysisState
binaryninja.enums.BranchType
binaryninja.enums.CallingConventionName
binaryninja.enums.DisassemblyOption
binaryninja.enums.Endianness
binaryninja.enums.FindFlag
binaryninja.enums.FlagRole
binaryninja.enums.FormInputFieldType
binaryninja.enums.FunctionAnalysisSkipOverride
binaryninja.enums.FunctionGraphType
binaryninja.enums.HighlightColorStyle
binaryninja.enums.HighlightStandardColor
binaryninja.enums.ILBranchDependence
binaryninja.enums.ImplicitRegisterExtend
binaryninja.enums.InstructionTextTokenContext
binaryninja.enums.InstructionTextTokenType
binaryninja.enums.IntegerDisplayType
binaryninja.enums.LinearDisassemblyLineType
binaryninja.enums.LogLevel
binaryninja.enums.LowLevelILFlagCondition
binaryninja.enums.LowLevelILOperation
binaryninja.enums.MediumLevelILOperation
binaryninja.enums.MemberAccess
binaryninja.enums.MemberScope
binaryninja.enums.MessageBoxButtonResult
binaryninja.enums.MessageBoxButtonSet
binaryninja.enums.MessageBoxIcon
binaryninja.enums.MetadataType
binaryninja.enums.ModificationStatus
binaryninja.enums.NameType
binaryninja.enums.NamedTypeReferenceClass
binaryninja.enums.PluginCommandType
binaryninja.enums.PluginLoadOrder
binaryninja.enums.PluginOrigin
binaryninja.enums.PluginType
binaryninja.enums.PluginUpdateStatus
binaryninja.enums.PointerSuffix
binaryninja.enums.ReferenceType
binaryninja.enums.RegisterValueType
binaryninja.enums.RelocationType
binaryninja.enums.ReportType
binaryninja.enums.ScriptingProviderExecuteResult
binaryninja.enums.ScriptingProviderInputReadyState
binaryninja.enums.SectionSemantics
binaryninja.enums.SegmentFlag
binaryninja.enums.SettingsScope
binaryninja.enums.StringType
binaryninja.enums.StructureType
binaryninja.enums.SymbolBinding
binaryninja.enums.SymbolType
binaryninja.enums.TransformType
binaryninja.enums.TypeClass
binaryninja.enums.UpdateResult
binaryninja.enums.VariableSourceType
+
+
+
+
+class ActionType[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+AnalysisAction = <ActionType.AnalysisAction: 2>
+
+ +
+
+DataModificationAction = <ActionType.DataModificationAction: 1>
+
+ +
+
+DataModificationAndAnalysisAction = <ActionType.DataModificationAndAnalysisAction: 3>
+
+ +
+
+TemporaryAction = <ActionType.TemporaryAction: 0>
+
+ +
+ +
+
+class AnalysisSkipReason[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+AlwaysSkipReason = <AnalysisSkipReason.AlwaysSkipReason: 1>
+
+ +
+
+ExceedFunctionAnalysisTimeSkipReason = <AnalysisSkipReason.ExceedFunctionAnalysisTimeSkipReason: 3>
+
+ +
+
+ExceedFunctionSizeSkipReason = <AnalysisSkipReason.ExceedFunctionSizeSkipReason: 2>
+
+ +
+
+ExceedFunctionUpdateCountSkipReason = <AnalysisSkipReason.ExceedFunctionUpdateCountSkipReason: 4>
+
+ +
+
+NewAutoFunctionAnalysisSuppressedReason = <AnalysisSkipReason.NewAutoFunctionAnalysisSuppressedReason: 5>
+
+ +
+
+NoSkipReason = <AnalysisSkipReason.NoSkipReason: 0>
+
+ +
+ +
+
+class AnalysisState[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+AnalyzeState = <AnalysisState.AnalyzeState: 2>
+
+ +
+
+DisassembleState = <AnalysisState.DisassembleState: 1>
+
+ +
+
+ExtendedAnalyzeState = <AnalysisState.ExtendedAnalyzeState: 3>
+
+ +
+
+IdleState = <AnalysisState.IdleState: 0>
+
+ +
+ +
+
+class BranchType[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+CallDestination = <BranchType.CallDestination: 3>
+
+ +
+
+FalseBranch = <BranchType.FalseBranch: 1>
+
+ +
+
+FunctionReturn = <BranchType.FunctionReturn: 4>
+
+ +
+
+IndirectBranch = <BranchType.IndirectBranch: 6>
+
+ +
+
+SystemCall = <BranchType.SystemCall: 5>
+
+ +
+
+TrueBranch = <BranchType.TrueBranch: 2>
+
+ +
+
+UnconditionalBranch = <BranchType.UnconditionalBranch: 0>
+
+ +
+
+UnresolvedBranch = <BranchType.UnresolvedBranch: 127>
+
+ +
+ +
+
+class CallingConventionName[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+CLRCallCallingConvention = <CallingConventionName.CLRCallCallingConvention: 6>
+
+ +
+
+CdeclCallingConvention = <CallingConventionName.CdeclCallingConvention: 1>
+
+ +
+
+EabiCallCallingConvention = <CallingConventionName.EabiCallCallingConvention: 7>
+
+ +
+
+FastcallCallingConvention = <CallingConventionName.FastcallCallingConvention: 5>
+
+ +
+
+NoCallingConvention = <CallingConventionName.NoCallingConvention: 0>
+
+ +
+
+PascalCallingConvention = <CallingConventionName.PascalCallingConvention: 2>
+
+ +
+
+STDCallCallingConvention = <CallingConventionName.STDCallCallingConvention: 4>
+
+ +
+
+ThisCallCallingConvention = <CallingConventionName.ThisCallCallingConvention: 3>
+
+ +
+
+VectorCallCallingConvention = <CallingConventionName.VectorCallCallingConvention: 8>
+
+ +
+ +
+
+class DisassemblyOption[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+ExpandLongOpcode = <DisassemblyOption.ExpandLongOpcode: 2>
+
+ +
+
+GroupLinearDisassemblyFunctions = <DisassemblyOption.GroupLinearDisassemblyFunctions: 64>
+
+ +
+
+ShowAddress = <DisassemblyOption.ShowAddress: 0>
+
+ +
+
+ShowCallParameterNames = <DisassemblyOption.ShowCallParameterNames: 6>
+
+ +
+
+ShowDefaultRegisterTypes = <DisassemblyOption.ShowDefaultRegisterTypes: 5>
+
+ +
+
+ShowFlagUsage = <DisassemblyOption.ShowFlagUsage: 128>
+
+ +
+
+ShowOpcode = <DisassemblyOption.ShowOpcode: 1>
+
+ +
+
+ShowRegisterHighlight = <DisassemblyOption.ShowRegisterHighlight: 7>
+
+ +
+
+ShowVariableTypesWhenAssigned = <DisassemblyOption.ShowVariableTypesWhenAssigned: 4>
+
+ +
+
+ShowVariablesAtTopOfGraph = <DisassemblyOption.ShowVariablesAtTopOfGraph: 3>
+
+ +
+ +
+
+class Endianness[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+BigEndian = <Endianness.BigEndian: 1>
+
+ +
+
+LittleEndian = <Endianness.LittleEndian: 0>
+
+ +
+ +
+
+class FindFlag[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+FindCaseInsensitive = <FindFlag.FindCaseInsensitive: 1>
+
+ +
+
+FindCaseSensitive = <FindFlag.FindCaseSensitive: 0>
+
+ +
+ +
+
+class FlagRole[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+CarryFlagRole = <FlagRole.CarryFlagRole: 4>
+
+ +
+
+EvenParityFlagRole = <FlagRole.EvenParityFlagRole: 7>
+
+ +
+
+HalfCarryFlagRole = <FlagRole.HalfCarryFlagRole: 6>
+
+ +
+
+NegativeSignFlagRole = <FlagRole.NegativeSignFlagRole: 3>
+
+ +
+
+OddParityFlagRole = <FlagRole.OddParityFlagRole: 8>
+
+ +
+
+OrderedFlagRole = <FlagRole.OrderedFlagRole: 9>
+
+ +
+
+OverflowFlagRole = <FlagRole.OverflowFlagRole: 5>
+
+ +
+
+PositiveSignFlagRole = <FlagRole.PositiveSignFlagRole: 2>
+
+ +
+
+SpecialFlagRole = <FlagRole.SpecialFlagRole: 0>
+
+ +
+
+UnorderedFlagRole = <FlagRole.UnorderedFlagRole: 10>
+
+ +
+
+ZeroFlagRole = <FlagRole.ZeroFlagRole: 1>
+
+ +
+ +
+
+class FormInputFieldType[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+AddressFormField = <FormInputFieldType.AddressFormField: 5>
+
+ +
+
+ChoiceFormField = <FormInputFieldType.ChoiceFormField: 6>
+
+ +
+
+DirectoryNameFormField = <FormInputFieldType.DirectoryNameFormField: 9>
+
+ +
+
+IntegerFormField = <FormInputFieldType.IntegerFormField: 4>
+
+ +
+
+LabelFormField = <FormInputFieldType.LabelFormField: 0>
+
+ +
+
+MultilineTextFormField = <FormInputFieldType.MultilineTextFormField: 3>
+
+ +
+
+OpenFileNameFormField = <FormInputFieldType.OpenFileNameFormField: 7>
+
+ +
+
+SaveFileNameFormField = <FormInputFieldType.SaveFileNameFormField: 8>
+
+ +
+
+SeparatorFormField = <FormInputFieldType.SeparatorFormField: 1>
+
+ +
+
+TextLineFormField = <FormInputFieldType.TextLineFormField: 2>
+
+ +
+ +
+
+class FunctionAnalysisSkipOverride[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+AlwaysSkipFunctionAnalysis = <FunctionAnalysisSkipOverride.AlwaysSkipFunctionAnalysis: 2>
+
+ +
+
+DefaultFunctionAnalysisSkip = <FunctionAnalysisSkipOverride.DefaultFunctionAnalysisSkip: 0>
+
+ +
+
+NeverSkipFunctionAnalysis = <FunctionAnalysisSkipOverride.NeverSkipFunctionAnalysis: 1>
+
+ +
+ +
+
+class FunctionGraphType[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+LiftedILFunctionGraph = <FunctionGraphType.LiftedILFunctionGraph: 2>
+
+ +
+
+LowLevelILFunctionGraph = <FunctionGraphType.LowLevelILFunctionGraph: 1>
+
+ +
+
+LowLevelILSSAFormFunctionGraph = <FunctionGraphType.LowLevelILSSAFormFunctionGraph: 3>
+
+ +
+
+MappedMediumLevelILFunctionGraph = <FunctionGraphType.MappedMediumLevelILFunctionGraph: 6>
+
+ +
+
+MappedMediumLevelILSSAFormFunctionGraph = <FunctionGraphType.MappedMediumLevelILSSAFormFunctionGraph: 7>
+
+ +
+
+MediumLevelILFunctionGraph = <FunctionGraphType.MediumLevelILFunctionGraph: 4>
+
+ +
+
+MediumLevelILSSAFormFunctionGraph = <FunctionGraphType.MediumLevelILSSAFormFunctionGraph: 5>
+
+ +
+
+NormalFunctionGraph = <FunctionGraphType.NormalFunctionGraph: 0>
+
+ +
+ +
+
+class HighlightColorStyle[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+CustomHighlightColor = <HighlightColorStyle.CustomHighlightColor: 2>
+
+ +
+
+MixedHighlightColor = <HighlightColorStyle.MixedHighlightColor: 1>
+
+ +
+
+StandardHighlightColor = <HighlightColorStyle.StandardHighlightColor: 0>
+
+ +
+ +
+
+class HighlightStandardColor[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+BlackHighlightColor = <HighlightStandardColor.BlackHighlightColor: 9>
+
+ +
+
+BlueHighlightColor = <HighlightStandardColor.BlueHighlightColor: 1>
+
+ +
+
+CyanHighlightColor = <HighlightStandardColor.CyanHighlightColor: 3>
+
+ +
+
+GreenHighlightColor = <HighlightStandardColor.GreenHighlightColor: 2>
+
+ +
+
+MagentaHighlightColor = <HighlightStandardColor.MagentaHighlightColor: 5>
+
+ +
+
+NoHighlightColor = <HighlightStandardColor.NoHighlightColor: 0>
+
+ +
+
+OrangeHighlightColor = <HighlightStandardColor.OrangeHighlightColor: 7>
+
+ +
+
+RedHighlightColor = <HighlightStandardColor.RedHighlightColor: 4>
+
+ +
+
+WhiteHighlightColor = <HighlightStandardColor.WhiteHighlightColor: 8>
+
+ +
+
+YellowHighlightColor = <HighlightStandardColor.YellowHighlightColor: 6>
+
+ +
+ +
+
+class ILBranchDependence[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+FalseBranchDependent = <ILBranchDependence.FalseBranchDependent: 2>
+
+ +
+
+NotBranchDependent = <ILBranchDependence.NotBranchDependent: 0>
+
+ +
+
+TrueBranchDependent = <ILBranchDependence.TrueBranchDependent: 1>
+
+ +
+ +
+
+class ImplicitRegisterExtend[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+NoExtend = <ImplicitRegisterExtend.NoExtend: 0>
+
+ +
+
+SignExtendToFullWidth = <ImplicitRegisterExtend.SignExtendToFullWidth: 2>
+
+ +
+
+ZeroExtendToFullWidth = <ImplicitRegisterExtend.ZeroExtendToFullWidth: 1>
+
+ +
+ +
+
+class InstructionTextTokenContext[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+DataVariableTokenContext = <InstructionTextTokenContext.DataVariableTokenContext: 2>
+
+ +
+
+FunctionReturnTokenContext = <InstructionTextTokenContext.FunctionReturnTokenContext: 3>
+
+ +
+
+LocalVariableTokenContext = <InstructionTextTokenContext.LocalVariableTokenContext: 1>
+
+ +
+
+NoTokenContext = <InstructionTextTokenContext.NoTokenContext: 0>
+
+ +
+ +
+
+class InstructionTextTokenType[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+AddressDisplayToken = <InstructionTextTokenType.AddressDisplayToken: 68>
+
+ +
+
+AnnotationToken = <InstructionTextTokenType.AnnotationToken: 9>
+
+ +
+
+ArgumentNameToken = <InstructionTextTokenType.ArgumentNameToken: 11>
+
+ +
+
+BeginMemoryOperandToken = <InstructionTextTokenType.BeginMemoryOperandToken: 6>
+
+ +
+
+CharacterConstantToken = <InstructionTextTokenType.CharacterConstantToken: 18>
+
+ +
+
+CodeRelativeAddressToken = <InstructionTextTokenType.CodeRelativeAddressToken: 10>
+
+ +
+
+CodeSymbolToken = <InstructionTextTokenType.CodeSymbolToken: 64>
+
+ +
+
+DataSymbolToken = <InstructionTextTokenType.DataSymbolToken: 65>
+
+ +
+
+EndMemoryOperandToken = <InstructionTextTokenType.EndMemoryOperandToken: 7>
+
+ +
+
+ExternalSymbolToken = <InstructionTextTokenType.ExternalSymbolToken: 70>
+
+ +
+
+FieldNameToken = <InstructionTextTokenType.FieldNameToken: 21>
+
+ +
+
+FloatingPointToken = <InstructionTextTokenType.FloatingPointToken: 8>
+
+ +
+
+HexDumpByteValueToken = <InstructionTextTokenType.HexDumpByteValueToken: 12>
+
+ +
+
+HexDumpInvalidByteToken = <InstructionTextTokenType.HexDumpInvalidByteToken: 14>
+
+ +
+
+HexDumpSkippedByteToken = <InstructionTextTokenType.HexDumpSkippedByteToken: 13>
+
+ +
+
+HexDumpTextToken = <InstructionTextTokenType.HexDumpTextToken: 15>
+
+ +
+
+ImportToken = <InstructionTextTokenType.ImportToken: 67>
+
+ +
+
+IndirectImportToken = <InstructionTextTokenType.IndirectImportToken: 69>
+
+ +
+
+InstructionToken = <InstructionTextTokenType.InstructionToken: 1>
+
+ +
+
+IntegerToken = <InstructionTextTokenType.IntegerToken: 4>
+
+ +
+
+KeywordToken = <InstructionTextTokenType.KeywordToken: 19>
+
+ +
+
+LocalVariableToken = <InstructionTextTokenType.LocalVariableToken: 66>
+
+ +
+
+NameSpaceSeparatorToken = <InstructionTextTokenType.NameSpaceSeparatorToken: 23>
+
+ +
+
+NameSpaceToken = <InstructionTextTokenType.NameSpaceToken: 22>
+
+ +
+
+OpcodeToken = <InstructionTextTokenType.OpcodeToken: 16>
+
+ +
+
+OperandSeparatorToken = <InstructionTextTokenType.OperandSeparatorToken: 2>
+
+ +
+
+PossibleAddressToken = <InstructionTextTokenType.PossibleAddressToken: 5>
+
+ +
+
+RegisterToken = <InstructionTextTokenType.RegisterToken: 3>
+
+ +
+
+StringToken = <InstructionTextTokenType.StringToken: 17>
+
+ +
+
+TextToken = <InstructionTextTokenType.TextToken: 0>
+
+ +
+
+TypeNameToken = <InstructionTextTokenType.TypeNameToken: 20>
+
+ +
+ +
+
+class IntegerDisplayType[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+BinaryDisplayType = <IntegerDisplayType.BinaryDisplayType: 1>
+
+ +
+
+CharacterConstantDisplayType = <IntegerDisplayType.CharacterConstantDisplayType: 8>
+
+ +
+
+DefaultIntegerDisplayType = <IntegerDisplayType.DefaultIntegerDisplayType: 0>
+
+ +
+
+PointerDisplayType = <IntegerDisplayType.PointerDisplayType: 9>
+
+ +
+
+SignedDecimalDisplayType = <IntegerDisplayType.SignedDecimalDisplayType: 4>
+
+ +
+
+SignedHexadecimalDisplayType = <IntegerDisplayType.SignedHexadecimalDisplayType: 6>
+
+ +
+
+SignedOctalDisplayType = <IntegerDisplayType.SignedOctalDisplayType: 2>
+
+ +
+
+UnsignedDecimalDisplayType = <IntegerDisplayType.UnsignedDecimalDisplayType: 5>
+
+ +
+
+UnsignedHexadecimalDisplayType = <IntegerDisplayType.UnsignedHexadecimalDisplayType: 7>
+
+ +
+
+UnsignedOctalDisplayType = <IntegerDisplayType.UnsignedOctalDisplayType: 3>
+
+ +
+ +
+
+class LinearDisassemblyLineType[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+BlankLineType = <LinearDisassemblyLineType.BlankLineType: 0>
+
+ +
+
+CodeDisassemblyLineType = <LinearDisassemblyLineType.CodeDisassemblyLineType: 1>
+
+ +
+
+DataVariableLineType = <LinearDisassemblyLineType.DataVariableLineType: 2>
+
+ +
+
+FunctionContinuationLineType = <LinearDisassemblyLineType.FunctionContinuationLineType: 7>
+
+ +
+
+FunctionEndLineType = <LinearDisassemblyLineType.FunctionEndLineType: 10>
+
+ +
+
+FunctionHeaderEndLineType = <LinearDisassemblyLineType.FunctionHeaderEndLineType: 6>
+
+ +
+
+FunctionHeaderLineType = <LinearDisassemblyLineType.FunctionHeaderLineType: 4>
+
+ +
+
+FunctionHeaderStartLineType = <LinearDisassemblyLineType.FunctionHeaderStartLineType: 5>
+
+ +
+
+HexDumpLineType = <LinearDisassemblyLineType.HexDumpLineType: 3>
+
+ +
+
+LocalVariableLineType = <LinearDisassemblyLineType.LocalVariableLineType: 8>
+
+ +
+
+LocalVariableListEndLineType = <LinearDisassemblyLineType.LocalVariableListEndLineType: 9>
+
+ +
+
+NonContiguousSeparatorLineType = <LinearDisassemblyLineType.NonContiguousSeparatorLineType: 17>
+
+ +
+
+NoteEndLineType = <LinearDisassemblyLineType.NoteEndLineType: 13>
+
+ +
+
+NoteLineType = <LinearDisassemblyLineType.NoteLineType: 12>
+
+ +
+
+NoteStartLineType = <LinearDisassemblyLineType.NoteStartLineType: 11>
+
+ +
+
+SectionEndLineType = <LinearDisassemblyLineType.SectionEndLineType: 15>
+
+ +
+
+SectionSeparatorLineType = <LinearDisassemblyLineType.SectionSeparatorLineType: 16>
+
+ +
+
+SectionStartLineType = <LinearDisassemblyLineType.SectionStartLineType: 14>
+
+ +
+ +
+
+class LogLevel[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+AlertLog = <LogLevel.AlertLog: 4>
+
+ +
+
+DebugLog = <LogLevel.DebugLog: 0>
+
+ +
+
+ErrorLog = <LogLevel.ErrorLog: 3>
+
+ +
+
+InfoLog = <LogLevel.InfoLog: 1>
+
+ +
+
+WarningLog = <LogLevel.WarningLog: 2>
+
+ +
+ +
+
+class LowLevelILFlagCondition[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+LLFC_E = <LowLevelILFlagCondition.LLFC_E: 0>
+
+ +
+
+LLFC_FE = <LowLevelILFlagCondition.LLFC_FE: 14>
+
+ +
+
+LLFC_FGE = <LowLevelILFlagCondition.LLFC_FGE: 18>
+
+ +
+
+LLFC_FGT = <LowLevelILFlagCondition.LLFC_FGT: 19>
+
+ +
+
+LLFC_FLE = <LowLevelILFlagCondition.LLFC_FLE: 17>
+
+ +
+
+LLFC_FLT = <LowLevelILFlagCondition.LLFC_FLT: 16>
+
+ +
+
+LLFC_FNE = <LowLevelILFlagCondition.LLFC_FNE: 15>
+
+ +
+
+LLFC_FO = <LowLevelILFlagCondition.LLFC_FO: 20>
+
+ +
+
+LLFC_FUO = <LowLevelILFlagCondition.LLFC_FUO: 21>
+
+ +
+
+LLFC_NE = <LowLevelILFlagCondition.LLFC_NE: 1>
+
+ +
+
+LLFC_NEG = <LowLevelILFlagCondition.LLFC_NEG: 10>
+
+ +
+
+LLFC_NO = <LowLevelILFlagCondition.LLFC_NO: 13>
+
+ +
+
+LLFC_O = <LowLevelILFlagCondition.LLFC_O: 12>
+
+ +
+
+LLFC_POS = <LowLevelILFlagCondition.LLFC_POS: 11>
+
+ +
+
+LLFC_SGE = <LowLevelILFlagCondition.LLFC_SGE: 6>
+
+ +
+
+LLFC_SGT = <LowLevelILFlagCondition.LLFC_SGT: 8>
+
+ +
+
+LLFC_SLE = <LowLevelILFlagCondition.LLFC_SLE: 4>
+
+ +
+
+LLFC_SLT = <LowLevelILFlagCondition.LLFC_SLT: 2>
+
+ +
+
+LLFC_UGE = <LowLevelILFlagCondition.LLFC_UGE: 7>
+
+ +
+
+LLFC_UGT = <LowLevelILFlagCondition.LLFC_UGT: 9>
+
+ +
+
+LLFC_ULE = <LowLevelILFlagCondition.LLFC_ULE: 5>
+
+ +
+
+LLFC_ULT = <LowLevelILFlagCondition.LLFC_ULT: 3>
+
+ +
+ +
+
+class LowLevelILOperation[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+LLIL_ADC = <LowLevelILOperation.LLIL_ADC: 23>
+
+ +
+
+LLIL_ADD = <LowLevelILOperation.LLIL_ADD: 22>
+
+ +
+
+LLIL_ADD_OVERFLOW = <LowLevelILOperation.LLIL_ADD_OVERFLOW: 75>
+
+ +
+
+LLIL_AND = <LowLevelILOperation.LLIL_AND: 26>
+
+ +
+
+LLIL_ASR = <LowLevelILOperation.LLIL_ASR: 31>
+
+ +
+
+LLIL_BOOL_TO_INT = <LowLevelILOperation.LLIL_BOOL_TO_INT: 74>
+
+ +
+
+LLIL_BP = <LowLevelILOperation.LLIL_BP: 77>
+
+ +
+
+LLIL_CALL = <LowLevelILOperation.LLIL_CALL: 54>
+
+ +
+
+LLIL_CALL_OUTPUT_SSA = <LowLevelILOperation.LLIL_CALL_OUTPUT_SSA: 127>
+
+ +
+
+LLIL_CALL_PARAM = <LowLevelILOperation.LLIL_CALL_PARAM: 125>
+
+ +
+
+LLIL_CALL_SSA = <LowLevelILOperation.LLIL_CALL_SSA: 122>
+
+ +
+
+LLIL_CALL_STACK_ADJUST = <LowLevelILOperation.LLIL_CALL_STACK_ADJUST: 55>
+
+ +
+
+LLIL_CALL_STACK_SSA = <LowLevelILOperation.LLIL_CALL_STACK_SSA: 126>
+
+ +
+
+LLIL_CEIL = <LowLevelILOperation.LLIL_CEIL: 95>
+
+ +
+
+LLIL_CMP_E = <LowLevelILOperation.LLIL_CMP_E: 63>
+
+ +
+
+LLIL_CMP_NE = <LowLevelILOperation.LLIL_CMP_NE: 64>
+
+ +
+
+LLIL_CMP_SGE = <LowLevelILOperation.LLIL_CMP_SGE: 69>
+
+ +
+
+LLIL_CMP_SGT = <LowLevelILOperation.LLIL_CMP_SGT: 71>
+
+ +
+
+LLIL_CMP_SLE = <LowLevelILOperation.LLIL_CMP_SLE: 67>
+
+ +
+
+LLIL_CMP_SLT = <LowLevelILOperation.LLIL_CMP_SLT: 65>
+
+ +
+
+LLIL_CMP_UGE = <LowLevelILOperation.LLIL_CMP_UGE: 70>
+
+ +
+
+LLIL_CMP_UGT = <LowLevelILOperation.LLIL_CMP_UGT: 72>
+
+ +
+
+LLIL_CMP_ULE = <LowLevelILOperation.LLIL_CMP_ULE: 68>
+
+ +
+
+LLIL_CMP_ULT = <LowLevelILOperation.LLIL_CMP_ULT: 66>
+
+ +
+
+LLIL_CONST = <LowLevelILOperation.LLIL_CONST: 16>
+
+ +
+
+LLIL_CONST_PTR = <LowLevelILOperation.LLIL_CONST_PTR: 17>
+
+ +
+
+LLIL_DIVS = <LowLevelILOperation.LLIL_DIVS: 41>
+
+ +
+
+LLIL_DIVS_DP = <LowLevelILOperation.LLIL_DIVS_DP: 42>
+
+ +
+
+LLIL_DIVU = <LowLevelILOperation.LLIL_DIVU: 39>
+
+ +
+
+LLIL_DIVU_DP = <LowLevelILOperation.LLIL_DIVU_DP: 40>
+
+ +
+
+LLIL_EXTERN_PTR = <LowLevelILOperation.LLIL_EXTERN_PTR: 18>
+
+ +
+
+LLIL_FABS = <LowLevelILOperation.LLIL_FABS: 89>
+
+ +
+
+LLIL_FADD = <LowLevelILOperation.LLIL_FADD: 83>
+
+ +
+
+LLIL_FCMP_E = <LowLevelILOperation.LLIL_FCMP_E: 97>
+
+ +
+
+LLIL_FCMP_GE = <LowLevelILOperation.LLIL_FCMP_GE: 101>
+
+ +
+
+LLIL_FCMP_GT = <LowLevelILOperation.LLIL_FCMP_GT: 102>
+
+ +
+
+LLIL_FCMP_LE = <LowLevelILOperation.LLIL_FCMP_LE: 100>
+
+ +
+
+LLIL_FCMP_LT = <LowLevelILOperation.LLIL_FCMP_LT: 99>
+
+ +
+
+LLIL_FCMP_NE = <LowLevelILOperation.LLIL_FCMP_NE: 98>
+
+ +
+
+LLIL_FCMP_O = <LowLevelILOperation.LLIL_FCMP_O: 103>
+
+ +
+
+LLIL_FCMP_UO = <LowLevelILOperation.LLIL_FCMP_UO: 104>
+
+ +
+
+LLIL_FDIV = <LowLevelILOperation.LLIL_FDIV: 86>
+
+ +
+
+LLIL_FLAG = <LowLevelILOperation.LLIL_FLAG: 20>
+
+ +
+
+LLIL_FLAG_BIT = <LowLevelILOperation.LLIL_FLAG_BIT: 21>
+
+ +
+
+LLIL_FLAG_BIT_SSA = <LowLevelILOperation.LLIL_FLAG_BIT_SSA: 121>
+
+ +
+
+LLIL_FLAG_COND = <LowLevelILOperation.LLIL_FLAG_COND: 61>
+
+ +
+
+LLIL_FLAG_GROUP = <LowLevelILOperation.LLIL_FLAG_GROUP: 62>
+
+ +
+
+LLIL_FLAG_PHI = <LowLevelILOperation.LLIL_FLAG_PHI: 133>
+
+ +
+
+LLIL_FLAG_SSA = <LowLevelILOperation.LLIL_FLAG_SSA: 120>
+
+ +
+
+LLIL_FLOAT_CONST = <LowLevelILOperation.LLIL_FLOAT_CONST: 19>
+
+ +
+
+LLIL_FLOAT_CONV = <LowLevelILOperation.LLIL_FLOAT_CONV: 92>
+
+ +
+
+LLIL_FLOAT_TO_INT = <LowLevelILOperation.LLIL_FLOAT_TO_INT: 90>
+
+ +
+
+LLIL_FLOOR = <LowLevelILOperation.LLIL_FLOOR: 94>
+
+ +
+
+LLIL_FMUL = <LowLevelILOperation.LLIL_FMUL: 85>
+
+ +
+
+LLIL_FNEG = <LowLevelILOperation.LLIL_FNEG: 88>
+
+ +
+
+LLIL_FSQRT = <LowLevelILOperation.LLIL_FSQRT: 87>
+
+ +
+
+LLIL_FSUB = <LowLevelILOperation.LLIL_FSUB: 84>
+
+ +
+
+LLIL_FTRUNC = <LowLevelILOperation.LLIL_FTRUNC: 96>
+
+ +
+
+LLIL_GOTO = <LowLevelILOperation.LLIL_GOTO: 60>
+
+ +
+
+LLIL_IF = <LowLevelILOperation.LLIL_IF: 59>
+
+ +
+
+LLIL_INTRINSIC = <LowLevelILOperation.LLIL_INTRINSIC: 79>
+
+ +
+
+LLIL_INTRINSIC_SSA = <LowLevelILOperation.LLIL_INTRINSIC_SSA: 130>
+
+ +
+
+LLIL_INT_TO_FLOAT = <LowLevelILOperation.LLIL_INT_TO_FLOAT: 91>
+
+ +
+
+LLIL_JUMP = <LowLevelILOperation.LLIL_JUMP: 52>
+
+ +
+
+LLIL_JUMP_TO = <LowLevelILOperation.LLIL_JUMP_TO: 53>
+
+ +
+
+LLIL_LOAD = <LowLevelILOperation.LLIL_LOAD: 6>
+
+ +
+
+LLIL_LOAD_SSA = <LowLevelILOperation.LLIL_LOAD_SSA: 128>
+
+ +
+
+LLIL_LOW_PART = <LowLevelILOperation.LLIL_LOW_PART: 51>
+
+ +
+
+LLIL_LSL = <LowLevelILOperation.LLIL_LSL: 29>
+
+ +
+
+LLIL_LSR = <LowLevelILOperation.LLIL_LSR: 30>
+
+ +
+
+LLIL_MEM_PHI = <LowLevelILOperation.LLIL_MEM_PHI: 134>
+
+ +
+
+LLIL_MODS = <LowLevelILOperation.LLIL_MODS: 45>
+
+ +
+
+LLIL_MODS_DP = <LowLevelILOperation.LLIL_MODS_DP: 46>
+
+ +
+
+LLIL_MODU = <LowLevelILOperation.LLIL_MODU: 43>
+
+ +
+
+LLIL_MODU_DP = <LowLevelILOperation.LLIL_MODU_DP: 44>
+
+ +
+
+LLIL_MUL = <LowLevelILOperation.LLIL_MUL: 36>
+
+ +
+
+LLIL_MULS_DP = <LowLevelILOperation.LLIL_MULS_DP: 38>
+
+ +
+
+LLIL_MULU_DP = <LowLevelILOperation.LLIL_MULU_DP: 37>
+
+ +
+
+LLIL_NEG = <LowLevelILOperation.LLIL_NEG: 47>
+
+ +
+
+LLIL_NOP = <LowLevelILOperation.LLIL_NOP: 0>
+
+ +
+
+LLIL_NORET = <LowLevelILOperation.LLIL_NORET: 58>
+
+ +
+
+LLIL_NOT = <LowLevelILOperation.LLIL_NOT: 48>
+
+ +
+
+LLIL_OR = <LowLevelILOperation.LLIL_OR: 27>
+
+ +
+
+LLIL_POP = <LowLevelILOperation.LLIL_POP: 9>
+
+ +
+
+LLIL_PUSH = <LowLevelILOperation.LLIL_PUSH: 8>
+
+ +
+
+LLIL_REG = <LowLevelILOperation.LLIL_REG: 10>
+
+ +
+
+LLIL_REG_PHI = <LowLevelILOperation.LLIL_REG_PHI: 131>
+
+ +
+
+LLIL_REG_SPLIT = <LowLevelILOperation.LLIL_REG_SPLIT: 11>
+
+ +
+
+LLIL_REG_SPLIT_DEST_SSA = <LowLevelILOperation.LLIL_REG_SPLIT_DEST_SSA: 110>
+
+ +
+
+LLIL_REG_SPLIT_SSA = <LowLevelILOperation.LLIL_REG_SPLIT_SSA: 114>
+
+ +
+
+LLIL_REG_SSA = <LowLevelILOperation.LLIL_REG_SSA: 112>
+
+ +
+
+LLIL_REG_SSA_PARTIAL = <LowLevelILOperation.LLIL_REG_SSA_PARTIAL: 113>
+
+ +
+
+LLIL_REG_STACK_ABS_SSA = <LowLevelILOperation.LLIL_REG_STACK_ABS_SSA: 116>
+
+ +
+
+LLIL_REG_STACK_DEST_SSA = <LowLevelILOperation.LLIL_REG_STACK_DEST_SSA: 111>
+
+ +
+
+LLIL_REG_STACK_FREE_ABS_SSA = <LowLevelILOperation.LLIL_REG_STACK_FREE_ABS_SSA: 118>
+
+ +
+
+LLIL_REG_STACK_FREE_REG = <LowLevelILOperation.LLIL_REG_STACK_FREE_REG: 14>
+
+ +
+
+LLIL_REG_STACK_FREE_REL = <LowLevelILOperation.LLIL_REG_STACK_FREE_REL: 15>
+
+ +
+
+LLIL_REG_STACK_FREE_REL_SSA = <LowLevelILOperation.LLIL_REG_STACK_FREE_REL_SSA: 117>
+
+ +
+
+LLIL_REG_STACK_PHI = <LowLevelILOperation.LLIL_REG_STACK_PHI: 132>
+
+ +
+
+LLIL_REG_STACK_POP = <LowLevelILOperation.LLIL_REG_STACK_POP: 13>
+
+ +
+
+LLIL_REG_STACK_PUSH = <LowLevelILOperation.LLIL_REG_STACK_PUSH: 5>
+
+ +
+
+LLIL_REG_STACK_REL = <LowLevelILOperation.LLIL_REG_STACK_REL: 12>
+
+ +
+
+LLIL_REG_STACK_REL_SSA = <LowLevelILOperation.LLIL_REG_STACK_REL_SSA: 115>
+
+ +
+
+LLIL_RET = <LowLevelILOperation.LLIL_RET: 57>
+
+ +
+
+LLIL_RLC = <LowLevelILOperation.LLIL_RLC: 33>
+
+ +
+
+LLIL_ROL = <LowLevelILOperation.LLIL_ROL: 32>
+
+ +
+
+LLIL_ROR = <LowLevelILOperation.LLIL_ROR: 34>
+
+ +
+
+LLIL_ROUND_TO_INT = <LowLevelILOperation.LLIL_ROUND_TO_INT: 93>
+
+ +
+
+LLIL_RRC = <LowLevelILOperation.LLIL_RRC: 35>
+
+ +
+
+LLIL_SBB = <LowLevelILOperation.LLIL_SBB: 25>
+
+ +
+
+LLIL_SET_FLAG = <LowLevelILOperation.LLIL_SET_FLAG: 3>
+
+ +
+
+LLIL_SET_FLAG_SSA = <LowLevelILOperation.LLIL_SET_FLAG_SSA: 119>
+
+ +
+
+LLIL_SET_REG = <LowLevelILOperation.LLIL_SET_REG: 1>
+
+ +
+
+LLIL_SET_REG_SPLIT = <LowLevelILOperation.LLIL_SET_REG_SPLIT: 2>
+
+ +
+
+LLIL_SET_REG_SPLIT_SSA = <LowLevelILOperation.LLIL_SET_REG_SPLIT_SSA: 107>
+
+ +
+
+LLIL_SET_REG_SSA = <LowLevelILOperation.LLIL_SET_REG_SSA: 105>
+
+ +
+
+LLIL_SET_REG_SSA_PARTIAL = <LowLevelILOperation.LLIL_SET_REG_SSA_PARTIAL: 106>
+
+ +
+
+LLIL_SET_REG_STACK_ABS_SSA = <LowLevelILOperation.LLIL_SET_REG_STACK_ABS_SSA: 109>
+
+ +
+
+LLIL_SET_REG_STACK_REL = <LowLevelILOperation.LLIL_SET_REG_STACK_REL: 4>
+
+ +
+
+LLIL_SET_REG_STACK_REL_SSA = <LowLevelILOperation.LLIL_SET_REG_STACK_REL_SSA: 108>
+
+ +
+
+LLIL_STORE = <LowLevelILOperation.LLIL_STORE: 7>
+
+ +
+
+LLIL_STORE_SSA = <LowLevelILOperation.LLIL_STORE_SSA: 129>
+
+ +
+
+LLIL_SUB = <LowLevelILOperation.LLIL_SUB: 24>
+
+ +
+
+LLIL_SX = <LowLevelILOperation.LLIL_SX: 49>
+
+ +
+
+LLIL_SYSCALL = <LowLevelILOperation.LLIL_SYSCALL: 76>
+
+ +
+
+LLIL_SYSCALL_SSA = <LowLevelILOperation.LLIL_SYSCALL_SSA: 123>
+
+ +
+
+LLIL_TAILCALL = <LowLevelILOperation.LLIL_TAILCALL: 56>
+
+ +
+
+LLIL_TAILCALL_SSA = <LowLevelILOperation.LLIL_TAILCALL_SSA: 124>
+
+ +
+
+LLIL_TEST_BIT = <LowLevelILOperation.LLIL_TEST_BIT: 73>
+
+ +
+
+LLIL_TRAP = <LowLevelILOperation.LLIL_TRAP: 78>
+
+ +
+
+LLIL_UNDEF = <LowLevelILOperation.LLIL_UNDEF: 80>
+
+ +
+
+LLIL_UNIMPL = <LowLevelILOperation.LLIL_UNIMPL: 81>
+
+ +
+
+LLIL_UNIMPL_MEM = <LowLevelILOperation.LLIL_UNIMPL_MEM: 82>
+
+ +
+
+LLIL_XOR = <LowLevelILOperation.LLIL_XOR: 28>
+
+ +
+
+LLIL_ZX = <LowLevelILOperation.LLIL_ZX: 50>
+
+ +
+ +
+
+class MediumLevelILOperation[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+MLIL_ADC = <MediumLevelILOperation.MLIL_ADC: 19>
+
+ +
+
+MLIL_ADD = <MediumLevelILOperation.MLIL_ADD: 18>
+
+ +
+
+MLIL_ADDRESS_OF = <MediumLevelILOperation.MLIL_ADDRESS_OF: 11>
+
+ +
+
+MLIL_ADDRESS_OF_FIELD = <MediumLevelILOperation.MLIL_ADDRESS_OF_FIELD: 12>
+
+ +
+
+MLIL_ADD_OVERFLOW = <MediumLevelILOperation.MLIL_ADD_OVERFLOW: 71>
+
+ +
+
+MLIL_AND = <MediumLevelILOperation.MLIL_AND: 22>
+
+ +
+
+MLIL_ASR = <MediumLevelILOperation.MLIL_ASR: 27>
+
+ +
+
+MLIL_BOOL_TO_INT = <MediumLevelILOperation.MLIL_BOOL_TO_INT: 70>
+
+ +
+
+MLIL_BP = <MediumLevelILOperation.MLIL_BP: 78>
+
+ +
+
+MLIL_CALL = <MediumLevelILOperation.MLIL_CALL: 51>
+
+ +
+
+MLIL_CALL_OUTPUT = <MediumLevelILOperation.MLIL_CALL_OUTPUT: 53>
+
+ +
+
+MLIL_CALL_OUTPUT_SSA = <MediumLevelILOperation.MLIL_CALL_OUTPUT_SSA: 122>
+
+ +
+
+MLIL_CALL_PARAM = <MediumLevelILOperation.MLIL_CALL_PARAM: 54>
+
+ +
+
+MLIL_CALL_PARAM_SSA = <MediumLevelILOperation.MLIL_CALL_PARAM_SSA: 121>
+
+ +
+
+MLIL_CALL_SSA = <MediumLevelILOperation.MLIL_CALL_SSA: 115>
+
+ +
+
+MLIL_CALL_UNTYPED = <MediumLevelILOperation.MLIL_CALL_UNTYPED: 52>
+
+ +
+
+MLIL_CALL_UNTYPED_SSA = <MediumLevelILOperation.MLIL_CALL_UNTYPED_SSA: 116>
+
+ +
+
+MLIL_CEIL = <MediumLevelILOperation.MLIL_CEIL: 95>
+
+ +
+
+MLIL_CMP_E = <MediumLevelILOperation.MLIL_CMP_E: 59>
+
+ +
+
+MLIL_CMP_NE = <MediumLevelILOperation.MLIL_CMP_NE: 60>
+
+ +
+
+MLIL_CMP_SGE = <MediumLevelILOperation.MLIL_CMP_SGE: 65>
+
+ +
+
+MLIL_CMP_SGT = <MediumLevelILOperation.MLIL_CMP_SGT: 67>
+
+ +
+
+MLIL_CMP_SLE = <MediumLevelILOperation.MLIL_CMP_SLE: 63>
+
+ +
+
+MLIL_CMP_SLT = <MediumLevelILOperation.MLIL_CMP_SLT: 61>
+
+ +
+
+MLIL_CMP_UGE = <MediumLevelILOperation.MLIL_CMP_UGE: 66>
+
+ +
+
+MLIL_CMP_UGT = <MediumLevelILOperation.MLIL_CMP_UGT: 68>
+
+ +
+
+MLIL_CMP_ULE = <MediumLevelILOperation.MLIL_CMP_ULE: 64>
+
+ +
+
+MLIL_CMP_ULT = <MediumLevelILOperation.MLIL_CMP_ULT: 62>
+
+ +
+
+MLIL_CONST = <MediumLevelILOperation.MLIL_CONST: 13>
+
+ +
+
+MLIL_CONST_PTR = <MediumLevelILOperation.MLIL_CONST_PTR: 14>
+
+ +
+
+MLIL_DIVS = <MediumLevelILOperation.MLIL_DIVS: 37>
+
+ +
+
+MLIL_DIVS_DP = <MediumLevelILOperation.MLIL_DIVS_DP: 38>
+
+ +
+
+MLIL_DIVU = <MediumLevelILOperation.MLIL_DIVU: 35>
+
+ +
+
+MLIL_DIVU_DP = <MediumLevelILOperation.MLIL_DIVU_DP: 36>
+
+ +
+
+MLIL_EXTERN_PTR = <MediumLevelILOperation.MLIL_EXTERN_PTR: 15>
+
+ +
+
+MLIL_FABS = <MediumLevelILOperation.MLIL_FABS: 89>
+
+ +
+
+MLIL_FADD = <MediumLevelILOperation.MLIL_FADD: 83>
+
+ +
+
+MLIL_FCMP_E = <MediumLevelILOperation.MLIL_FCMP_E: 97>
+
+ +
+
+MLIL_FCMP_GE = <MediumLevelILOperation.MLIL_FCMP_GE: 101>
+
+ +
+
+MLIL_FCMP_GT = <MediumLevelILOperation.MLIL_FCMP_GT: 102>
+
+ +
+
+MLIL_FCMP_LE = <MediumLevelILOperation.MLIL_FCMP_LE: 100>
+
+ +
+
+MLIL_FCMP_LT = <MediumLevelILOperation.MLIL_FCMP_LT: 99>
+
+ +
+
+MLIL_FCMP_NE = <MediumLevelILOperation.MLIL_FCMP_NE: 98>
+
+ +
+
+MLIL_FCMP_O = <MediumLevelILOperation.MLIL_FCMP_O: 103>
+
+ +
+
+MLIL_FCMP_UO = <MediumLevelILOperation.MLIL_FCMP_UO: 104>
+
+ +
+
+MLIL_FDIV = <MediumLevelILOperation.MLIL_FDIV: 86>
+
+ +
+
+MLIL_FLOAT_CONST = <MediumLevelILOperation.MLIL_FLOAT_CONST: 16>
+
+ +
+
+MLIL_FLOAT_CONV = <MediumLevelILOperation.MLIL_FLOAT_CONV: 92>
+
+ +
+
+MLIL_FLOAT_TO_INT = <MediumLevelILOperation.MLIL_FLOAT_TO_INT: 90>
+
+ +
+
+MLIL_FLOOR = <MediumLevelILOperation.MLIL_FLOOR: 94>
+
+ +
+
+MLIL_FMUL = <MediumLevelILOperation.MLIL_FMUL: 85>
+
+ +
+
+MLIL_FNEG = <MediumLevelILOperation.MLIL_FNEG: 88>
+
+ +
+
+MLIL_FREE_VAR_SLOT = <MediumLevelILOperation.MLIL_FREE_VAR_SLOT: 77>
+
+ +
+
+MLIL_FREE_VAR_SLOT_SSA = <MediumLevelILOperation.MLIL_FREE_VAR_SLOT_SSA: 128>
+
+ +
+
+MLIL_FSQRT = <MediumLevelILOperation.MLIL_FSQRT: 87>
+
+ +
+
+MLIL_FSUB = <MediumLevelILOperation.MLIL_FSUB: 84>
+
+ +
+
+MLIL_FTRUNC = <MediumLevelILOperation.MLIL_FTRUNC: 96>
+
+ +
+
+MLIL_GOTO = <MediumLevelILOperation.MLIL_GOTO: 58>
+
+ +
+
+MLIL_IF = <MediumLevelILOperation.MLIL_IF: 57>
+
+ +
+
+MLIL_IMPORT = <MediumLevelILOperation.MLIL_IMPORT: 17>
+
+ +
+
+MLIL_INTRINSIC = <MediumLevelILOperation.MLIL_INTRINSIC: 76>
+
+ +
+
+MLIL_INTRINSIC_SSA = <MediumLevelILOperation.MLIL_INTRINSIC_SSA: 127>
+
+ +
+
+MLIL_INT_TO_FLOAT = <MediumLevelILOperation.MLIL_INT_TO_FLOAT: 91>
+
+ +
+
+MLIL_JUMP = <MediumLevelILOperation.MLIL_JUMP: 48>
+
+ +
+
+MLIL_JUMP_TO = <MediumLevelILOperation.MLIL_JUMP_TO: 49>
+
+ +
+
+MLIL_LOAD = <MediumLevelILOperation.MLIL_LOAD: 4>
+
+ +
+
+MLIL_LOAD_SSA = <MediumLevelILOperation.MLIL_LOAD_SSA: 123>
+
+ +
+
+MLIL_LOAD_STRUCT = <MediumLevelILOperation.MLIL_LOAD_STRUCT: 5>
+
+ +
+
+MLIL_LOAD_STRUCT_SSA = <MediumLevelILOperation.MLIL_LOAD_STRUCT_SSA: 124>
+
+ +
+
+MLIL_LOW_PART = <MediumLevelILOperation.MLIL_LOW_PART: 47>
+
+ +
+
+MLIL_LSL = <MediumLevelILOperation.MLIL_LSL: 25>
+
+ +
+
+MLIL_LSR = <MediumLevelILOperation.MLIL_LSR: 26>
+
+ +
+
+MLIL_MEM_PHI = <MediumLevelILOperation.MLIL_MEM_PHI: 130>
+
+ +
+
+MLIL_MODS = <MediumLevelILOperation.MLIL_MODS: 41>
+
+ +
+
+MLIL_MODS_DP = <MediumLevelILOperation.MLIL_MODS_DP: 42>
+
+ +
+
+MLIL_MODU = <MediumLevelILOperation.MLIL_MODU: 39>
+
+ +
+
+MLIL_MODU_DP = <MediumLevelILOperation.MLIL_MODU_DP: 40>
+
+ +
+
+MLIL_MUL = <MediumLevelILOperation.MLIL_MUL: 32>
+
+ +
+
+MLIL_MULS_DP = <MediumLevelILOperation.MLIL_MULS_DP: 34>
+
+ +
+
+MLIL_MULU_DP = <MediumLevelILOperation.MLIL_MULU_DP: 33>
+
+ +
+
+MLIL_NEG = <MediumLevelILOperation.MLIL_NEG: 43>
+
+ +
+
+MLIL_NOP = <MediumLevelILOperation.MLIL_NOP: 0>
+
+ +
+
+MLIL_NORET = <MediumLevelILOperation.MLIL_NORET: 56>
+
+ +
+
+MLIL_NOT = <MediumLevelILOperation.MLIL_NOT: 44>
+
+ +
+
+MLIL_OR = <MediumLevelILOperation.MLIL_OR: 23>
+
+ +
+
+MLIL_RET = <MediumLevelILOperation.MLIL_RET: 55>
+
+ +
+
+MLIL_RET_HINT = <MediumLevelILOperation.MLIL_RET_HINT: 50>
+
+ +
+
+MLIL_RLC = <MediumLevelILOperation.MLIL_RLC: 29>
+
+ +
+
+MLIL_ROL = <MediumLevelILOperation.MLIL_ROL: 28>
+
+ +
+
+MLIL_ROR = <MediumLevelILOperation.MLIL_ROR: 30>
+
+ +
+
+MLIL_ROUND_TO_INT = <MediumLevelILOperation.MLIL_ROUND_TO_INT: 93>
+
+ +
+
+MLIL_RRC = <MediumLevelILOperation.MLIL_RRC: 31>
+
+ +
+
+MLIL_SBB = <MediumLevelILOperation.MLIL_SBB: 21>
+
+ +
+
+MLIL_SET_VAR = <MediumLevelILOperation.MLIL_SET_VAR: 1>
+
+ +
+
+MLIL_SET_VAR_ALIASED = <MediumLevelILOperation.MLIL_SET_VAR_ALIASED: 108>
+
+ +
+
+MLIL_SET_VAR_ALIASED_FIELD = <MediumLevelILOperation.MLIL_SET_VAR_ALIASED_FIELD: 109>
+
+ +
+
+MLIL_SET_VAR_FIELD = <MediumLevelILOperation.MLIL_SET_VAR_FIELD: 2>
+
+ +
+
+MLIL_SET_VAR_SPLIT = <MediumLevelILOperation.MLIL_SET_VAR_SPLIT: 3>
+
+ +
+
+MLIL_SET_VAR_SPLIT_SSA = <MediumLevelILOperation.MLIL_SET_VAR_SPLIT_SSA: 107>
+
+ +
+
+MLIL_SET_VAR_SSA = <MediumLevelILOperation.MLIL_SET_VAR_SSA: 105>
+
+ +
+
+MLIL_SET_VAR_SSA_FIELD = <MediumLevelILOperation.MLIL_SET_VAR_SSA_FIELD: 106>
+
+ +
+
+MLIL_STORE = <MediumLevelILOperation.MLIL_STORE: 6>
+
+ +
+
+MLIL_STORE_SSA = <MediumLevelILOperation.MLIL_STORE_SSA: 125>
+
+ +
+
+MLIL_STORE_STRUCT = <MediumLevelILOperation.MLIL_STORE_STRUCT: 7>
+
+ +
+
+MLIL_STORE_STRUCT_SSA = <MediumLevelILOperation.MLIL_STORE_STRUCT_SSA: 126>
+
+ +
+
+MLIL_SUB = <MediumLevelILOperation.MLIL_SUB: 20>
+
+ +
+
+MLIL_SX = <MediumLevelILOperation.MLIL_SX: 45>
+
+ +
+
+MLIL_SYSCALL = <MediumLevelILOperation.MLIL_SYSCALL: 72>
+
+ +
+
+MLIL_SYSCALL_SSA = <MediumLevelILOperation.MLIL_SYSCALL_SSA: 117>
+
+ +
+
+MLIL_SYSCALL_UNTYPED = <MediumLevelILOperation.MLIL_SYSCALL_UNTYPED: 73>
+
+ +
+
+MLIL_SYSCALL_UNTYPED_SSA = <MediumLevelILOperation.MLIL_SYSCALL_UNTYPED_SSA: 118>
+
+ +
+
+MLIL_TAILCALL = <MediumLevelILOperation.MLIL_TAILCALL: 74>
+
+ +
+
+MLIL_TAILCALL_SSA = <MediumLevelILOperation.MLIL_TAILCALL_SSA: 119>
+
+ +
+
+MLIL_TAILCALL_UNTYPED = <MediumLevelILOperation.MLIL_TAILCALL_UNTYPED: 75>
+
+ +
+
+MLIL_TAILCALL_UNTYPED_SSA = <MediumLevelILOperation.MLIL_TAILCALL_UNTYPED_SSA: 120>
+
+ +
+
+MLIL_TEST_BIT = <MediumLevelILOperation.MLIL_TEST_BIT: 69>
+
+ +
+
+MLIL_TRAP = <MediumLevelILOperation.MLIL_TRAP: 79>
+
+ +
+
+MLIL_UNDEF = <MediumLevelILOperation.MLIL_UNDEF: 80>
+
+ +
+
+MLIL_UNIMPL = <MediumLevelILOperation.MLIL_UNIMPL: 81>
+
+ +
+
+MLIL_UNIMPL_MEM = <MediumLevelILOperation.MLIL_UNIMPL_MEM: 82>
+
+ +
+
+MLIL_VAR = <MediumLevelILOperation.MLIL_VAR: 8>
+
+ +
+
+MLIL_VAR_ALIASED = <MediumLevelILOperation.MLIL_VAR_ALIASED: 112>
+
+ +
+
+MLIL_VAR_ALIASED_FIELD = <MediumLevelILOperation.MLIL_VAR_ALIASED_FIELD: 113>
+
+ +
+
+MLIL_VAR_FIELD = <MediumLevelILOperation.MLIL_VAR_FIELD: 9>
+
+ +
+
+MLIL_VAR_PHI = <MediumLevelILOperation.MLIL_VAR_PHI: 129>
+
+ +
+
+MLIL_VAR_SPLIT = <MediumLevelILOperation.MLIL_VAR_SPLIT: 10>
+
+ +
+
+MLIL_VAR_SPLIT_SSA = <MediumLevelILOperation.MLIL_VAR_SPLIT_SSA: 114>
+
+ +
+
+MLIL_VAR_SSA = <MediumLevelILOperation.MLIL_VAR_SSA: 110>
+
+ +
+
+MLIL_VAR_SSA_FIELD = <MediumLevelILOperation.MLIL_VAR_SSA_FIELD: 111>
+
+ +
+
+MLIL_XOR = <MediumLevelILOperation.MLIL_XOR: 24>
+
+ +
+
+MLIL_ZX = <MediumLevelILOperation.MLIL_ZX: 46>
+
+ +
+ +
+
+class MemberAccess[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+NoAccess = <MemberAccess.NoAccess: 0>
+
+ +
+
+PrivateAccess = <MemberAccess.PrivateAccess: 1>
+
+ +
+
+ProtectedAccess = <MemberAccess.ProtectedAccess: 2>
+
+ +
+
+PublicAccess = <MemberAccess.PublicAccess: 3>
+
+ +
+ +
+
+class MemberScope[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+FriendScope = <MemberScope.FriendScope: 4>
+
+ +
+
+NoScope = <MemberScope.NoScope: 0>
+
+ +
+
+StaticScope = <MemberScope.StaticScope: 1>
+
+ +
+
+ThunkScope = <MemberScope.ThunkScope: 3>
+
+ +
+
+VirtualScope = <MemberScope.VirtualScope: 2>
+
+ +
+ +
+
+class MessageBoxButtonResult[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+CancelButton = <MessageBoxButtonResult.CancelButton: 3>
+
+ +
+
+NoButton = <MessageBoxButtonResult.NoButton: 0>
+
+ +
+
+OKButton = <MessageBoxButtonResult.OKButton: 2>
+
+ +
+
+YesButton = <MessageBoxButtonResult.YesButton: 1>
+
+ +
+ +
+
+class MessageBoxButtonSet[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+OKButtonSet = <MessageBoxButtonSet.OKButtonSet: 0>
+
+ +
+
+YesNoButtonSet = <MessageBoxButtonSet.YesNoButtonSet: 1>
+
+ +
+
+YesNoCancelButtonSet = <MessageBoxButtonSet.YesNoCancelButtonSet: 2>
+
+ +
+ +
+
+class MessageBoxIcon[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+ErrorIcon = <MessageBoxIcon.ErrorIcon: 3>
+
+ +
+
+InformationIcon = <MessageBoxIcon.InformationIcon: 0>
+
+ +
+
+QuestionIcon = <MessageBoxIcon.QuestionIcon: 1>
+
+ +
+
+WarningIcon = <MessageBoxIcon.WarningIcon: 2>
+
+ +
+ +
+
+class MetadataType[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+ArrayDataType = <MetadataType.ArrayDataType: 8>
+
+ +
+
+BooleanDataType = <MetadataType.BooleanDataType: 1>
+
+ +
+
+DoubleDataType = <MetadataType.DoubleDataType: 5>
+
+ +
+
+InvalidDataType = <MetadataType.InvalidDataType: 0>
+
+ +
+
+KeyValueDataType = <MetadataType.KeyValueDataType: 7>
+
+ +
+
+RawDataType = <MetadataType.RawDataType: 6>
+
+ +
+
+SignedIntegerDataType = <MetadataType.SignedIntegerDataType: 4>
+
+ +
+
+StringDataType = <MetadataType.StringDataType: 2>
+
+ +
+
+UnsignedIntegerDataType = <MetadataType.UnsignedIntegerDataType: 3>
+
+ +
+ +
+
+class ModificationStatus[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+Changed = <ModificationStatus.Changed: 1>
+
+ +
+
+Inserted = <ModificationStatus.Inserted: 2>
+
+ +
+
+Original = <ModificationStatus.Original: 0>
+
+ +
+ +
+
+class NameType[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+ConstructorNameType = <NameType.ConstructorNameType: 1>
+
+ +
+
+CopyConstructorClosureNameType = <NameType.CopyConstructorClosureNameType: 60>
+
+ +
+
+DefaultConstructorClosureNameType = <NameType.DefaultConstructorClosureNameType: 51>
+
+ +
+
+DestructorNameType = <NameType.DestructorNameType: 2>
+
+ +
+
+EHVectorConstructorIteratorNameType = <NameType.EHVectorConstructorIteratorNameType: 57>
+
+ +
+
+EHVectorDestructorIteratorNameType = <NameType.EHVectorDestructorIteratorNameType: 58>
+
+ +
+
+EHVectorVBaseConstructorIteratorNameType = <NameType.EHVectorVBaseConstructorIteratorNameType: 59>
+
+ +
+
+LocalStaticGuardNameType = <NameType.LocalStaticGuardNameType: 47>
+
+ +
+
+LocalVFTableConstructorClosureNameType = <NameType.LocalVFTableConstructorClosureNameType: 63>
+
+ +
+
+LocalVFTableNameType = <NameType.LocalVFTableNameType: 62>
+
+ +
+
+NoNameType = <NameType.NoNameType: 0>
+
+ +
+
+OperatorAndEqualNameType = <NameType.OperatorAndEqualNameType: 40>
+
+ +
+
+OperatorArrayNameType = <NameType.OperatorArrayNameType: 11>
+
+ +
+
+OperatorArrowNameType = <NameType.OperatorArrowNameType: 12>
+
+ +
+
+OperatorArrowStarNameType = <NameType.OperatorArrowStarNameType: 19>
+
+ +
+
+OperatorAssignNameType = <NameType.OperatorAssignNameType: 5>
+
+ +
+
+OperatorBitAndNameType = <NameType.OperatorBitAndNameType: 18>
+
+ +
+
+OperatorBitOrNameType = <NameType.OperatorBitOrNameType: 30>
+
+ +
+
+OperatorCommaNameType = <NameType.OperatorCommaNameType: 26>
+
+ +
+
+OperatorDecrementNameType = <NameType.OperatorDecrementNameType: 15>
+
+ +
+
+OperatorDeleteArrayNameType = <NameType.OperatorDeleteArrayNameType: 65>
+
+ +
+
+OperatorDeleteNameType = <NameType.OperatorDeleteNameType: 4>
+
+ +
+
+OperatorDivideEqualNameType = <NameType.OperatorDivideEqualNameType: 36>
+
+ +
+
+OperatorDivideNameType = <NameType.OperatorDivideNameType: 20>
+
+ +
+
+OperatorEqualNameType = <NameType.OperatorEqualNameType: 9>
+
+ +
+
+OperatorGreaterThanEqualNameType = <NameType.OperatorGreaterThanEqualNameType: 25>
+
+ +
+
+OperatorGreaterThanNameType = <NameType.OperatorGreaterThanNameType: 24>
+
+ +
+
+OperatorIncrementNameType = <NameType.OperatorIncrementNameType: 14>
+
+ +
+
+OperatorLeftShiftEqualNameType = <NameType.OperatorLeftShiftEqualNameType: 39>
+
+ +
+
+OperatorLeftShiftNameType = <NameType.OperatorLeftShiftNameType: 7>
+
+ +
+
+OperatorLessThanEqualNameType = <NameType.OperatorLessThanEqualNameType: 23>
+
+ +
+
+OperatorLessThanNameType = <NameType.OperatorLessThanNameType: 22>
+
+ +
+
+OperatorLogicalAndNameType = <NameType.OperatorLogicalAndNameType: 31>
+
+ +
+
+OperatorLogicalOrNameType = <NameType.OperatorLogicalOrNameType: 32>
+
+ +
+
+OperatorMinusEqualNameType = <NameType.OperatorMinusEqualNameType: 35>
+
+ +
+
+OperatorMinusNameType = <NameType.OperatorMinusNameType: 16>
+
+ +
+
+OperatorModulusEqualNameType = <NameType.OperatorModulusEqualNameType: 37>
+
+ +
+
+OperatorModulusNameType = <NameType.OperatorModulusNameType: 21>
+
+ +
+
+OperatorNewArrayNameType = <NameType.OperatorNewArrayNameType: 64>
+
+ +
+
+OperatorNewNameType = <NameType.OperatorNewNameType: 3>
+
+ +
+
+OperatorNotEqualNameType = <NameType.OperatorNotEqualNameType: 10>
+
+ +
+
+OperatorNotNameType = <NameType.OperatorNotNameType: 8>
+
+ +
+
+OperatorOrEqualNameType = <NameType.OperatorOrEqualNameType: 41>
+
+ +
+
+OperatorParenthesesNameType = <NameType.OperatorParenthesesNameType: 27>
+
+ +
+
+OperatorPlusEqualNameType = <NameType.OperatorPlusEqualNameType: 34>
+
+ +
+
+OperatorPlusNameType = <NameType.OperatorPlusNameType: 17>
+
+ +
+
+OperatorReturnTypeNameType = <NameType.OperatorReturnTypeNameType: 68>
+
+ +
+
+OperatorRightShiftEqualNameType = <NameType.OperatorRightShiftEqualNameType: 38>
+
+ +
+
+OperatorRightShiftNameType = <NameType.OperatorRightShiftNameType: 6>
+
+ +
+
+OperatorStarEqualNameType = <NameType.OperatorStarEqualNameType: 33>
+
+ +
+
+OperatorStarNameType = <NameType.OperatorStarNameType: 13>
+
+ +
+
+OperatorTildeNameType = <NameType.OperatorTildeNameType: 28>
+
+ +
+
+OperatorUnaryBitAndNameType = <NameType.OperatorUnaryBitAndNameType: 76>
+
+ +
+
+OperatorUnaryMinusNameType = <NameType.OperatorUnaryMinusNameType: 74>
+
+ +
+
+OperatorUnaryPlusNameType = <NameType.OperatorUnaryPlusNameType: 75>
+
+ +
+
+OperatorUnaryStarNameType = <NameType.OperatorUnaryStarNameType: 77>
+
+ +
+
+OperatorXorEqualNameType = <NameType.OperatorXorEqualNameType: 42>
+
+ +
+
+OperatorXorNameType = <NameType.OperatorXorNameType: 29>
+
+ +
+
+PlacementDeleteClosureArrayNameType = <NameType.PlacementDeleteClosureArrayNameType: 67>
+
+ +
+
+PlacementDeleteClosureNameType = <NameType.PlacementDeleteClosureNameType: 66>
+
+ +
+
+RttiBaseClassArray = <NameType.RttiBaseClassArray: 71>
+
+ +
+
+RttiBaseClassDescriptor = <NameType.RttiBaseClassDescriptor: 70>
+
+ +
+
+RttiClassHeirarchyDescriptor = <NameType.RttiClassHeirarchyDescriptor: 72>
+
+ +
+
+RttiCompleteObjectLocator = <NameType.RttiCompleteObjectLocator: 73>
+
+ +
+
+RttiTypeDescriptor = <NameType.RttiTypeDescriptor: 69>
+
+ +
+
+ScalarDeletingDestructorNameType = <NameType.ScalarDeletingDestructorNameType: 52>
+
+ +
+
+StringNameType = <NameType.StringNameType: 48>
+
+ +
+
+TypeofNameType = <NameType.TypeofNameType: 46>
+
+ +
+
+UDTReturningNameType = <NameType.UDTReturningNameType: 61>
+
+ +
+
+VBTableNameType = <NameType.VBTableNameType: 44>
+
+ +
+
+VBaseDestructorNameType = <NameType.VBaseDestructorNameType: 49>
+
+ +
+
+VCallNameType = <NameType.VCallNameType: 45>
+
+ +
+
+VFTableNameType = <NameType.VFTableNameType: 43>
+
+ +
+
+VectorConstructorIteratorNameType = <NameType.VectorConstructorIteratorNameType: 53>
+
+ +
+
+VectorDeletingDestructorNameType = <NameType.VectorDeletingDestructorNameType: 50>
+
+ +
+
+VectorDestructorIteratorNameType = <NameType.VectorDestructorIteratorNameType: 54>
+
+ +
+
+VectorVBaseConstructorIteratoreNameType = <NameType.VectorVBaseConstructorIteratoreNameType: 55>
+
+ +
+
+VirtualDisplacementMapNameType = <NameType.VirtualDisplacementMapNameType: 56>
+
+ +
+ +
+
+class NamedTypeReferenceClass[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+ClassNamedTypeClass = <NamedTypeReferenceClass.ClassNamedTypeClass: 2>
+
+ +
+
+EnumNamedTypeClass = <NamedTypeReferenceClass.EnumNamedTypeClass: 5>
+
+ +
+
+StructNamedTypeClass = <NamedTypeReferenceClass.StructNamedTypeClass: 3>
+
+ +
+
+TypedefNamedTypeClass = <NamedTypeReferenceClass.TypedefNamedTypeClass: 1>
+
+ +
+
+UnionNamedTypeClass = <NamedTypeReferenceClass.UnionNamedTypeClass: 4>
+
+ +
+
+UnknownNamedTypeClass = <NamedTypeReferenceClass.UnknownNamedTypeClass: 0>
+
+ +
+ +
+
+class PluginCommandType[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+AddressPluginCommand = <PluginCommandType.AddressPluginCommand: 1>
+
+ +
+
+DefaultPluginCommand = <PluginCommandType.DefaultPluginCommand: 0>
+
+ +
+
+FunctionPluginCommand = <PluginCommandType.FunctionPluginCommand: 3>
+
+ +
+
+LowLevelILFunctionPluginCommand = <PluginCommandType.LowLevelILFunctionPluginCommand: 4>
+
+ +
+
+LowLevelILInstructionPluginCommand = <PluginCommandType.LowLevelILInstructionPluginCommand: 5>
+
+ +
+
+MediumLevelILFunctionPluginCommand = <PluginCommandType.MediumLevelILFunctionPluginCommand: 6>
+
+ +
+
+MediumLevelILInstructionPluginCommand = <PluginCommandType.MediumLevelILInstructionPluginCommand: 7>
+
+ +
+
+RangePluginCommand = <PluginCommandType.RangePluginCommand: 2>
+
+ +
+ +
+
+class PluginLoadOrder[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+EarlyPluginLoadOrder = <PluginLoadOrder.EarlyPluginLoadOrder: 0>
+
+ +
+
+LatePluginLoadOrder = <PluginLoadOrder.LatePluginLoadOrder: 2>
+
+ +
+
+NormalPluginLoadOrder = <PluginLoadOrder.NormalPluginLoadOrder: 1>
+
+ +
+ +
+
+class PluginOrigin[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+CommunityPluginOrigin = <PluginOrigin.CommunityPluginOrigin: 1>
+
+ +
+
+OfficialPluginOrigin = <PluginOrigin.OfficialPluginOrigin: 0>
+
+ +
+
+OtherPluginOrigin = <PluginOrigin.OtherPluginOrigin: 2>
+
+ +
+ +
+
+class PluginType[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+ArchitecturePluginType = <PluginType.ArchitecturePluginType: 2>
+
+ +
+
+BinaryViewPluginType = <PluginType.BinaryViewPluginType: 3>
+
+ +
+
+CorePluginType = <PluginType.CorePluginType: 0>
+
+ +
+
+UiPluginType = <PluginType.UiPluginType: 1>
+
+ +
+ +
+
+class PluginUpdateStatus[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+UpToDatePluginStatus = <PluginUpdateStatus.UpToDatePluginStatus: 0>
+
+ +
+
+UpdatesAvailablePluginStatus = <PluginUpdateStatus.UpdatesAvailablePluginStatus: 1>
+
+ +
+ +
+
+class PointerSuffix[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+LvalueSuffix = <PointerSuffix.LvalueSuffix: 4>
+
+ +
+
+Ptr64Suffix = <PointerSuffix.Ptr64Suffix: 0>
+
+ +
+
+ReferenceSuffix = <PointerSuffix.ReferenceSuffix: 3>
+
+ +
+
+RestrictSuffix = <PointerSuffix.RestrictSuffix: 2>
+
+ +
+
+UnalignedSuffix = <PointerSuffix.UnalignedSuffix: 1>
+
+ +
+ +
+
+class ReferenceType[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+NoReference = <ReferenceType.NoReference: 3>
+
+ +
+
+PointerReferenceType = <ReferenceType.PointerReferenceType: 0>
+
+ +
+
+RValueReferenceType = <ReferenceType.RValueReferenceType: 2>
+
+ +
+
+ReferenceReferenceType = <ReferenceType.ReferenceReferenceType: 1>
+
+ +
+ +
+
+class RegisterValueType[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+ConstantPointerValue = <RegisterValueType.ConstantPointerValue: 3>
+
+ +
+
+ConstantValue = <RegisterValueType.ConstantValue: 2>
+
+ +
+
+EntryValue = <RegisterValueType.EntryValue: 1>
+
+ +
+
+ExternalPointerValue = <RegisterValueType.ExternalPointerValue: 4>
+
+ +
+
+ImportedAddressValue = <RegisterValueType.ImportedAddressValue: 7>
+
+ +
+
+InSetOfValues = <RegisterValueType.InSetOfValues: 11>
+
+ +
+
+LookupTableValue = <RegisterValueType.LookupTableValue: 10>
+
+ +
+
+NotInSetOfValues = <RegisterValueType.NotInSetOfValues: 12>
+
+ +
+
+ReturnAddressValue = <RegisterValueType.ReturnAddressValue: 6>
+
+ +
+
+SignedRangeValue = <RegisterValueType.SignedRangeValue: 8>
+
+ +
+
+StackFrameOffset = <RegisterValueType.StackFrameOffset: 5>
+
+ +
+
+UndeterminedValue = <RegisterValueType.UndeterminedValue: 0>
+
+ +
+
+UnsignedRangeValue = <RegisterValueType.UnsignedRangeValue: 9>
+
+ +
+ +
+
+class RelocationType[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+ELFCopyRelocationType = <RelocationType.ELFCopyRelocationType: 1>
+
+ +
+
+ELFGlobalRelocationType = <RelocationType.ELFGlobalRelocationType: 0>
+
+ +
+
+ELFJumpSlotRelocationType = <RelocationType.ELFJumpSlotRelocationType: 2>
+
+ +
+
+IgnoredRelocation = <RelocationType.IgnoredRelocation: 4>
+
+ +
+
+StandardRelocationType = <RelocationType.StandardRelocationType: 3>
+
+ +
+ +
+
+class ReportType[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+FlowGraphReportType = <ReportType.FlowGraphReportType: 3>
+
+ +
+
+HTMLReportType = <ReportType.HTMLReportType: 2>
+
+ +
+
+MarkdownReportType = <ReportType.MarkdownReportType: 1>
+
+ +
+
+PlainTextReportType = <ReportType.PlainTextReportType: 0>
+
+ +
+ +
+
+class ScriptingProviderExecuteResult[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+IncompleteScriptInput = <ScriptingProviderExecuteResult.IncompleteScriptInput: 1>
+
+ +
+
+InvalidScriptInput = <ScriptingProviderExecuteResult.InvalidScriptInput: 0>
+
+ +
+
+ScriptExecutionCancelled = <ScriptingProviderExecuteResult.ScriptExecutionCancelled: 3>
+
+ +
+
+SuccessfulScriptExecution = <ScriptingProviderExecuteResult.SuccessfulScriptExecution: 2>
+
+ +
+ +
+
+class ScriptingProviderInputReadyState[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+NotReadyForInput = <ScriptingProviderInputReadyState.NotReadyForInput: 0>
+
+ +
+
+ReadyForScriptExecution = <ScriptingProviderInputReadyState.ReadyForScriptExecution: 1>
+
+ +
+
+ReadyForScriptProgramInput = <ScriptingProviderInputReadyState.ReadyForScriptProgramInput: 2>
+
+ +
+ +
+
+class SectionSemantics[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+DefaultSectionSemantics = <SectionSemantics.DefaultSectionSemantics: 0>
+
+ +
+
+ExternalSectionSemantics = <SectionSemantics.ExternalSectionSemantics: 4>
+
+ +
+
+ReadOnlyCodeSectionSemantics = <SectionSemantics.ReadOnlyCodeSectionSemantics: 1>
+
+ +
+
+ReadOnlyDataSectionSemantics = <SectionSemantics.ReadOnlyDataSectionSemantics: 2>
+
+ +
+
+ReadWriteDataSectionSemantics = <SectionSemantics.ReadWriteDataSectionSemantics: 3>
+
+ +
+ +
+
+class SegmentFlag[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+SegmentContainsCode = <SegmentFlag.SegmentContainsCode: 16>
+
+ +
+
+SegmentContainsData = <SegmentFlag.SegmentContainsData: 8>
+
+ +
+
+SegmentDenyExecute = <SegmentFlag.SegmentDenyExecute: 64>
+
+ +
+
+SegmentDenyWrite = <SegmentFlag.SegmentDenyWrite: 32>
+
+ +
+
+SegmentExecutable = <SegmentFlag.SegmentExecutable: 1>
+
+ +
+
+SegmentReadable = <SegmentFlag.SegmentReadable: 4>
+
+ +
+
+SegmentWritable = <SegmentFlag.SegmentWritable: 2>
+
+ +
+ +
+
+class SettingsScope[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+SettingsAutoScope = <SettingsScope.SettingsAutoScope: 1>
+
+ +
+
+SettingsContextScope = <SettingsScope.SettingsContextScope: 5>
+
+ +
+
+SettingsDefaultScope = <SettingsScope.SettingsDefaultScope: 2>
+
+ +
+
+SettingsInvalidScope = <SettingsScope.SettingsInvalidScope: 0>
+
+ +
+
+SettingsUserScope = <SettingsScope.SettingsUserScope: 3>
+
+ +
+
+SettingsWorkspaceScope = <SettingsScope.SettingsWorkspaceScope: 4>
+
+ +
+ +
+
+class StringType[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+AsciiString = <StringType.AsciiString: 0>
+
+ +
+
+Utf16String = <StringType.Utf16String: 1>
+
+ +
+
+Utf32String = <StringType.Utf32String: 2>
+
+ +
+
+Utf8String = <StringType.Utf8String: 3>
+
+ +
+ +
+
+class StructureType[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+ClassStructureType = <StructureType.ClassStructureType: 0>
+
+ +
+
+StructStructureType = <StructureType.StructStructureType: 1>
+
+ +
+
+UnionStructureType = <StructureType.UnionStructureType: 2>
+
+ +
+ +
+
+class SymbolBinding[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+GlobalBinding = <SymbolBinding.GlobalBinding: 2>
+
+ +
+
+LocalBinding = <SymbolBinding.LocalBinding: 1>
+
+ +
+
+NoBinding = <SymbolBinding.NoBinding: 0>
+
+ +
+
+WeakBinding = <SymbolBinding.WeakBinding: 3>
+
+ +
+ +
+
+class SymbolType[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+DataSymbol = <SymbolType.DataSymbol: 3>
+
+ +
+
+ExternalSymbol = <SymbolType.ExternalSymbol: 5>
+
+ +
+
+FunctionSymbol = <SymbolType.FunctionSymbol: 0>
+
+ +
+
+ImportAddressSymbol = <SymbolType.ImportAddressSymbol: 1>
+
+ +
+
+ImportedDataSymbol = <SymbolType.ImportedDataSymbol: 4>
+
+ +
+
+ImportedFunctionSymbol = <SymbolType.ImportedFunctionSymbol: 2>
+
+ +
+ +
+
+class TransformType[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+BinaryCodecTransform = <TransformType.BinaryCodecTransform: 0>
+
+ +
+
+BinaryEncodeTransform = <TransformType.BinaryEncodeTransform: 4>
+
+ +
+
+DecodeTransform = <TransformType.DecodeTransform: 3>
+
+ +
+
+EncryptTransform = <TransformType.EncryptTransform: 6>
+
+ +
+
+HashTransform = <TransformType.HashTransform: 8>
+
+ +
+
+InvertingTransform = <TransformType.InvertingTransform: 7>
+
+ +
+
+TextCodecTransform = <TransformType.TextCodecTransform: 1>
+
+ +
+
+TextEncodeTransform = <TransformType.TextEncodeTransform: 5>
+
+ +
+
+UnicodeCodecTransform = <TransformType.UnicodeCodecTransform: 2>
+
+ +
+ +
+
+class TypeClass[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+ArrayTypeClass = <TypeClass.ArrayTypeClass: 7>
+
+ +
+
+BoolTypeClass = <TypeClass.BoolTypeClass: 1>
+
+ +
+
+EnumerationTypeClass = <TypeClass.EnumerationTypeClass: 5>
+
+ +
+
+FloatTypeClass = <TypeClass.FloatTypeClass: 3>
+
+ +
+
+FunctionTypeClass = <TypeClass.FunctionTypeClass: 8>
+
+ +
+
+IntegerTypeClass = <TypeClass.IntegerTypeClass: 2>
+
+ +
+
+NamedTypeReferenceClass = <TypeClass.NamedTypeReferenceClass: 11>
+
+ +
+
+PointerTypeClass = <TypeClass.PointerTypeClass: 6>
+
+ +
+
+StructureTypeClass = <TypeClass.StructureTypeClass: 4>
+
+ +
+
+ValueTypeClass = <TypeClass.ValueTypeClass: 10>
+
+ +
+
+VarArgsTypeClass = <TypeClass.VarArgsTypeClass: 9>
+
+ +
+
+VoidTypeClass = <TypeClass.VoidTypeClass: 0>
+
+ +
+
+WideCharTypeClass = <TypeClass.WideCharTypeClass: 12>
+
+ +
+ +
+
+class UpdateResult[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+AlreadyUpToDate = <UpdateResult.AlreadyUpToDate: 2>
+
+ +
+
+UpdateAvailable = <UpdateResult.UpdateAvailable: 3>
+
+ +
+
+UpdateFailed = <UpdateResult.UpdateFailed: 0>
+
+ +
+
+UpdateSuccess = <UpdateResult.UpdateSuccess: 1>
+
+ +
+ +
+
+class VariableSourceType[source]
+

Bases: binaryninja.enum.IntEnum

+
+
+FlagVariableSourceType = <VariableSourceType.FlagVariableSourceType: 2>
+
+ +
+
+RegisterVariableSourceType = <VariableSourceType.RegisterVariableSourceType: 1>
+
+ +
+
+StackVariableSourceType = <VariableSourceType.StackVariableSourceType: 0>
+
+ +
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.ActionType.html b/personal/api-docs/binaryninja.enums.ActionType.html new file mode 100644 index 0000000..c747f90 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.ActionType.html @@ -0,0 +1,349 @@ + + + + + + + + + + + binaryninja.enums.ActionType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.ActionType

+
+
+class ActionType[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + +
AnalysisAction
DataModificationAction
DataModificationAndAnalysisAction
TemporaryAction
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.AnalysisSkipReason.html b/personal/api-docs/binaryninja.enums.AnalysisSkipReason.html new file mode 100644 index 0000000..5a3df07 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.AnalysisSkipReason.html @@ -0,0 +1,355 @@ + + + + + + + + + + + binaryninja.enums.AnalysisSkipReason — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.AnalysisSkipReason

+
+
+class AnalysisSkipReason[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + +
AlwaysSkipReason
ExceedFunctionAnalysisTimeSkipReason
ExceedFunctionSizeSkipReason
ExceedFunctionUpdateCountSkipReason
NewAutoFunctionAnalysisSuppressedReason
NoSkipReason
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.AnalysisState.html b/personal/api-docs/binaryninja.enums.AnalysisState.html new file mode 100644 index 0000000..6580eb5 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.AnalysisState.html @@ -0,0 +1,349 @@ + + + + + + + + + + + binaryninja.enums.AnalysisState — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.AnalysisState

+
+
+class AnalysisState[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + +
AnalyzeState
DisassembleState
ExtendedAnalyzeState
IdleState
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.BranchType.html b/personal/api-docs/binaryninja.enums.BranchType.html new file mode 100644 index 0000000..b28728b --- /dev/null +++ b/personal/api-docs/binaryninja.enums.BranchType.html @@ -0,0 +1,361 @@ + + + + + + + + + + + binaryninja.enums.BranchType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.BranchType

+
+
+class BranchType[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +
CallDestination
FalseBranch
FunctionReturn
IndirectBranch
SystemCall
TrueBranch
UnconditionalBranch
UnresolvedBranch
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.CallingConventionName.html b/personal/api-docs/binaryninja.enums.CallingConventionName.html new file mode 100644 index 0000000..65a5f21 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.CallingConventionName.html @@ -0,0 +1,364 @@ + + + + + + + + + + + binaryninja.enums.CallingConventionName — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.CallingConventionName

+
+
+class CallingConventionName[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CLRCallCallingConvention
CdeclCallingConvention
EabiCallCallingConvention
FastcallCallingConvention
NoCallingConvention
PascalCallingConvention
STDCallCallingConvention
ThisCallCallingConvention
VectorCallCallingConvention
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.DisassemblyOption.html b/personal/api-docs/binaryninja.enums.DisassemblyOption.html new file mode 100644 index 0000000..4310456 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.DisassemblyOption.html @@ -0,0 +1,367 @@ + + + + + + + + + + + binaryninja.enums.DisassemblyOption — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.DisassemblyOption

+
+
+class DisassemblyOption[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ExpandLongOpcode
GroupLinearDisassemblyFunctions
ShowAddress
ShowCallParameterNames
ShowDefaultRegisterTypes
ShowFlagUsage
ShowOpcode
ShowRegisterHighlight
ShowVariableTypesWhenAssigned
ShowVariablesAtTopOfGraph
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.Endianness.html b/personal/api-docs/binaryninja.enums.Endianness.html new file mode 100644 index 0000000..780cc65 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.Endianness.html @@ -0,0 +1,343 @@ + + + + + + + + + + + binaryninja.enums.Endianness — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.Endianness

+
+
+class Endianness[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + +
BigEndian
LittleEndian
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.FindFlag.html b/personal/api-docs/binaryninja.enums.FindFlag.html new file mode 100644 index 0000000..3208976 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.FindFlag.html @@ -0,0 +1,343 @@ + + + + + + + + + + + binaryninja.enums.FindFlag — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.FindFlag

+
+
+class FindFlag[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + +
FindCaseInsensitive
FindCaseSensitive
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.FlagRole.html b/personal/api-docs/binaryninja.enums.FlagRole.html new file mode 100644 index 0000000..bfd14c9 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.FlagRole.html @@ -0,0 +1,370 @@ + + + + + + + + + + + binaryninja.enums.FlagRole — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.FlagRole

+
+
+class FlagRole[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CarryFlagRole
EvenParityFlagRole
HalfCarryFlagRole
NegativeSignFlagRole
OddParityFlagRole
OrderedFlagRole
OverflowFlagRole
PositiveSignFlagRole
SpecialFlagRole
UnorderedFlagRole
ZeroFlagRole
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.FormInputFieldType.html b/personal/api-docs/binaryninja.enums.FormInputFieldType.html new file mode 100644 index 0000000..2d92944 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.FormInputFieldType.html @@ -0,0 +1,367 @@ + + + + + + + + + + + binaryninja.enums.FormInputFieldType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.FormInputFieldType

+
+
+class FormInputFieldType[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AddressFormField
ChoiceFormField
DirectoryNameFormField
IntegerFormField
LabelFormField
MultilineTextFormField
OpenFileNameFormField
SaveFileNameFormField
SeparatorFormField
TextLineFormField
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.FunctionAnalysisSkipOverride.html b/personal/api-docs/binaryninja.enums.FunctionAnalysisSkipOverride.html new file mode 100644 index 0000000..6f39024 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.FunctionAnalysisSkipOverride.html @@ -0,0 +1,346 @@ + + + + + + + + + + + binaryninja.enums.FunctionAnalysisSkipOverride — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.FunctionAnalysisSkipOverride

+
+
+class FunctionAnalysisSkipOverride[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + +
AlwaysSkipFunctionAnalysis
DefaultFunctionAnalysisSkip
NeverSkipFunctionAnalysis
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.FunctionGraphType.html b/personal/api-docs/binaryninja.enums.FunctionGraphType.html new file mode 100644 index 0000000..d0d6511 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.FunctionGraphType.html @@ -0,0 +1,361 @@ + + + + + + + + + + + binaryninja.enums.FunctionGraphType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.FunctionGraphType

+
+
+class FunctionGraphType[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiftedILFunctionGraph
LowLevelILFunctionGraph
LowLevelILSSAFormFunctionGraph
MappedMediumLevelILFunctionGraph
MappedMediumLevelILSSAFormFunctionGraph
MediumLevelILFunctionGraph
MediumLevelILSSAFormFunctionGraph
NormalFunctionGraph
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.HighlightColorStyle.html b/personal/api-docs/binaryninja.enums.HighlightColorStyle.html new file mode 100644 index 0000000..27c28ff --- /dev/null +++ b/personal/api-docs/binaryninja.enums.HighlightColorStyle.html @@ -0,0 +1,346 @@ + + + + + + + + + + + binaryninja.enums.HighlightColorStyle — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.HighlightColorStyle

+
+
+class HighlightColorStyle[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + +
CustomHighlightColor
MixedHighlightColor
StandardHighlightColor
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.HighlightStandardColor.html b/personal/api-docs/binaryninja.enums.HighlightStandardColor.html new file mode 100644 index 0000000..242da95 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.HighlightStandardColor.html @@ -0,0 +1,367 @@ + + + + + + + + + + + binaryninja.enums.HighlightStandardColor — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.HighlightStandardColor

+
+
+class HighlightStandardColor[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BlackHighlightColor
BlueHighlightColor
CyanHighlightColor
GreenHighlightColor
MagentaHighlightColor
NoHighlightColor
OrangeHighlightColor
RedHighlightColor
WhiteHighlightColor
YellowHighlightColor
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.ILBranchDependence.html b/personal/api-docs/binaryninja.enums.ILBranchDependence.html new file mode 100644 index 0000000..f45d069 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.ILBranchDependence.html @@ -0,0 +1,346 @@ + + + + + + + + + + + binaryninja.enums.ILBranchDependence — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.ILBranchDependence

+
+
+class ILBranchDependence[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + +
FalseBranchDependent
NotBranchDependent
TrueBranchDependent
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.ImplicitRegisterExtend.html b/personal/api-docs/binaryninja.enums.ImplicitRegisterExtend.html new file mode 100644 index 0000000..bb95e15 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.ImplicitRegisterExtend.html @@ -0,0 +1,346 @@ + + + + + + + + + + + binaryninja.enums.ImplicitRegisterExtend — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.ImplicitRegisterExtend

+
+
+class ImplicitRegisterExtend[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + +
NoExtend
SignExtendToFullWidth
ZeroExtendToFullWidth
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.InstructionTextTokenContext.html b/personal/api-docs/binaryninja.enums.InstructionTextTokenContext.html new file mode 100644 index 0000000..ab504c3 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.InstructionTextTokenContext.html @@ -0,0 +1,349 @@ + + + + + + + + + + + binaryninja.enums.InstructionTextTokenContext — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.InstructionTextTokenContext

+
+
+class InstructionTextTokenContext[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + +
DataVariableTokenContext
FunctionReturnTokenContext
LocalVariableTokenContext
NoTokenContext
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.InstructionTextTokenType.html b/personal/api-docs/binaryninja.enums.InstructionTextTokenType.html new file mode 100644 index 0000000..de22bbe --- /dev/null +++ b/personal/api-docs/binaryninja.enums.InstructionTextTokenType.html @@ -0,0 +1,430 @@ + + + + + + + + + + + binaryninja.enums.InstructionTextTokenType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.InstructionTextTokenType

+
+
+class InstructionTextTokenType[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AddressDisplayToken
AnnotationToken
ArgumentNameToken
BeginMemoryOperandToken
CharacterConstantToken
CodeRelativeAddressToken
CodeSymbolToken
DataSymbolToken
EndMemoryOperandToken
ExternalSymbolToken
FieldNameToken
FloatingPointToken
HexDumpByteValueToken
HexDumpInvalidByteToken
HexDumpSkippedByteToken
HexDumpTextToken
ImportToken
IndirectImportToken
InstructionToken
IntegerToken
KeywordToken
LocalVariableToken
NameSpaceSeparatorToken
NameSpaceToken
OpcodeToken
OperandSeparatorToken
PossibleAddressToken
RegisterToken
StringToken
TextToken
TypeNameToken
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.IntegerDisplayType.html b/personal/api-docs/binaryninja.enums.IntegerDisplayType.html new file mode 100644 index 0000000..48a22af --- /dev/null +++ b/personal/api-docs/binaryninja.enums.IntegerDisplayType.html @@ -0,0 +1,367 @@ + + + + + + + + + + + binaryninja.enums.IntegerDisplayType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.IntegerDisplayType

+
+
+class IntegerDisplayType[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BinaryDisplayType
CharacterConstantDisplayType
DefaultIntegerDisplayType
PointerDisplayType
SignedDecimalDisplayType
SignedHexadecimalDisplayType
SignedOctalDisplayType
UnsignedDecimalDisplayType
UnsignedHexadecimalDisplayType
UnsignedOctalDisplayType
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.LinearDisassemblyLineType.html b/personal/api-docs/binaryninja.enums.LinearDisassemblyLineType.html new file mode 100644 index 0000000..219f040 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.LinearDisassemblyLineType.html @@ -0,0 +1,391 @@ + + + + + + + + + + + binaryninja.enums.LinearDisassemblyLineType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.LinearDisassemblyLineType

+
+
+class LinearDisassemblyLineType[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BlankLineType
CodeDisassemblyLineType
DataVariableLineType
FunctionContinuationLineType
FunctionEndLineType
FunctionHeaderEndLineType
FunctionHeaderLineType
FunctionHeaderStartLineType
HexDumpLineType
LocalVariableLineType
LocalVariableListEndLineType
NonContiguousSeparatorLineType
NoteEndLineType
NoteLineType
NoteStartLineType
SectionEndLineType
SectionSeparatorLineType
SectionStartLineType
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.LogLevel.html b/personal/api-docs/binaryninja.enums.LogLevel.html new file mode 100644 index 0000000..574a545 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.LogLevel.html @@ -0,0 +1,352 @@ + + + + + + + + + + + binaryninja.enums.LogLevel — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.LogLevel

+
+
+class LogLevel[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + +
AlertLog
DebugLog
ErrorLog
InfoLog
WarningLog
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.LowLevelILFlagCondition.html b/personal/api-docs/binaryninja.enums.LowLevelILFlagCondition.html new file mode 100644 index 0000000..e71d89d --- /dev/null +++ b/personal/api-docs/binaryninja.enums.LowLevelILFlagCondition.html @@ -0,0 +1,403 @@ + + + + + + + + + + + binaryninja.enums.LowLevelILFlagCondition — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.LowLevelILFlagCondition

+
+
+class LowLevelILFlagCondition[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LLFC_E
LLFC_FE
LLFC_FGE
LLFC_FGT
LLFC_FLE
LLFC_FLT
LLFC_FNE
LLFC_FO
LLFC_FUO
LLFC_NE
LLFC_NEG
LLFC_NO
LLFC_O
LLFC_POS
LLFC_SGE
LLFC_SGT
LLFC_SLE
LLFC_SLT
LLFC_UGE
LLFC_UGT
LLFC_ULE
LLFC_ULT
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.LowLevelILOperation.html b/personal/api-docs/binaryninja.enums.LowLevelILOperation.html new file mode 100644 index 0000000..fc4111c --- /dev/null +++ b/personal/api-docs/binaryninja.enums.LowLevelILOperation.html @@ -0,0 +1,742 @@ + + + + + + + + + + + binaryninja.enums.LowLevelILOperation — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.LowLevelILOperation

+
+
+class LowLevelILOperation[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LLIL_ADC
LLIL_ADD
LLIL_ADD_OVERFLOW
LLIL_AND
LLIL_ASR
LLIL_BOOL_TO_INT
LLIL_BP
LLIL_CALL
LLIL_CALL_OUTPUT_SSA
LLIL_CALL_PARAM
LLIL_CALL_SSA
LLIL_CALL_STACK_ADJUST
LLIL_CALL_STACK_SSA
LLIL_CEIL
LLIL_CMP_E
LLIL_CMP_NE
LLIL_CMP_SGE
LLIL_CMP_SGT
LLIL_CMP_SLE
LLIL_CMP_SLT
LLIL_CMP_UGE
LLIL_CMP_UGT
LLIL_CMP_ULE
LLIL_CMP_ULT
LLIL_CONST
LLIL_CONST_PTR
LLIL_DIVS
LLIL_DIVS_DP
LLIL_DIVU
LLIL_DIVU_DP
LLIL_EXTERN_PTR
LLIL_FABS
LLIL_FADD
LLIL_FCMP_E
LLIL_FCMP_GE
LLIL_FCMP_GT
LLIL_FCMP_LE
LLIL_FCMP_LT
LLIL_FCMP_NE
LLIL_FCMP_O
LLIL_FCMP_UO
LLIL_FDIV
LLIL_FLAG
LLIL_FLAG_BIT
LLIL_FLAG_BIT_SSA
LLIL_FLAG_COND
LLIL_FLAG_GROUP
LLIL_FLAG_PHI
LLIL_FLAG_SSA
LLIL_FLOAT_CONST
LLIL_FLOAT_CONV
LLIL_FLOAT_TO_INT
LLIL_FLOOR
LLIL_FMUL
LLIL_FNEG
LLIL_FSQRT
LLIL_FSUB
LLIL_FTRUNC
LLIL_GOTO
LLIL_IF
LLIL_INTRINSIC
LLIL_INTRINSIC_SSA
LLIL_INT_TO_FLOAT
LLIL_JUMP
LLIL_JUMP_TO
LLIL_LOAD
LLIL_LOAD_SSA
LLIL_LOW_PART
LLIL_LSL
LLIL_LSR
LLIL_MEM_PHI
LLIL_MODS
LLIL_MODS_DP
LLIL_MODU
LLIL_MODU_DP
LLIL_MUL
LLIL_MULS_DP
LLIL_MULU_DP
LLIL_NEG
LLIL_NOP
LLIL_NORET
LLIL_NOT
LLIL_OR
LLIL_POP
LLIL_PUSH
LLIL_REG
LLIL_REG_PHI
LLIL_REG_SPLIT
LLIL_REG_SPLIT_DEST_SSA
LLIL_REG_SPLIT_SSA
LLIL_REG_SSA
LLIL_REG_SSA_PARTIAL
LLIL_REG_STACK_ABS_SSA
LLIL_REG_STACK_DEST_SSA
LLIL_REG_STACK_FREE_ABS_SSA
LLIL_REG_STACK_FREE_REG
LLIL_REG_STACK_FREE_REL
LLIL_REG_STACK_FREE_REL_SSA
LLIL_REG_STACK_PHI
LLIL_REG_STACK_POP
LLIL_REG_STACK_PUSH
LLIL_REG_STACK_REL
LLIL_REG_STACK_REL_SSA
LLIL_RET
LLIL_RLC
LLIL_ROL
LLIL_ROR
LLIL_ROUND_TO_INT
LLIL_RRC
LLIL_SBB
LLIL_SET_FLAG
LLIL_SET_FLAG_SSA
LLIL_SET_REG
LLIL_SET_REG_SPLIT
LLIL_SET_REG_SPLIT_SSA
LLIL_SET_REG_SSA
LLIL_SET_REG_SSA_PARTIAL
LLIL_SET_REG_STACK_ABS_SSA
LLIL_SET_REG_STACK_REL
LLIL_SET_REG_STACK_REL_SSA
LLIL_STORE
LLIL_STORE_SSA
LLIL_SUB
LLIL_SX
LLIL_SYSCALL
LLIL_SYSCALL_SSA
LLIL_TAILCALL
LLIL_TAILCALL_SSA
LLIL_TEST_BIT
LLIL_TRAP
LLIL_UNDEF
LLIL_UNIMPL
LLIL_UNIMPL_MEM
LLIL_XOR
LLIL_ZX
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.MediumLevelILOperation.html b/personal/api-docs/binaryninja.enums.MediumLevelILOperation.html new file mode 100644 index 0000000..5c1ae27 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.MediumLevelILOperation.html @@ -0,0 +1,730 @@ + + + + + + + + + + + binaryninja.enums.MediumLevelILOperation — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.MediumLevelILOperation

+
+
+class MediumLevelILOperation[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MLIL_ADC
MLIL_ADD
MLIL_ADDRESS_OF
MLIL_ADDRESS_OF_FIELD
MLIL_ADD_OVERFLOW
MLIL_AND
MLIL_ASR
MLIL_BOOL_TO_INT
MLIL_BP
MLIL_CALL
MLIL_CALL_OUTPUT
MLIL_CALL_OUTPUT_SSA
MLIL_CALL_PARAM
MLIL_CALL_PARAM_SSA
MLIL_CALL_SSA
MLIL_CALL_UNTYPED
MLIL_CALL_UNTYPED_SSA
MLIL_CEIL
MLIL_CMP_E
MLIL_CMP_NE
MLIL_CMP_SGE
MLIL_CMP_SGT
MLIL_CMP_SLE
MLIL_CMP_SLT
MLIL_CMP_UGE
MLIL_CMP_UGT
MLIL_CMP_ULE
MLIL_CMP_ULT
MLIL_CONST
MLIL_CONST_PTR
MLIL_DIVS
MLIL_DIVS_DP
MLIL_DIVU
MLIL_DIVU_DP
MLIL_EXTERN_PTR
MLIL_FABS
MLIL_FADD
MLIL_FCMP_E
MLIL_FCMP_GE
MLIL_FCMP_GT
MLIL_FCMP_LE
MLIL_FCMP_LT
MLIL_FCMP_NE
MLIL_FCMP_O
MLIL_FCMP_UO
MLIL_FDIV
MLIL_FLOAT_CONST
MLIL_FLOAT_CONV
MLIL_FLOAT_TO_INT
MLIL_FLOOR
MLIL_FMUL
MLIL_FNEG
MLIL_FREE_VAR_SLOT
MLIL_FREE_VAR_SLOT_SSA
MLIL_FSQRT
MLIL_FSUB
MLIL_FTRUNC
MLIL_GOTO
MLIL_IF
MLIL_IMPORT
MLIL_INTRINSIC
MLIL_INTRINSIC_SSA
MLIL_INT_TO_FLOAT
MLIL_JUMP
MLIL_JUMP_TO
MLIL_LOAD
MLIL_LOAD_SSA
MLIL_LOAD_STRUCT
MLIL_LOAD_STRUCT_SSA
MLIL_LOW_PART
MLIL_LSL
MLIL_LSR
MLIL_MEM_PHI
MLIL_MODS
MLIL_MODS_DP
MLIL_MODU
MLIL_MODU_DP
MLIL_MUL
MLIL_MULS_DP
MLIL_MULU_DP
MLIL_NEG
MLIL_NOP
MLIL_NORET
MLIL_NOT
MLIL_OR
MLIL_RET
MLIL_RET_HINT
MLIL_RLC
MLIL_ROL
MLIL_ROR
MLIL_ROUND_TO_INT
MLIL_RRC
MLIL_SBB
MLIL_SET_VAR
MLIL_SET_VAR_ALIASED
MLIL_SET_VAR_ALIASED_FIELD
MLIL_SET_VAR_FIELD
MLIL_SET_VAR_SPLIT
MLIL_SET_VAR_SPLIT_SSA
MLIL_SET_VAR_SSA
MLIL_SET_VAR_SSA_FIELD
MLIL_STORE
MLIL_STORE_SSA
MLIL_STORE_STRUCT
MLIL_STORE_STRUCT_SSA
MLIL_SUB
MLIL_SX
MLIL_SYSCALL
MLIL_SYSCALL_SSA
MLIL_SYSCALL_UNTYPED
MLIL_SYSCALL_UNTYPED_SSA
MLIL_TAILCALL
MLIL_TAILCALL_SSA
MLIL_TAILCALL_UNTYPED
MLIL_TAILCALL_UNTYPED_SSA
MLIL_TEST_BIT
MLIL_TRAP
MLIL_UNDEF
MLIL_UNIMPL
MLIL_UNIMPL_MEM
MLIL_VAR
MLIL_VAR_ALIASED
MLIL_VAR_ALIASED_FIELD
MLIL_VAR_FIELD
MLIL_VAR_PHI
MLIL_VAR_SPLIT
MLIL_VAR_SPLIT_SSA
MLIL_VAR_SSA
MLIL_VAR_SSA_FIELD
MLIL_XOR
MLIL_ZX
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.MemberAccess.html b/personal/api-docs/binaryninja.enums.MemberAccess.html new file mode 100644 index 0000000..7dc758b --- /dev/null +++ b/personal/api-docs/binaryninja.enums.MemberAccess.html @@ -0,0 +1,349 @@ + + + + + + + + + + + binaryninja.enums.MemberAccess — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.MemberAccess

+
+
+class MemberAccess[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + +
NoAccess
PrivateAccess
ProtectedAccess
PublicAccess
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.MemberScope.html b/personal/api-docs/binaryninja.enums.MemberScope.html new file mode 100644 index 0000000..16ce46f --- /dev/null +++ b/personal/api-docs/binaryninja.enums.MemberScope.html @@ -0,0 +1,352 @@ + + + + + + + + + + + binaryninja.enums.MemberScope — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.MemberScope

+
+
+class MemberScope[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + +
FriendScope
NoScope
StaticScope
ThunkScope
VirtualScope
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.MessageBoxButtonResult.html b/personal/api-docs/binaryninja.enums.MessageBoxButtonResult.html new file mode 100644 index 0000000..6b96d68 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.MessageBoxButtonResult.html @@ -0,0 +1,349 @@ + + + + + + + + + + + binaryninja.enums.MessageBoxButtonResult — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.MessageBoxButtonResult

+
+
+class MessageBoxButtonResult[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + +
CancelButton
NoButton
OKButton
YesButton
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.MessageBoxButtonSet.html b/personal/api-docs/binaryninja.enums.MessageBoxButtonSet.html new file mode 100644 index 0000000..00c7ff2 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.MessageBoxButtonSet.html @@ -0,0 +1,346 @@ + + + + + + + + + + + binaryninja.enums.MessageBoxButtonSet — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.MessageBoxButtonSet

+
+
+class MessageBoxButtonSet[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + +
OKButtonSet
YesNoButtonSet
YesNoCancelButtonSet
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.MessageBoxIcon.html b/personal/api-docs/binaryninja.enums.MessageBoxIcon.html new file mode 100644 index 0000000..2c39398 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.MessageBoxIcon.html @@ -0,0 +1,349 @@ + + + + + + + + + + + binaryninja.enums.MessageBoxIcon — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.MessageBoxIcon

+
+
+class MessageBoxIcon[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + +
ErrorIcon
InformationIcon
QuestionIcon
WarningIcon
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.MetadataType.html b/personal/api-docs/binaryninja.enums.MetadataType.html new file mode 100644 index 0000000..b44413d --- /dev/null +++ b/personal/api-docs/binaryninja.enums.MetadataType.html @@ -0,0 +1,364 @@ + + + + + + + + + + + binaryninja.enums.MetadataType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.MetadataType

+
+
+class MetadataType[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ArrayDataType
BooleanDataType
DoubleDataType
InvalidDataType
KeyValueDataType
RawDataType
SignedIntegerDataType
StringDataType
UnsignedIntegerDataType
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.ModificationStatus.html b/personal/api-docs/binaryninja.enums.ModificationStatus.html new file mode 100644 index 0000000..63256a0 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.ModificationStatus.html @@ -0,0 +1,346 @@ + + + + + + + + + + + binaryninja.enums.ModificationStatus — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.ModificationStatus

+
+
+class ModificationStatus[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + +
Changed
Inserted
Original
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.NameType.html b/personal/api-docs/binaryninja.enums.NameType.html new file mode 100644 index 0000000..9ad1e54 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.NameType.html @@ -0,0 +1,571 @@ + + + + + + + + + + + binaryninja.enums.NameType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.NameType

+
+
+class NameType[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ConstructorNameType
CopyConstructorClosureNameType
DefaultConstructorClosureNameType
DestructorNameType
EHVectorConstructorIteratorNameType
EHVectorDestructorIteratorNameType
EHVectorVBaseConstructorIteratorNameType
LocalStaticGuardNameType
LocalVFTableConstructorClosureNameType
LocalVFTableNameType
NoNameType
OperatorAndEqualNameType
OperatorArrayNameType
OperatorArrowNameType
OperatorArrowStarNameType
OperatorAssignNameType
OperatorBitAndNameType
OperatorBitOrNameType
OperatorCommaNameType
OperatorDecrementNameType
OperatorDeleteArrayNameType
OperatorDeleteNameType
OperatorDivideEqualNameType
OperatorDivideNameType
OperatorEqualNameType
OperatorGreaterThanEqualNameType
OperatorGreaterThanNameType
OperatorIncrementNameType
OperatorLeftShiftEqualNameType
OperatorLeftShiftNameType
OperatorLessThanEqualNameType
OperatorLessThanNameType
OperatorLogicalAndNameType
OperatorLogicalOrNameType
OperatorMinusEqualNameType
OperatorMinusNameType
OperatorModulusEqualNameType
OperatorModulusNameType
OperatorNewArrayNameType
OperatorNewNameType
OperatorNotEqualNameType
OperatorNotNameType
OperatorOrEqualNameType
OperatorParenthesesNameType
OperatorPlusEqualNameType
OperatorPlusNameType
OperatorReturnTypeNameType
OperatorRightShiftEqualNameType
OperatorRightShiftNameType
OperatorStarEqualNameType
OperatorStarNameType
OperatorTildeNameType
OperatorUnaryBitAndNameType
OperatorUnaryMinusNameType
OperatorUnaryPlusNameType
OperatorUnaryStarNameType
OperatorXorEqualNameType
OperatorXorNameType
PlacementDeleteClosureArrayNameType
PlacementDeleteClosureNameType
RttiBaseClassArray
RttiBaseClassDescriptor
RttiClassHeirarchyDescriptor
RttiCompleteObjectLocator
RttiTypeDescriptor
ScalarDeletingDestructorNameType
StringNameType
TypeofNameType
UDTReturningNameType
VBTableNameType
VBaseDestructorNameType
VCallNameType
VFTableNameType
VectorConstructorIteratorNameType
VectorDeletingDestructorNameType
VectorDestructorIteratorNameType
VectorVBaseConstructorIteratoreNameType
VirtualDisplacementMapNameType
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.NamedTypeReferenceClass.html b/personal/api-docs/binaryninja.enums.NamedTypeReferenceClass.html new file mode 100644 index 0000000..a40a5bf --- /dev/null +++ b/personal/api-docs/binaryninja.enums.NamedTypeReferenceClass.html @@ -0,0 +1,355 @@ + + + + + + + + + + + binaryninja.enums.NamedTypeReferenceClass — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.NamedTypeReferenceClass

+
+
+class NamedTypeReferenceClass[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + +
ClassNamedTypeClass
EnumNamedTypeClass
StructNamedTypeClass
TypedefNamedTypeClass
UnionNamedTypeClass
UnknownNamedTypeClass
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.PluginCommandType.html b/personal/api-docs/binaryninja.enums.PluginCommandType.html new file mode 100644 index 0000000..7059304 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.PluginCommandType.html @@ -0,0 +1,361 @@ + + + + + + + + + + + binaryninja.enums.PluginCommandType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.PluginCommandType

+
+
+class PluginCommandType[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +
AddressPluginCommand
DefaultPluginCommand
FunctionPluginCommand
LowLevelILFunctionPluginCommand
LowLevelILInstructionPluginCommand
MediumLevelILFunctionPluginCommand
MediumLevelILInstructionPluginCommand
RangePluginCommand
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.PluginLoadOrder.html b/personal/api-docs/binaryninja.enums.PluginLoadOrder.html new file mode 100644 index 0000000..ba56a12 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.PluginLoadOrder.html @@ -0,0 +1,346 @@ + + + + + + + + + + + binaryninja.enums.PluginLoadOrder — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.PluginLoadOrder

+
+
+class PluginLoadOrder[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + +
EarlyPluginLoadOrder
LatePluginLoadOrder
NormalPluginLoadOrder
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.PluginOrigin.html b/personal/api-docs/binaryninja.enums.PluginOrigin.html new file mode 100644 index 0000000..58a69ad --- /dev/null +++ b/personal/api-docs/binaryninja.enums.PluginOrigin.html @@ -0,0 +1,346 @@ + + + + + + + + + + + binaryninja.enums.PluginOrigin — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.PluginOrigin

+
+
+class PluginOrigin[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + +
CommunityPluginOrigin
OfficialPluginOrigin
OtherPluginOrigin
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.PluginType.html b/personal/api-docs/binaryninja.enums.PluginType.html new file mode 100644 index 0000000..e2101fd --- /dev/null +++ b/personal/api-docs/binaryninja.enums.PluginType.html @@ -0,0 +1,349 @@ + + + + + + + + + + + binaryninja.enums.PluginType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.PluginType

+
+
+class PluginType[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + +
ArchitecturePluginType
BinaryViewPluginType
CorePluginType
UiPluginType
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.PluginUpdateStatus.html b/personal/api-docs/binaryninja.enums.PluginUpdateStatus.html new file mode 100644 index 0000000..426df12 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.PluginUpdateStatus.html @@ -0,0 +1,343 @@ + + + + + + + + + + + binaryninja.enums.PluginUpdateStatus — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.PluginUpdateStatus

+
+
+class PluginUpdateStatus[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + +
UpToDatePluginStatus
UpdatesAvailablePluginStatus
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.PointerSuffix.html b/personal/api-docs/binaryninja.enums.PointerSuffix.html new file mode 100644 index 0000000..c1a3571 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.PointerSuffix.html @@ -0,0 +1,352 @@ + + + + + + + + + + + binaryninja.enums.PointerSuffix — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.PointerSuffix

+
+
+class PointerSuffix[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + +
LvalueSuffix
Ptr64Suffix
ReferenceSuffix
RestrictSuffix
UnalignedSuffix
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.ReferenceType.html b/personal/api-docs/binaryninja.enums.ReferenceType.html new file mode 100644 index 0000000..d558383 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.ReferenceType.html @@ -0,0 +1,349 @@ + + + + + + + + + + + binaryninja.enums.ReferenceType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.ReferenceType

+
+
+class ReferenceType[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + +
NoReference
PointerReferenceType
RValueReferenceType
ReferenceReferenceType
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.RegisterValueType.html b/personal/api-docs/binaryninja.enums.RegisterValueType.html new file mode 100644 index 0000000..5774a51 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.RegisterValueType.html @@ -0,0 +1,376 @@ + + + + + + + + + + + binaryninja.enums.RegisterValueType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.RegisterValueType

+
+
+class RegisterValueType[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ConstantPointerValue
ConstantValue
EntryValue
ExternalPointerValue
ImportedAddressValue
InSetOfValues
LookupTableValue
NotInSetOfValues
ReturnAddressValue
SignedRangeValue
StackFrameOffset
UndeterminedValue
UnsignedRangeValue
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.RelocationType.html b/personal/api-docs/binaryninja.enums.RelocationType.html new file mode 100644 index 0000000..3d31fce --- /dev/null +++ b/personal/api-docs/binaryninja.enums.RelocationType.html @@ -0,0 +1,352 @@ + + + + + + + + + + + binaryninja.enums.RelocationType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.RelocationType

+
+
+class RelocationType[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + +
ELFCopyRelocationType
ELFGlobalRelocationType
ELFJumpSlotRelocationType
IgnoredRelocation
StandardRelocationType
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.ReportType.html b/personal/api-docs/binaryninja.enums.ReportType.html new file mode 100644 index 0000000..1b7110e --- /dev/null +++ b/personal/api-docs/binaryninja.enums.ReportType.html @@ -0,0 +1,349 @@ + + + + + + + + + + + binaryninja.enums.ReportType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.ReportType

+
+
+class ReportType[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + +
FlowGraphReportType
HTMLReportType
MarkdownReportType
PlainTextReportType
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.ScriptingProviderExecuteResult.html b/personal/api-docs/binaryninja.enums.ScriptingProviderExecuteResult.html new file mode 100644 index 0000000..1858732 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.ScriptingProviderExecuteResult.html @@ -0,0 +1,346 @@ + + + + + + + + + + + binaryninja.enums.ScriptingProviderExecuteResult — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.ScriptingProviderExecuteResult

+
+
+class ScriptingProviderExecuteResult[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + +
IncompleteScriptInput
InvalidScriptInput
SuccessfulScriptExecution
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.ScriptingProviderInputReadyState.html b/personal/api-docs/binaryninja.enums.ScriptingProviderInputReadyState.html new file mode 100644 index 0000000..8f5c7e9 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.ScriptingProviderInputReadyState.html @@ -0,0 +1,346 @@ + + + + + + + + + + + binaryninja.enums.ScriptingProviderInputReadyState — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.ScriptingProviderInputReadyState

+
+
+class ScriptingProviderInputReadyState[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + +
NotReadyForInput
ReadyForScriptExecution
ReadyForScriptProgramInput
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.SectionSemantics.html b/personal/api-docs/binaryninja.enums.SectionSemantics.html new file mode 100644 index 0000000..31ab1d6 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.SectionSemantics.html @@ -0,0 +1,352 @@ + + + + + + + + + + + binaryninja.enums.SectionSemantics — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.SectionSemantics

+
+
+class SectionSemantics[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + +
DefaultSectionSemantics
ExternalSectionSemantics
ReadOnlyCodeSectionSemantics
ReadOnlyDataSectionSemantics
ReadWriteDataSectionSemantics
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.SegmentFlag.html b/personal/api-docs/binaryninja.enums.SegmentFlag.html new file mode 100644 index 0000000..1ab3742 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.SegmentFlag.html @@ -0,0 +1,358 @@ + + + + + + + + + + + binaryninja.enums.SegmentFlag — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.SegmentFlag

+
+
+class SegmentFlag[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + +
SegmentContainsCode
SegmentContainsData
SegmentDenyExecute
SegmentDenyWrite
SegmentExecutable
SegmentReadable
SegmentWritable
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.SettingsScope.html b/personal/api-docs/binaryninja.enums.SettingsScope.html new file mode 100644 index 0000000..caac66f --- /dev/null +++ b/personal/api-docs/binaryninja.enums.SettingsScope.html @@ -0,0 +1,355 @@ + + + + + + + + + + + binaryninja.enums.SettingsScope — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.SettingsScope

+
+
+class SettingsScope[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + +
SettingsAutoScope
SettingsContextScope
SettingsDefaultScope
SettingsInvalidScope
SettingsUserScope
SettingsWorkspaceScope
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.StringType.html b/personal/api-docs/binaryninja.enums.StringType.html new file mode 100644 index 0000000..8ae2adc --- /dev/null +++ b/personal/api-docs/binaryninja.enums.StringType.html @@ -0,0 +1,349 @@ + + + + + + + + + + + binaryninja.enums.StringType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.StringType

+
+
+class StringType[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + +
AsciiString
Utf16String
Utf32String
Utf8String
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.StructureType.html b/personal/api-docs/binaryninja.enums.StructureType.html new file mode 100644 index 0000000..62cba6f --- /dev/null +++ b/personal/api-docs/binaryninja.enums.StructureType.html @@ -0,0 +1,346 @@ + + + + + + + + + + + binaryninja.enums.StructureType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.StructureType

+
+
+class StructureType[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + +
ClassStructureType
StructStructureType
UnionStructureType
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.SymbolBinding.html b/personal/api-docs/binaryninja.enums.SymbolBinding.html new file mode 100644 index 0000000..5f19e36 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.SymbolBinding.html @@ -0,0 +1,349 @@ + + + + + + + + + + + binaryninja.enums.SymbolBinding — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.SymbolBinding

+
+
+class SymbolBinding[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + +
GlobalBinding
LocalBinding
NoBinding
WeakBinding
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.SymbolType.html b/personal/api-docs/binaryninja.enums.SymbolType.html new file mode 100644 index 0000000..52bb0db --- /dev/null +++ b/personal/api-docs/binaryninja.enums.SymbolType.html @@ -0,0 +1,355 @@ + + + + + + + + + + + binaryninja.enums.SymbolType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.SymbolType

+
+
+class SymbolType[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + +
DataSymbol
ExternalSymbol
FunctionSymbol
ImportAddressSymbol
ImportedDataSymbol
ImportedFunctionSymbol
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.TransformType.html b/personal/api-docs/binaryninja.enums.TransformType.html new file mode 100644 index 0000000..3b2dedc --- /dev/null +++ b/personal/api-docs/binaryninja.enums.TransformType.html @@ -0,0 +1,364 @@ + + + + + + + + + + + binaryninja.enums.TransformType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.TransformType

+
+
+class TransformType[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BinaryCodecTransform
BinaryEncodeTransform
DecodeTransform
EncryptTransform
HashTransform
InvertingTransform
TextCodecTransform
TextEncodeTransform
UnicodeCodecTransform
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.TypeClass.html b/personal/api-docs/binaryninja.enums.TypeClass.html new file mode 100644 index 0000000..11537d8 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.TypeClass.html @@ -0,0 +1,376 @@ + + + + + + + + + + + binaryninja.enums.TypeClass — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.TypeClass

+
+
+class TypeClass[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ArrayTypeClass
BoolTypeClass
EnumerationTypeClass
FloatTypeClass
FunctionTypeClass
IntegerTypeClass
NamedTypeReferenceClass
PointerTypeClass
StructureTypeClass
ValueTypeClass
VarArgsTypeClass
VoidTypeClass
WideCharTypeClass
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.UpdateResult.html b/personal/api-docs/binaryninja.enums.UpdateResult.html new file mode 100644 index 0000000..1c31bc8 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.UpdateResult.html @@ -0,0 +1,349 @@ + + + + + + + + + + + binaryninja.enums.UpdateResult — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.UpdateResult

+
+
+class UpdateResult[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + + + + +
AlreadyUpToDate
UpdateAvailable
UpdateFailed
UpdateSuccess
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.enums.VariableSourceType.html b/personal/api-docs/binaryninja.enums.VariableSourceType.html new file mode 100644 index 0000000..3273e28 --- /dev/null +++ b/personal/api-docs/binaryninja.enums.VariableSourceType.html @@ -0,0 +1,346 @@ + + + + + + + + + + + binaryninja.enums.VariableSourceType — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.enums.VariableSourceType

+
+
+class VariableSourceType[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Attributes

+ ++++ + + + + + + + + + + + +
FlagVariableSourceType
RegisterVariableSourceType
StackVariableSourceType
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.fileaccessor-module.html b/personal/api-docs/binaryninja.fileaccessor-module.html new file mode 100644 index 0000000..214c7a7 --- /dev/null +++ b/personal/api-docs/binaryninja.fileaccessor-module.html @@ -0,0 +1,303 @@ + + + + + + + + + + + fileaccessor module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

fileaccessor module

+ ++++ + + + + + + + + +
binaryninja.fileaccessor.CoreFileAccessor(…)
binaryninja.fileaccessor.FileAccessor()
+
+
+
+
+class CoreFileAccessor(accessor)[source]
+

Bases: binaryninja.fileaccessor.FileAccessor

+
+
+get_length()[source]
+
+ +
+
+read(offset, length)[source]
+
+ +
+
+write(offset, value)[source]
+
+ +
+ +
+
+class FileAccessor[source]
+

Bases: object

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.fileaccessor.CoreFileAccessor.html b/personal/api-docs/binaryninja.fileaccessor.CoreFileAccessor.html new file mode 100644 index 0000000..657d3c0 --- /dev/null +++ b/personal/api-docs/binaryninja.fileaccessor.CoreFileAccessor.html @@ -0,0 +1,295 @@ + + + + + + + + + + + binaryninja.fileaccessor.CoreFileAccessor — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.fileaccessor.CoreFileAccessor

+
+
+class CoreFileAccessor(accessor)[source]
+
+
+__init__(accessor)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + +
__init__(accessor)x.__init__(…) initializes x; see help(type(x)) for signature
get_length()
read(offset, length)
write(offset, value)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.fileaccessor.FileAccessor.html b/personal/api-docs/binaryninja.fileaccessor.FileAccessor.html new file mode 100644 index 0000000..6270733 --- /dev/null +++ b/personal/api-docs/binaryninja.fileaccessor.FileAccessor.html @@ -0,0 +1,286 @@ + + + + + + + + + + + binaryninja.fileaccessor.FileAccessor — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.fileaccessor.FileAccessor

+
+
+class FileAccessor[source]
+
+
+__init__()[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__()x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.filemetadata-module.html b/personal/api-docs/binaryninja.filemetadata-module.html new file mode 100644 index 0000000..9f9b1e9 --- /dev/null +++ b/personal/api-docs/binaryninja.filemetadata-module.html @@ -0,0 +1,521 @@ + + + + + + + + + + + filemetadata module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

filemetadata module

+ ++++ + + + + + + + + +
binaryninja.filemetadata.FileMetadata([…])class FileMetadata represents the file being analyzed by Binary Ninja.
binaryninja.filemetadata.NavigationHandler
+
+
+
+
+class FileMetadata(filename=None, handle=None)[source]
+

Bases: object

+

class FileMetadata represents the file being analyzed by Binary Ninja. It is responsible for opening, +closing, creating the database (.bndb) files, and is used to keep track of undoable actions.

+
+
+begin_undo_actions()[source]
+

begin_undo_actions start recording actions taken so the can be undone at some point.

+ +++ + + + + + +
Return type:

None

+
Example:
>>> bv.get_disassembly(0x100012f1)
+'xor     eax, eax'
+>>> bv.begin_undo_actions()
+>>> bv.convert_to_nop(0x100012f1)
+True
+>>> bv.commit_undo_actions()
+>>> bv.get_disassembly(0x100012f1)
+'nop'
+>>> bv.undo()
+>>> bv.get_disassembly(0x100012f1)
+'xor     eax, eax'
+>>>
+
+
+
+
+ +
+
+close()[source]
+

Closes the underlying file handle. It is recommended that this is done in a +finally clause to avoid handle leaks.

+
+ +
+
+commit_undo_actions()[source]
+

commit_undo_actions commit the actions taken since the last commit to the undo database.

+ +++ + + + + + +
Return type:

None

+
Example:
>>> bv.get_disassembly(0x100012f1)
+'xor     eax, eax'
+>>> bv.begin_undo_actions()
+>>> bv.convert_to_nop(0x100012f1)
+True
+>>> bv.commit_undo_actions()
+>>> bv.get_disassembly(0x100012f1)
+'nop'
+>>> bv.undo()
+>>> bv.get_disassembly(0x100012f1)
+'xor     eax, eax'
+>>>
+
+
+
+
+ +
+
+create_database(filename, progress_func=None)[source]
+
+ +
+
+get_view_of_type(name)[source]
+
+ +
+
+navigate(view, offset)[source]
+
+ +
+
+open_existing_database(filename, progress_func=None)[source]
+
+ +
+
+redo()[source]
+

redo redo the last commited action in the undo database.

+ +++ + + + + + +
Return type:

None

+
Example:
>>> bv.get_disassembly(0x100012f1)
+'xor     eax, eax'
+>>> bv.begin_undo_actions()
+>>> bv.convert_to_nop(0x100012f1)
+True
+>>> bv.commit_undo_actions()
+>>> bv.get_disassembly(0x100012f1)
+'nop'
+>>> bv.undo()
+>>> bv.get_disassembly(0x100012f1)
+'xor     eax, eax'
+>>> bv.redo()
+>>> bv.get_disassembly(0x100012f1)
+'nop'
+>>>
+
+
+
+
+ +
+
+save_auto_snapshot(progress_func=None)[source]
+
+ +
+
+classmethod set_default_session_data(name, value)[source]
+
+ +
+
+undo()[source]
+

undo undo the last commited action in the undo database.

+ +++ + + + + + +
Return type:

None

+
Example:
>>> bv.get_disassembly(0x100012f1)
+'xor     eax, eax'
+>>> bv.begin_undo_actions()
+>>> bv.convert_to_nop(0x100012f1)
+True
+>>> bv.commit_undo_actions()
+>>> bv.get_disassembly(0x100012f1)
+'nop'
+>>> bv.undo()
+>>> bv.get_disassembly(0x100012f1)
+'xor     eax, eax'
+>>> bv.redo()
+>>> bv.get_disassembly(0x100012f1)
+'nop'
+>>>
+
+
+
+
+ +
+
+analysis_changed
+

Boolean result of whether the auto-analysis results have changed (read-only)

+
+ +
+
+filename
+

The name of the open bndb or binary filename (read/write)

+
+ +
+
+has_database
+

Whether the FileMetadata is backed by a database (read-only)

+
+ +
+
+modified
+

Boolean result of whether the file is modified (Inverse of ‘saved’ property) (read/write)

+
+ +
+
+navigation
+
+ +
+
+offset
+

The current offset into the file (read/write)

+
+ +
+
+original_filename
+

The original name of the binary opened if a bndb, otherwise reads or sets the current filename (read/write)

+
+ +
+
+raw
+

Gets the “Raw” BinaryView of the file

+
+ +
+
+saved
+

Boolean result of whether the file has been saved (Inverse of ‘modified’ property) (read/write)

+
+ +
+
+session_data
+

Dictionary object where plugins can store arbitrary data associated with the file

+
+ +
+
+view
+
+ +
+ +
+
+class NavigationHandler[source]
+

Bases: object

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.filemetadata.FileMetadata.html b/personal/api-docs/binaryninja.filemetadata.FileMetadata.html new file mode 100644 index 0000000..f13eaff --- /dev/null +++ b/personal/api-docs/binaryninja.filemetadata.FileMetadata.html @@ -0,0 +1,375 @@ + + + + + + + + + + + binaryninja.filemetadata.FileMetadata — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.filemetadata.FileMetadata

+
+
+class FileMetadata(filename=None, handle=None)[source]
+

class FileMetadata represents the file being analyzed by Binary Ninja. It is responsible for opening, +closing, creating the database (.bndb) files, and is used to keep track of undoable actions.

+
+
+__init__(filename=None, handle=None)[source]
+

Instantiates a new FileMetadata class.

+ +++ + + + +
Parameters:
    +
  • filename – The string path to the file to be opened. Defaults to None.
  • +
  • handle – A handle to the underlying C FileMetadata object. Defaults to None.
  • +
+
+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__([filename, handle])Instantiates a new FileMetadata class.
begin_undo_actions()begin_undo_actions start recording actions taken so the can be undone at some point.
close()Closes the underlying file handle.
commit_undo_actions()commit_undo_actions commit the actions taken since the last commit to the undo database.
create_database(filename[, progress_func])
get_view_of_type(name)
navigate(view, offset)
open_existing_database(filename[, progress_func])
redo()redo redo the last commited action in the undo database.
save_auto_snapshot([progress_func])
set_default_session_data(name, value)
undo()undo undo the last commited action in the undo database.
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
analysis_changedBoolean result of whether the auto-analysis results have changed (read-only)
filenameThe name of the open bndb or binary filename (read/write)
has_databaseWhether the FileMetadata is backed by a database (read-only)
modifiedBoolean result of whether the file is modified (Inverse of ‘saved’ property) (read/write)
navigation
offsetThe current offset into the file (read/write)
original_filenameThe original name of the binary opened if a bndb, otherwise reads or sets the current filename (read/write)
rawGets the “Raw” BinaryView of the file
savedBoolean result of whether the file has been saved (Inverse of ‘modified’ property) (read/write)
session_dataDictionary object where plugins can store arbitrary data associated with the file
view
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.filemetadata.NavigationHandler.html b/personal/api-docs/binaryninja.filemetadata.NavigationHandler.html new file mode 100644 index 0000000..4cf546b --- /dev/null +++ b/personal/api-docs/binaryninja.filemetadata.NavigationHandler.html @@ -0,0 +1,274 @@ + + + + + + + + + + + binaryninja.filemetadata.NavigationHandler — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.filemetadata.NavigationHandler

+
+
+class NavigationHandler[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.flowgraph-module.html b/personal/api-docs/binaryninja.flowgraph-module.html new file mode 100644 index 0000000..20d1b9a --- /dev/null +++ b/personal/api-docs/binaryninja.flowgraph-module.html @@ -0,0 +1,647 @@ + + + + + + + + + + + flowgraph module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

flowgraph module

+ ++++ + + + + + + + + + + + + + + + + + + + + +
binaryninja.flowgraph.CoreFlowGraph(handle)
binaryninja.flowgraph.FlowGraph([handle])class FlowGraph implements a directed flow graph to be shown in the UI.
binaryninja.flowgraph.FlowGraphEdge(…)
binaryninja.flowgraph.FlowGraphLayoutRequest(graph)
binaryninja.flowgraph.FlowGraphNode([graph, …])
binaryninja.flowgraph.range(*args)A Python2 and Python3 Compatible Range Generator
+
+
+
+
+class CoreFlowGraph(handle)[source]
+

Bases: binaryninja.flowgraph.FlowGraph

+
+
+update()[source]
+

update can be overridden by subclasses to allow a graph to be updated after it has been +presented in the UI. This will automatically occur if the function referenced by the function +property has been updated.

+

Return a new FlowGraph object with the new information if updates are desired. If the graph +does not need updating, None can be returned to leave the graph in its current state.

+ +++ + + + + + +
Returns:Updated graph, or None
Return type:FlowGraph
+
+ +
+ +
+
+class FlowGraph(handle=None)[source]
+

Bases: object

+

class FlowGraph implements a directed flow graph to be shown in the UI. This class allows plugins to +create custom flow graphs and render them in the UI using the flow graph report API.

+

An example of creating a flow graph and presenting it in the UI:

+
>>> graph = FlowGraph()
+>>> node_a = FlowGraphNode(graph)
+>>> node_a.lines = ["Node A"]
+>>> node_b = FlowGraphNode(graph)
+>>> node_b.lines = ["Node B"]
+>>> node_c = FlowGraphNode(graph)
+>>> node_c.lines = ["Node C"]
+>>> graph.append(node_a)
+0
+>>> graph.append(node_b)
+1
+>>> graph.append(node_c)
+2
+>>> node_a.add_outgoing_edge(BranchType.UnconditionalBranch, node_b)
+>>> node_a.add_outgoing_edge(BranchType.UnconditionalBranch, node_c)
+>>> show_graph_report("Custom Graph", graph)
+
+
+
+

Note

+

In the current implementation, only graphs that have a single start node where all other nodes are reachable from outgoing edges can be rendered correctly. This describes the natural limitations of a control flow graph, which is what the rendering logic was designed for. Graphs that have nodes that are only reachable from incoming edges, or graphs that have disjoint subgraphs will not render correctly. This will be fixed in a future version.

+
+
+
+append(node)[source]
+

append adds a node to a flow graph.

+ +++ + + + + + + + +
Parameters:node (FlowGraphNode) – Node to add
Returns:Index of node
Return type:int
+
+ +
+
+complete_layout()[source]
+

complete_layout can be overridden by subclasses and is called when a graph layout is completed.

+
+ +
+
+finish_prepare_for_layout()[source]
+

finish_prepare_for_layout signals that preparations for rendering a graph are complete. +This method should only be called by a prepare_for_layout reimplementation.

+
+ +
+
+get_nodes_in_region(left, top, right, bottom)[source]
+
+ +
+
+layout(callback=None)[source]
+

layout starts rendering a graph for display. Once a layout is complete, each node will contain +coordinates and extents that can be used to render a graph with minimum additional computation. +This function does not wait for the graph to be ready to display, but a callback can be provided +to signal when the graph is ready.

+ +++ + + + + + + + +
Parameters:callback (callable()) – Function to be called when the graph is ready to display
Returns:Pending flow graph layout request object
Return type:FlowGraphLayoutRequest
+
+ +
+
+layout_and_wait()[source]
+

layout_and_wait starts rendering a graph for display, and waits for the graph to be ready to +display. After this function returns, each node will contain coordinates and extents that can be +used to render a graph with minimum additional computation.

+

Do not use this API on the UI thread (use layout with a callback instead).

+
+ +
+
+populate_nodes()[source]
+

prepare_for_layout can be overridden by subclasses to create nodes in a graph when a flow +graph needs to be rendered. This will happen on a worker thread and will not block the UI.

+
+ +
+
+prepare_for_layout()[source]
+

prepare_for_layout can be overridden by subclasses to handling preparations that must take +place before a flow graph is rendered, such as waiting for a function to finish analysis. If +this function is overridden, the finish_prepare_for_layout method must be called once +preparations are completed.

+
+ +
+
+show(title)[source]
+

show displays the graph in a new tab in the UI.

+ +++ + + + +
Parameters:title (str) – Title to show in the new tab
+
+ +
+
+update()[source]
+

update can be overridden by subclasses to allow a graph to be updated after it has been +presented in the UI. This will automatically occur if the function referenced by the function +property has been updated.

+

Return a new FlowGraph object with the new information if updates are desired. If the graph +does not need updating, None can be returned to leave the graph in its current state.

+ +++ + + + + + +
Returns:Updated graph, or None
Return type:FlowGraph
+
+ +
+
+complete
+

Whether flow graph layout is complete (read-only)

+
+ +
+
+function
+

Function for a flow graph

+
+ +
+
+has_nodes
+

Whether the flow graph has at least one node (read-only)

+
+ +
+
+height
+

Flow graph height (read-only)

+
+ +
+
+horizontal_block_margin
+
+ +
+
+il_function
+
+ +
+
+is_il
+
+ +
+
+is_low_level_il
+
+ +
+
+is_medium_level_il
+
+ +
+
+nodes
+

List of nodes in graph (read-only)

+
+ +
+
+vertical_block_margin
+
+ +
+
+width
+

Flow graph width (read-only)

+
+ +
+ +
+
+class FlowGraphEdge(branch_type, source, target, points, back_edge)[source]
+

Bases: object

+
+ +
+
+class FlowGraphLayoutRequest(graph, callback=None)[source]
+

Bases: object

+
+
+abort()[source]
+
+ +
+
+complete
+

Whether flow graph layout is complete (read-only)

+
+ +
+
+graph
+

Flow graph that is being processed (read-only)

+
+ +
+ +
+
+class FlowGraphNode(graph=None, handle=None)[source]
+

Bases: object

+
+
+add_outgoing_edge(edge_type, target)[source]
+

add_outgoing_edge connects two flow graph nodes with an edge.

+ +++ + + + +
Parameters: +
+
+ +
+
+basic_block
+

Basic block associated with this part of the flow graph

+
+ +
+
+height
+

Flow graph block height (read-only)

+
+ +
+
+highlight
+

Gets or sets the highlight color for the node

+ +++ + + + +
Example:
>>> g = FlowGraph()
+>>> node = FlowGraphNode(g)
+>>> node.highlight = HighlightStandardColor.BlueHighlightColor
+>>> node.highlight
+<color: blue>
+
+
+
+
+ +
+
+lines
+

Flow graph block list of text lines

+
+ +
+
+outgoing_edges
+

Flow graph block list of outgoing edges (read-only)

+
+ +
+
+width
+

Flow graph block width (read-only)

+
+ +
+
+x
+

Flow graph block X (read-only)

+
+ +
+
+y
+

Flow graph block Y (read-only)

+
+ +
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.flowgraph.CoreFlowGraph.html b/personal/api-docs/binaryninja.flowgraph.CoreFlowGraph.html new file mode 100644 index 0000000..02e75c8 --- /dev/null +++ b/personal/api-docs/binaryninja.flowgraph.CoreFlowGraph.html @@ -0,0 +1,365 @@ + + + + + + + + + + + binaryninja.flowgraph.CoreFlowGraph — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.flowgraph.CoreFlowGraph

+
+
+class CoreFlowGraph(handle)[source]
+
+
+__init__(handle)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__(handle)x.__init__(…) initializes x; see help(type(x)) for signature
append(node)append adds a node to a flow graph.
complete_layout()complete_layout can be overridden by subclasses and is called when a graph layout is completed.
finish_prepare_for_layout()finish_prepare_for_layout signals that preparations for rendering a graph are complete.
get_nodes_in_region(left, top, right, bottom)
layout([callback])layout starts rendering a graph for display.
layout_and_wait()layout_and_wait starts rendering a graph for display, and waits for the graph to be ready to display.
populate_nodes()prepare_for_layout can be overridden by subclasses to create nodes in a graph when a flow graph needs to be rendered.
prepare_for_layout()prepare_for_layout can be overridden by subclasses to handling preparations that must take place before a flow graph is rendered, such as waiting for a function to finish analysis.
show(title)show displays the graph in a new tab in the UI.
update()update can be overridden by subclasses to allow a graph to be updated after it has been presented in the UI.
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
completeWhether flow graph layout is complete (read-only)
functionFunction for a flow graph
has_nodesWhether the flow graph has at least one node (read-only)
heightFlow graph height (read-only)
horizontal_block_margin
il_function
is_il
is_low_level_il
is_medium_level_il
nodesList of nodes in graph (read-only)
vertical_block_margin
widthFlow graph width (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.flowgraph.FlowGraph.html b/personal/api-docs/binaryninja.flowgraph.FlowGraph.html new file mode 100644 index 0000000..09284c9 --- /dev/null +++ b/personal/api-docs/binaryninja.flowgraph.FlowGraph.html @@ -0,0 +1,390 @@ + + + + + + + + + + + binaryninja.flowgraph.FlowGraph — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.flowgraph.FlowGraph

+
+
+class FlowGraph(handle=None)[source]
+

class FlowGraph implements a directed flow graph to be shown in the UI. This class allows plugins to +create custom flow graphs and render them in the UI using the flow graph report API.

+

An example of creating a flow graph and presenting it in the UI:

+
>>> graph = FlowGraph()
+>>> node_a = FlowGraphNode(graph)
+>>> node_a.lines = ["Node A"]
+>>> node_b = FlowGraphNode(graph)
+>>> node_b.lines = ["Node B"]
+>>> node_c = FlowGraphNode(graph)
+>>> node_c.lines = ["Node C"]
+>>> graph.append(node_a)
+0
+>>> graph.append(node_b)
+1
+>>> graph.append(node_c)
+2
+>>> node_a.add_outgoing_edge(BranchType.UnconditionalBranch, node_b)
+>>> node_a.add_outgoing_edge(BranchType.UnconditionalBranch, node_c)
+>>> show_graph_report("Custom Graph", graph)
+
+
+
+

Note

+

In the current implementation, only graphs that have a single start node where all other nodes are reachable from outgoing edges can be rendered correctly. This describes the natural limitations of a control flow graph, which is what the rendering logic was designed for. Graphs that have nodes that are only reachable from incoming edges, or graphs that have disjoint subgraphs will not render correctly. This will be fixed in a future version.

+
+
+
+__init__(handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__([handle])x.__init__(…) initializes x; see help(type(x)) for signature
append(node)append adds a node to a flow graph.
complete_layout()complete_layout can be overridden by subclasses and is called when a graph layout is completed.
finish_prepare_for_layout()finish_prepare_for_layout signals that preparations for rendering a graph are complete.
get_nodes_in_region(left, top, right, bottom)
layout([callback])layout starts rendering a graph for display.
layout_and_wait()layout_and_wait starts rendering a graph for display, and waits for the graph to be ready to display.
populate_nodes()prepare_for_layout can be overridden by subclasses to create nodes in a graph when a flow graph needs to be rendered.
prepare_for_layout()prepare_for_layout can be overridden by subclasses to handling preparations that must take place before a flow graph is rendered, such as waiting for a function to finish analysis.
show(title)show displays the graph in a new tab in the UI.
update()update can be overridden by subclasses to allow a graph to be updated after it has been presented in the UI.
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
completeWhether flow graph layout is complete (read-only)
functionFunction for a flow graph
has_nodesWhether the flow graph has at least one node (read-only)
heightFlow graph height (read-only)
horizontal_block_margin
il_function
is_il
is_low_level_il
is_medium_level_il
nodesList of nodes in graph (read-only)
vertical_block_margin
widthFlow graph width (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.flowgraph.FlowGraphEdge.html b/personal/api-docs/binaryninja.flowgraph.FlowGraphEdge.html new file mode 100644 index 0000000..8ccd44e --- /dev/null +++ b/personal/api-docs/binaryninja.flowgraph.FlowGraphEdge.html @@ -0,0 +1,290 @@ + + + + + + + + + + + binaryninja.flowgraph.FlowGraphEdge — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.flowgraph.FlowGraphEdge

+
+
+class FlowGraphEdge(branch_type, source, target, points, back_edge)[source]
+
+
+__init__(branch_type, source, target, points, back_edge)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(branch_type, source, target, …)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.flowgraph.FlowGraphLayoutRequest.html b/personal/api-docs/binaryninja.flowgraph.FlowGraphLayoutRequest.html new file mode 100644 index 0000000..383dbfb --- /dev/null +++ b/personal/api-docs/binaryninja.flowgraph.FlowGraphLayoutRequest.html @@ -0,0 +1,308 @@ + + + + + + + + + + + binaryninja.flowgraph.FlowGraphLayoutRequest — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.flowgraph.FlowGraphLayoutRequest

+
+
+class FlowGraphLayoutRequest(graph, callback=None)[source]
+
+
+__init__(graph, callback=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + +
__init__(graph[, callback])x.__init__(…) initializes x; see help(type(x)) for signature
abort()
+

Attributes

+ ++++ + + + + + + + + +
completeWhether flow graph layout is complete (read-only)
graphFlow graph that is being processed (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.flowgraph.FlowGraphNode.html b/personal/api-docs/binaryninja.flowgraph.FlowGraphNode.html new file mode 100644 index 0000000..b502597 --- /dev/null +++ b/personal/api-docs/binaryninja.flowgraph.FlowGraphNode.html @@ -0,0 +1,326 @@ + + + + + + + + + + + binaryninja.flowgraph.FlowGraphNode — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.flowgraph.FlowGraphNode

+
+
+class FlowGraphNode(graph=None, handle=None)[source]
+
+
+__init__(graph=None, handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + +
__init__([graph, handle])x.__init__(…) initializes x; see help(type(x)) for signature
add_outgoing_edge(edge_type, target)add_outgoing_edge connects two flow graph nodes with an edge.
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +
basic_blockBasic block associated with this part of the flow graph
heightFlow graph block height (read-only)
highlightGets or sets the highlight color for the node
linesFlow graph block list of text lines
outgoing_edgesFlow graph block list of outgoing edges (read-only)
widthFlow graph block width (read-only)
xFlow graph block X (read-only)
yFlow graph block Y (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.flowgraph.range.html b/personal/api-docs/binaryninja.flowgraph.range.html new file mode 100644 index 0000000..f85fef1 --- /dev/null +++ b/personal/api-docs/binaryninja.flowgraph.range.html @@ -0,0 +1,273 @@ + + + + + + + + + + + binaryninja.flowgraph.range — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.flowgraph.range

+
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function-module.html b/personal/api-docs/binaryninja.function-module.html new file mode 100644 index 0000000..b41c96b --- /dev/null +++ b/personal/api-docs/binaryninja.function-module.html @@ -0,0 +1,1588 @@ + + + + + + + + + + + function module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

function module

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
binaryninja.function.AdvancedFunctionAnalysisDataRequestor([func])
binaryninja.function.ConstantReference(val, …)
binaryninja.function.DisassemblySettings([…])
binaryninja.function.DisassemblyTextLine(tokens)
binaryninja.function.DisassemblyTextRenderer([…])
binaryninja.function.Function([view, handle])
binaryninja.function.IndirectBranchInfo(…)
binaryninja.function.InstructionBranch(…)
binaryninja.function.InstructionInfo()
binaryninja.function.InstructionTextToken(…)class InstructionTextToken is used to tell the core about the various components in the disassembly views.
binaryninja.function.IntrinsicInfo(inputs, …)
binaryninja.function.IntrinsicInput(type_obj)
binaryninja.function.LookupTableEntry(…)
binaryninja.function.ParameterVariables(var_list)
binaryninja.function.PossibleValueSet(arch, …)
binaryninja.function.RegisterInfo(…[, …])
binaryninja.function.RegisterStackInfo(…)
binaryninja.function.RegisterValue([arch, …])
binaryninja.function.StackVariableReference(…)
binaryninja.function.ValueRange(start, end, step)
binaryninja.function.Variable(func, …[, …])
binaryninja.function.range(*args)A Python2 and Python3 Compatible Range Generator
+
+
+
+
+class AdvancedFunctionAnalysisDataRequestor(func=None)[source]
+

Bases: object

+
+
+close()[source]
+
+ +
+
+function
+
+ +
+ +
+
+class ConstantReference(val, size, ptr, intermediate)[source]
+

Bases: object

+
+ +
+
+class DisassemblySettings(handle=None)[source]
+

Bases: object

+
+
+is_option_set(option)[source]
+
+ +
+
+set_option(option, state=True)[source]
+
+ +
+
+max_symbol_width
+
+ +
+
+width
+
+ +
+ +
+
+class DisassemblyTextLine(tokens, address=None, il_instr=None, color=None)[source]
+

Bases: object

+
+ +
+
+class DisassemblyTextRenderer(func=None, settings=None, handle=None)[source]
+

Bases: object

+
+
+add_integer_token(tokens, int_token, addr, arch=None)[source]
+
+ +
+
+add_stack_var_reference_tokens(tokens, ref)[source]
+
+ +
+
+add_symbol_token(tokens, addr, size, operand=None)[source]
+
+ +
+
+get_disassembly_text(addr)[source]
+
+ +
+
+get_instruction_annotations(addr)[source]
+
+ +
+
+get_instruction_text(addr)[source]
+
+ +
+
+classmethod is_integer_token(token)[source]
+
+ +
+
+reset_deduplicated_comments()[source]
+
+ +
+
+wrap_comment(lines, cur_line, comment, has_auto_annotations, leading_spaces=' ')[source]
+
+ +
+
+arch
+
+ +
+
+basic_block
+
+ +
+
+function
+
+ +
+
+has_data_flow
+
+ +
+
+il
+
+ +
+
+il_function
+
+ +
+
+settings
+
+ +
+ +
+
+class Function(view=None, handle=None)[source]
+

Bases: object

+
+
+apply_auto_discovered_type(func_type)[source]
+
+ +
+
+apply_imported_types(sym)[source]
+
+ +
+
+create_auto_stack_var(offset, var_type, name)[source]
+
+ +
+
+create_auto_var(var, var_type, name, ignore_disjoint_uses=False)[source]
+
+ +
+
+create_graph(graph_type=<FunctionGraphType.NormalFunctionGraph: 0>, settings=None)[source]
+
+ +
+
+create_user_stack_var(offset, var_type, name)[source]
+
+ +
+
+create_user_var(var, var_type, name, ignore_disjoint_uses=False)[source]
+
+ +
+
+delete_auto_stack_var(offset)[source]
+
+ +
+
+delete_auto_var(var)[source]
+
+ +
+
+delete_user_stack_var(offset)[source]
+
+ +
+
+delete_user_var(var)[source]
+
+ +
+
+get_basic_block_at(addr, arch=None)[source]
+

get_basic_block_at returns the BasicBlock of the optionally specified Architecture arch at the given +address addr.

+ +++ + + + + + +
Parameters:
    +
  • addr (int) – Address of the BasicBlock to retrieve.
  • +
  • arch (Architecture) – (optional) Architecture of the basic block if different from the Function’s self.arch
  • +
+
Example:
>>> current_function.get_basic_block_at(current_function.start)
+<block: x86_64@0x100000f30-0x100000f50>
+
+
+
+
+ +
+
+get_block_annotations(addr, arch=None)[source]
+
+ +
+
+get_call_reg_stack_adjustment(addr, arch=None)[source]
+
+ +
+
+get_call_reg_stack_adjustment_for_reg_stack(addr, reg_stack, arch=None)[source]
+
+ +
+
+get_call_stack_adjustment(addr, arch=None)[source]
+
+ +
+
+get_comment_at(addr)[source]
+
+ +
+
+get_constants_referenced_by(addr, arch=None)[source]
+
+ +
+
+get_flags_read_by_lifted_il_instruction(i)[source]
+
+ +
+
+get_flags_written_by_lifted_il_instruction(i)[source]
+
+ +
+
+get_indirect_branches_at(addr, arch=None)[source]
+
+ +
+
+get_instr_highlight(addr, arch=None)[source]
+
+++ + + + +
Example:
>>> current_function.set_user_instr_highlight(here, highlight.HighlightColor(red=0xff, blue=0xff, green=0))
+>>> current_function.get_instr_highlight(here)
+<color: #ff00ff>
+
+
+
+
+ +
+
+get_int_display_type(instr_addr, value, operand, arch=None)[source]
+
+ +
+
+get_lifted_il_at(addr, arch=None)[source]
+
+ +
+
+get_lifted_il_flag_definitions_for_use(i, flag)[source]
+
+ +
+
+get_lifted_il_flag_uses_for_definition(i, flag)[source]
+
+ +
+
+get_low_level_il_at(addr, arch=None)[source]
+

get_low_level_il_at gets the LowLevelILInstruction corresponding to the given virtual address

+ +++ + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address of the function to be queried
  • +
  • arch (Architecture) – (optional) Architecture for the given function
  • +
+
Return type:

LowLevelILInstruction

+
Example:
>>> func = bv.functions[0]
+>>> func.get_low_level_il_at(func.start)
+<il: push(rbp)>
+
+
+
+
+ +
+
+get_low_level_il_exits_at(addr, arch=None)[source]
+
+ +
+
+get_parameter_at(addr, func_type, i, arch=None)[source]
+
+ +
+
+get_parameter_at_low_level_il_instruction(instr, func_type, i)[source]
+
+ +
+
+get_reg_value_after(addr, reg, arch=None)[source]
+

get_reg_value_after gets the value instruction address corresponding to the given virtual address

+ +++ + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address of the instruction to query
  • +
  • reg (str) – string value of native register to query
  • +
  • arch (Architecture) – (optional) Architecture for the given function
  • +
+
Return type:

binaryninja.function.RegisterValue

+
Example:
>>> func.get_reg_value_after(0x400dbe, 'rdi')
+<undetermined>
+
+
+
+
+ +
+
+get_reg_value_at(addr, reg, arch=None)[source]
+

get_reg_value_at gets the value the provided string register address corresponding to the given virtual address

+ +++ + + + + + + + +
Parameters:
    +
  • addr (int) – virtual address of the instruction to query
  • +
  • reg (str) – string value of native register to query
  • +
  • arch (Architecture) – (optional) Architecture for the given function
  • +
+
Return type:

binaryninja.function.RegisterValue

+
Example:
>>> func.get_reg_value_at(0x400dbe, 'rdi')
+<const 0x2>
+
+
+
+
+ +
+
+get_reg_value_at_exit(reg)[source]
+
+ +
+
+get_regs_read_by(addr, arch=None)[source]
+
+ +
+
+get_regs_written_by(addr, arch=None)[source]
+
+ +
+
+get_stack_contents_after(addr, offset, size, arch=None)[source]
+
+ +
+
+get_stack_contents_at(addr, offset, size, arch=None)[source]
+

get_stack_contents_at returns the RegisterValue for the item on the stack in the current function at the +given virtual address addr, stack offset offset and size of size. Optionally specifying the architecture.

+ +++ + + + + + +
Parameters:
    +
  • addr (int) – virtual address of the instruction to query
  • +
  • offset (int) – stack offset base of stack
  • +
  • size (int) – size of memory to query
  • +
  • arch (Architecture) – (optional) Architecture for the given function
  • +
+
Return type:

binaryninja.function.RegisterValue

+
+
+

Note

+

Stack base is zero on entry into the function unless the architecture places the return address on the

+
+

stack as in (x86/x86_64) where the stack base will start at address_size

+ +++ + + + +
Example:
>>> func.get_stack_contents_at(0x400fad, -16, 4)
+<range: 0x8 to 0xffffffff>
+
+
+
+
+ +
+
+get_stack_var_at_frame_offset(offset, addr, arch=None)[source]
+
+ +
+
+get_stack_vars_referenced_by(addr, arch=None)[source]
+
+ +
+
+get_type_tokens(settings=None)[source]
+
+ +
+
+is_call_instruction(addr, arch=None)[source]
+
+ +
+
+mark_recent_use()[source]
+
+ +
+
+reanalyze()[source]
+

reanalyze causes this functions to be reanalyzed. This function does not wait for the analysis to finish.

+ +++ + + + +
Return type:None
+
+ +
+
+release_advanced_analysis_data()[source]
+
+ +
+
+request_advanced_analysis_data()[source]
+
+ +
+
+request_debug_report(name)[source]
+
+ +
+
+set_auto_call_reg_stack_adjustment(addr, adjust, arch=None)[source]
+
+ +
+
+set_auto_call_reg_stack_adjustment_for_reg_stack(addr, reg_stack, adjust, arch=None)[source]
+
+ +
+
+set_auto_call_stack_adjustment(addr, adjust, arch=None)[source]
+
+ +
+
+set_auto_calling_convention(value)[source]
+
+ +
+
+set_auto_can_return(value)[source]
+
+ +
+
+set_auto_clobbered_regs(value)[source]
+
+ +
+
+set_auto_has_variable_arguments(value)[source]
+
+ +
+
+set_auto_indirect_branches(source, branches, source_arch=None)[source]
+
+ +
+
+set_auto_instr_highlight(addr, color, arch=None)[source]
+

set_auto_instr_highlight highlights the instruction at the specified address with the supplied color

+

..warning:: Use only in analysis plugins. Do not use in regular plugins, as colors won’t be saved to the database.

+ +++ + + + +
Parameters:
    +
  • addr (int) – virtual address of the instruction to be highlighted
  • +
  • or highlight.HighlightColor color (HighlightStandardColor) – Color value to use for highlighting
  • +
  • arch (Architecture) – (optional) Architecture of the instruction if different from self.arch
  • +
+
+
+ +
+
+set_auto_parameter_vars(value)[source]
+
+ +
+
+set_auto_reg_stack_adjustments(value)[source]
+
+ +
+
+set_auto_return_regs(value)[source]
+
+ +
+
+set_auto_return_type(value)[source]
+
+ +
+
+set_auto_stack_adjustment(value)[source]
+
+ +
+
+set_auto_type(value)[source]
+
+ +
+
+set_call_reg_stack_adjustment(addr, adjust, arch=None)[source]
+
+ +
+
+set_call_reg_stack_adjustment_for_reg_stack(addr, reg_stack, adjust, arch=None)[source]
+
+ +
+
+set_call_stack_adjustment(addr, adjust, arch=None)[source]
+
+ +
+
+set_comment(addr, comment)[source]
+

Deprecated method provided for compatibility. Use set_comment_at instead.

+
+ +
+
+set_comment_at(addr, comment)[source]
+

set_comment_at sets a comment for the current function at the address specified

+ +++ + + + + + + + +
Parameters:
    +
  • int (addr) – virtual address within the current function to apply the comment to
  • +
  • str (comment) – string comment to apply
  • +
+
Return type:

None

+
Example:
>>> current_function.set_comment_at(here, "hi")
+
+
+
+
+ +
+
+classmethod set_default_session_data(name, value)[source]
+
+ +
+
+set_int_display_type(instr_addr, value, operand, display_type, arch=None)[source]
+
+++ + + + +
Parameters: +
+
+ +
+
+set_user_indirect_branches(source, branches, source_arch=None)[source]
+
+ +
+
+set_user_instr_highlight(addr, color, arch=None)[source]
+

set_user_instr_highlight highlights the instruction at the specified address with the supplied color

+ +++ + + + + + +
Parameters:
    +
  • addr (int) – virtual address of the instruction to be highlighted
  • +
  • or highlight.HighlightColor color (HighlightStandardColor) – Color value to use for highlighting
  • +
  • arch (Architecture) – (optional) Architecture of the instruction if different from self.arch
  • +
+
Example:
>>> current_function.set_user_instr_highlight(here, HighlightStandardColor.BlueHighlightColor)
+>>> current_function.set_user_instr_highlight(here, highlight.HighlightColor(red=0xff, blue=0xff, green=0))
+
+
+
+
+ +
+
+set_user_type(value)[source]
+
+ +
+
+analysis_performance_info
+
+ +
+
+analysis_skip_override
+

Override for skipping of automatic analysis

+
+ +
+
+analysis_skip_reason
+

Function analysis skip reason

+
+ +
+
+analysis_skipped
+

Whether automatic analysis was skipped for this function

+
+ +
+
+arch
+

Function architecture (read-only)

+
+ +
+
+auto
+

Whether function was automatically discovered (read-only)

+
+ +
+
+basic_blocks
+

List of basic blocks (read-only)

+
+ +
+
+calling_convention
+

Calling convention used by the function

+
+ +
+
+can_return
+

Whether function can return

+
+ +
+
+clobbered_regs
+

Registers that are modified by this function

+
+ +
+
+comment
+

Gets the comment for the current function

+
+ +
+
+comments
+

Dict of comments (read-only)

+
+ +
+
+explicitly_defined_type
+

Whether function has explicitly defined types (read-only)

+
+ +
+
+function_type
+

Function type object

+
+ +
+
+global_pointer_value
+

Discovered value of the global pointer register, if the function uses one (read-only)

+
+ +
+
+has_variable_arguments
+

Whether the function takes a variable number of arguments

+
+ +
+
+indirect_branches
+

List of indirect branches (read-only)

+
+ +
+
+instructions
+

A generator of instruction tokens and their start addresses for the current function

+
+ +
+
+lifted_il
+

returns LowLevelILFunction used to represent lifted IL (read-only)

+
+ +
+
+llil
+

returns LowLevelILFunction used to represent Function low level IL (read-only)

+
+ +
+
+llil_basic_blocks
+

A generator of all LowLevelILBasicBlock objects in the current function

+
+ +
+
+llil_instructions
+

Deprecated method provided for compatibility. Use llil.instructions instead. Was: A generator of llil instructions of the current function

+
+ +
+
+low_level_il
+

Deprecated property provided for compatibility. Use llil instead.

+
+ +
+
+medium_level_il
+

Deprecated property provided for compatibility. Use mlil instead.

+
+ +
+
+mlil
+

Function medium level IL (read-only)

+
+ +
+
+mlil_basic_blocks
+

A generator of all MediumLevelILBasicBlock objects in the current function

+
+ +
+
+mlil_instructions
+

Deprecated method provided for compatibility. Use mlil.instructions instead. Was: A generator of mlil instructions of the current function

+
+ +
+
+name
+

Symbol name for the function

+
+ +
+
+needs_update
+

Whether the function has analysis that needs to be updated (read-only)

+
+ +
+
+parameter_vars
+

List of variables for the incoming function parameters

+
+ +
+
+platform
+

Function platform (read-only)

+
+ +
+
+reg_stack_adjustments
+

Number of entries removed from each register stack after return

+
+ +
+
+return_regs
+

Registers that are used for the return value

+
+ +
+
+return_type
+

Return type of the function

+
+ +
+
+session_data
+

Dictionary object where plugins can store arbitrary data associated with the function

+
+ +
+
+stack_adjustment
+

Number of bytes removed from the stack after return

+
+ +
+
+stack_layout
+

List of function stack variables (read-only)

+
+ +
+
+start
+

Function start (read-only)

+
+ +
+
+symbol
+

Function symbol(read-only)

+
+ +
+
+too_large
+

Whether the function is too large to automatically perform analysis (read-only)

+
+ +
+
+type_tokens
+

Text tokens for this function’s prototype

+
+ +
+
+unresolved_stack_adjustment_graph
+

Flow graph of unresolved stack adjustments (read-only)

+
+ +
+
+vars
+

List of function variables (read-only)

+
+ +
+
+view
+

Function view (read-only)

+
+ +
+ +
+
+class IndirectBranchInfo(source_arch, source_addr, dest_arch, dest_addr, auto_defined)[source]
+

Bases: object

+
+ +
+
+class InstructionBranch(branch_type, target=0, arch=None)[source]
+

Bases: object

+
+ +
+
+class InstructionInfo[source]
+

Bases: object

+
+
+add_branch(branch_type, target=0, arch=None)[source]
+
+ +
+ +
+
+class InstructionTextToken(token_type, text, value=0, size=0, operand=4294967295, context=<InstructionTextTokenContext.NoTokenContext: 0>, address=0, confidence=255, typeNames=[])[source]
+

Bases: object

+

class InstructionTextToken is used to tell the core about the various components in the disassembly views.

+
+
++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
InstructionTextTokenTypeDescription
TextTokenText that doesn’t fit into the other tokens
InstructionTokenThe instruction mnemonic
OperandSeparatorTokenThe comma or whatever else separates tokens
RegisterTokenRegisters
IntegerTokenIntegers
PossibleAddressTokenIntegers that are likely addresses
BeginMemoryOperandTokenThe start of memory operand
EndMemoryOperandTokenThe end of a memory operand
FloatingPointTokenFloating point number
AnnotationTokenFor internal use only
CodeRelativeAddressTokenFor internal use only
StackVariableTypeTokenFor internal use only
DataVariableTypeTokenFor internal use only
FunctionReturnTypeTokenFor internal use only
FunctionAttributeTokenFor internal use only
ArgumentTypeTokenFor internal use only
ArgumentNameTokenFor internal use only
HexDumpByteValueTokenFor internal use only
HexDumpSkippedByteTokenFor internal use only
HexDumpInvalidByteTokenFor internal use only
HexDumpTextTokenFor internal use only
OpcodeTokenFor internal use only
StringTokenFor internal use only
CharacterConstantTokenFor internal use only
CodeSymbolTokenFor internal use only
DataSymbolTokenFor internal use only
StackVariableTokenFor internal use only
ImportTokenFor internal use only
AddressDisplayTokenFor internal use only
+
+
+
+classmethod get_instruction_lines(tokens, count=0)[source]
+

Helper method for converting between core.BNInstructionTextToken and InstructionTextToken lists

+
+ +
+ +
+
+class IntrinsicInfo(inputs, outputs, index=None)[source]
+

Bases: object

+
+ +
+
+class IntrinsicInput(type_obj, name='')[source]
+

Bases: object

+
+ +
+
+class LookupTableEntry(from_values, to_value)[source]
+

Bases: object

+
+ +
+
+class ParameterVariables(var_list, confidence=255)[source]
+

Bases: object

+
+
+with_confidence(confidence)[source]
+
+ +
+ +
+
+class PossibleValueSet(arch, value)[source]
+

Bases: object

+
+ +
+
+class RegisterInfo(full_width_reg, size, offset=0, extend=<ImplicitRegisterExtend.NoExtend: 0>, index=None)[source]
+

Bases: object

+
+ +
+
+class RegisterStackInfo(storage_regs, top_relative_regs, stack_top_reg, index=None)[source]
+

Bases: object

+
+ +
+
+class RegisterValue(arch=None, value=None, confidence=255)[source]
+

Bases: object

+
+
+classmethod constant(value)[source]
+
+ +
+
+classmethod constant_ptr(value)[source]
+
+ +
+
+classmethod entry_value(arch, reg)[source]
+
+ +
+
+classmethod imported_address(value)[source]
+
+ +
+
+classmethod return_address()[source]
+
+ +
+
+classmethod stack_frame_offset(offset)[source]
+
+ +
+
+classmethod undetermined()[source]
+
+ +
+ +
+
+class StackVariableReference(src_operand, t, name, var, ref_ofs, size)[source]
+

Bases: object

+
+ +
+
+class ValueRange(start, end, step)[source]
+

Bases: object

+
+ +
+
+class Variable(func, source_type, index, storage, name=None, var_type=None)[source]
+

Bases: object

+
+
+classmethod from_identifier(func, identifier, name=None, var_type=None)[source]
+
+ +
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.AdvancedFunctionAnalysisDataRequestor.html b/personal/api-docs/binaryninja.function.AdvancedFunctionAnalysisDataRequestor.html new file mode 100644 index 0000000..6478fb0 --- /dev/null +++ b/personal/api-docs/binaryninja.function.AdvancedFunctionAnalysisDataRequestor.html @@ -0,0 +1,321 @@ + + + + + + + + + + + binaryninja.function.AdvancedFunctionAnalysisDataRequestor — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.AdvancedFunctionAnalysisDataRequestor

+
+
+class AdvancedFunctionAnalysisDataRequestor(func=None)[source]
+
+
+__init__(func=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + +
__init__([func])x.__init__(…) initializes x; see help(type(x)) for signature
close()
+

Attributes

+ ++++ + + + + + +
function
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.ConstantReference.html b/personal/api-docs/binaryninja.function.ConstantReference.html new file mode 100644 index 0000000..defac80 --- /dev/null +++ b/personal/api-docs/binaryninja.function.ConstantReference.html @@ -0,0 +1,306 @@ + + + + + + + + + + + binaryninja.function.ConstantReference — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.ConstantReference

+
+
+class ConstantReference(val, size, ptr, intermediate)[source]
+
+
+__init__(val, size, ptr, intermediate)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(val, size, ptr, intermediate)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.DisassemblySettings.html b/personal/api-docs/binaryninja.function.DisassemblySettings.html new file mode 100644 index 0000000..0340dc2 --- /dev/null +++ b/personal/api-docs/binaryninja.function.DisassemblySettings.html @@ -0,0 +1,327 @@ + + + + + + + + + + + binaryninja.function.DisassemblySettings — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.DisassemblySettings

+
+
+class DisassemblySettings(handle=None)[source]
+
+
+__init__(handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + +
__init__([handle])x.__init__(…) initializes x; see help(type(x)) for signature
is_option_set(option)
set_option(option[, state])
+

Attributes

+ ++++ + + + + + + + + +
max_symbol_width
width
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.DisassemblyTextLine.html b/personal/api-docs/binaryninja.function.DisassemblyTextLine.html new file mode 100644 index 0000000..9887ab2 --- /dev/null +++ b/personal/api-docs/binaryninja.function.DisassemblyTextLine.html @@ -0,0 +1,306 @@ + + + + + + + + + + + binaryninja.function.DisassemblyTextLine — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.DisassemblyTextLine

+
+
+class DisassemblyTextLine(tokens, address=None, il_instr=None, color=None)[source]
+
+
+__init__(tokens, address=None, il_instr=None, color=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(tokens[, address, il_instr, color])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.DisassemblyTextRenderer.html b/personal/api-docs/binaryninja.function.DisassemblyTextRenderer.html new file mode 100644 index 0000000..b994ed4 --- /dev/null +++ b/personal/api-docs/binaryninja.function.DisassemblyTextRenderer.html @@ -0,0 +1,363 @@ + + + + + + + + + + + binaryninja.function.DisassemblyTextRenderer — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.DisassemblyTextRenderer

+
+
+class DisassemblyTextRenderer(func=None, settings=None, handle=None)[source]
+
+
+__init__(func=None, settings=None, handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__([func, settings, handle])x.__init__(…) initializes x; see help(type(x)) for signature
add_integer_token(tokens, int_token, addr[, …])
add_stack_var_reference_tokens(tokens, ref)
add_symbol_token(tokens, addr, size[, operand])
get_disassembly_text(addr)
get_instruction_annotations(addr)
get_instruction_text(addr)
is_integer_token(token)
reset_deduplicated_comments()
wrap_comment(lines, cur_line, comment, …)
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + +
arch
basic_block
function
has_data_flow
il
il_function
settings
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.Function.html b/personal/api-docs/binaryninja.function.Function.html new file mode 100644 index 0000000..82b96f3 --- /dev/null +++ b/personal/api-docs/binaryninja.function.Function.html @@ -0,0 +1,677 @@ + + + + + + + + + + + binaryninja.function.Function — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.Function

+
+
+class Function(view=None, handle=None)[source]
+
+
+__init__(view=None, handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__([view, handle])x.__init__(…) initializes x; see help(type(x)) for signature
apply_auto_discovered_type(func_type)
apply_imported_types(sym)
create_auto_stack_var(offset, var_type, name)
create_auto_var(var, var_type, name[, …])
create_graph([graph_type, settings])
create_user_stack_var(offset, var_type, name)
create_user_var(var, var_type, name[, …])
delete_auto_stack_var(offset)
delete_auto_var(var)
delete_user_stack_var(offset)
delete_user_var(var)
get_basic_block_at(addr[, arch])get_basic_block_at returns the BasicBlock of the optionally specified Architecture arch at the given address addr.
get_block_annotations(addr[, arch])
get_call_reg_stack_adjustment(addr[, arch])
get_call_reg_stack_adjustment_for_reg_stack(…)
get_call_stack_adjustment(addr[, arch])
get_comment_at(addr)
get_constants_referenced_by(addr[, arch])
get_flags_read_by_lifted_il_instruction(i)
get_flags_written_by_lifted_il_instruction(i)
get_indirect_branches_at(addr[, arch])
get_instr_highlight(addr[, arch]) +++ + + + +
Example:
+
get_int_display_type(instr_addr, value, operand)
get_lifted_il_at(addr[, arch])
get_lifted_il_flag_definitions_for_use(i, flag)
get_lifted_il_flag_uses_for_definition(i, flag)
get_low_level_il_at(addr[, arch])get_low_level_il_at gets the LowLevelILInstruction corresponding to the given virtual address
get_low_level_il_exits_at(addr[, arch])
get_parameter_at(addr, func_type, i[, arch])
get_parameter_at_low_level_il_instruction(…)
get_reg_value_after(addr, reg[, arch])get_reg_value_after gets the value instruction address corresponding to the given virtual address
get_reg_value_at(addr, reg[, arch])get_reg_value_at gets the value the provided string register address corresponding to the given virtual address
get_reg_value_at_exit(reg)
get_regs_read_by(addr[, arch])
get_regs_written_by(addr[, arch])
get_stack_contents_after(addr, offset, size)
get_stack_contents_at(addr, offset, size[, arch])get_stack_contents_at returns the RegisterValue for the item on the stack in the current function at the given virtual address addr, stack offset offset and size of size.
get_stack_var_at_frame_offset(offset, addr)
get_stack_vars_referenced_by(addr[, arch])
get_type_tokens([settings])
is_call_instruction(addr[, arch])
mark_recent_use()
reanalyze()reanalyze causes this functions to be reanalyzed.
release_advanced_analysis_data()
request_advanced_analysis_data()
request_debug_report(name)
set_auto_call_reg_stack_adjustment(addr, adjust)
set_auto_call_reg_stack_adjustment_for_reg_stack(…)
set_auto_call_stack_adjustment(addr, adjust)
set_auto_calling_convention(value)
set_auto_can_return(value)
set_auto_clobbered_regs(value)
set_auto_has_variable_arguments(value)
set_auto_indirect_branches(source, branches)
set_auto_instr_highlight(addr, color[, arch])set_auto_instr_highlight highlights the instruction at the specified address with the supplied color
set_auto_parameter_vars(value)
set_auto_reg_stack_adjustments(value)
set_auto_return_regs(value)
set_auto_return_type(value)
set_auto_stack_adjustment(value)
set_auto_type(value)
set_call_reg_stack_adjustment(addr, adjust)
set_call_reg_stack_adjustment_for_reg_stack(…)
set_call_stack_adjustment(addr, adjust[, arch])
set_comment(addr, comment)Deprecated method provided for compatibility.
set_comment_at(addr, comment)set_comment_at sets a comment for the current function at the address specified
set_default_session_data(name, value)
set_int_display_type(instr_addr, value, …) +++ + + + + +
param int instr_addr:
 
+
set_user_indirect_branches(source, branches)
set_user_instr_highlight(addr, color[, arch])set_user_instr_highlight highlights the instruction at the specified address with the supplied color
set_user_type(value)
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
analysis_performance_info
analysis_skip_overrideOverride for skipping of automatic analysis
analysis_skip_reasonFunction analysis skip reason
analysis_skippedWhether automatic analysis was skipped for this function
archFunction architecture (read-only)
autoWhether function was automatically discovered (read-only)
basic_blocksList of basic blocks (read-only)
calling_conventionCalling convention used by the function
can_returnWhether function can return
clobbered_regsRegisters that are modified by this function
commentGets the comment for the current function
commentsDict of comments (read-only)
explicitly_defined_typeWhether function has explicitly defined types (read-only)
function_typeFunction type object
global_pointer_valueDiscovered value of the global pointer register, if the function uses one (read-only)
has_variable_argumentsWhether the function takes a variable number of arguments
indirect_branchesList of indirect branches (read-only)
instructionsA generator of instruction tokens and their start addresses for the current function
lifted_ilreturns LowLevelILFunction used to represent lifted IL (read-only)
llilreturns LowLevelILFunction used to represent Function low level IL (read-only)
llil_basic_blocksA generator of all LowLevelILBasicBlock objects in the current function
llil_instructionsDeprecated method provided for compatibility.
low_level_ilDeprecated property provided for compatibility.
medium_level_ilDeprecated property provided for compatibility.
mlilFunction medium level IL (read-only)
mlil_basic_blocksA generator of all MediumLevelILBasicBlock objects in the current function
mlil_instructionsDeprecated method provided for compatibility.
nameSymbol name for the function
needs_updateWhether the function has analysis that needs to be updated (read-only)
parameter_varsList of variables for the incoming function parameters
platformFunction platform (read-only)
reg_stack_adjustmentsNumber of entries removed from each register stack after return
return_regsRegisters that are used for the return value
return_typeReturn type of the function
session_dataDictionary object where plugins can store arbitrary data associated with the function
stack_adjustmentNumber of bytes removed from the stack after return
stack_layoutList of function stack variables (read-only)
startFunction start (read-only)
symbolFunction symbol(read-only)
too_largeWhether the function is too large to automatically perform analysis (read-only)
type_tokensText tokens for this function’s prototype
unresolved_stack_adjustment_graphFlow graph of unresolved stack adjustments (read-only)
varsList of function variables (read-only)
viewFunction view (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.IndirectBranchInfo.html b/personal/api-docs/binaryninja.function.IndirectBranchInfo.html new file mode 100644 index 0000000..eae0e86 --- /dev/null +++ b/personal/api-docs/binaryninja.function.IndirectBranchInfo.html @@ -0,0 +1,306 @@ + + + + + + + + + + + binaryninja.function.IndirectBranchInfo — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.IndirectBranchInfo

+
+
+class IndirectBranchInfo(source_arch, source_addr, dest_arch, dest_addr, auto_defined)[source]
+
+
+__init__(source_arch, source_addr, dest_arch, dest_addr, auto_defined)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(source_arch, source_addr, …)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.InstructionBranch.html b/personal/api-docs/binaryninja.function.InstructionBranch.html new file mode 100644 index 0000000..786e878 --- /dev/null +++ b/personal/api-docs/binaryninja.function.InstructionBranch.html @@ -0,0 +1,306 @@ + + + + + + + + + + + binaryninja.function.InstructionBranch — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.InstructionBranch

+
+
+class InstructionBranch(branch_type, target=0, arch=None)[source]
+
+
+__init__(branch_type, target=0, arch=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(branch_type[, target, arch])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.InstructionInfo.html b/personal/api-docs/binaryninja.function.InstructionInfo.html new file mode 100644 index 0000000..8878066 --- /dev/null +++ b/personal/api-docs/binaryninja.function.InstructionInfo.html @@ -0,0 +1,309 @@ + + + + + + + + + + + binaryninja.function.InstructionInfo — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.InstructionInfo

+
+
+class InstructionInfo[source]
+
+
+__init__()[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + +
__init__()x.__init__(…) initializes x; see help(type(x)) for signature
add_branch(branch_type[, target, arch])
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.InstructionTextToken.html b/personal/api-docs/binaryninja.function.InstructionTextToken.html new file mode 100644 index 0000000..82444bf --- /dev/null +++ b/personal/api-docs/binaryninja.function.InstructionTextToken.html @@ -0,0 +1,412 @@ + + + + + + + + + + + binaryninja.function.InstructionTextToken — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.InstructionTextToken

+
+
+class InstructionTextToken(token_type, text, value=0, size=0, operand=4294967295, context=<InstructionTextTokenContext.NoTokenContext: 0>, address=0, confidence=255, typeNames=[])[source]
+

class InstructionTextToken is used to tell the core about the various components in the disassembly views.

+
+
++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
InstructionTextTokenTypeDescription
TextTokenText that doesn’t fit into the other tokens
InstructionTokenThe instruction mnemonic
OperandSeparatorTokenThe comma or whatever else separates tokens
RegisterTokenRegisters
IntegerTokenIntegers
PossibleAddressTokenIntegers that are likely addresses
BeginMemoryOperandTokenThe start of memory operand
EndMemoryOperandTokenThe end of a memory operand
FloatingPointTokenFloating point number
AnnotationTokenFor internal use only
CodeRelativeAddressTokenFor internal use only
StackVariableTypeTokenFor internal use only
DataVariableTypeTokenFor internal use only
FunctionReturnTypeTokenFor internal use only
FunctionAttributeTokenFor internal use only
ArgumentTypeTokenFor internal use only
ArgumentNameTokenFor internal use only
HexDumpByteValueTokenFor internal use only
HexDumpSkippedByteTokenFor internal use only
HexDumpInvalidByteTokenFor internal use only
HexDumpTextTokenFor internal use only
OpcodeTokenFor internal use only
StringTokenFor internal use only
CharacterConstantTokenFor internal use only
CodeSymbolTokenFor internal use only
DataSymbolTokenFor internal use only
StackVariableTokenFor internal use only
ImportTokenFor internal use only
AddressDisplayTokenFor internal use only
+
+
+
+__init__(token_type, text, value=0, size=0, operand=4294967295, context=<InstructionTextTokenContext.NoTokenContext: 0>, address=0, confidence=255, typeNames=[])[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + +
__init__(token_type, text[, value, size, …])x.__init__(…) initializes x; see help(type(x)) for signature
get_instruction_lines(tokens[, count])Helper method for converting between core.BNInstructionTextToken and InstructionTextToken lists
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.IntrinsicInfo.html b/personal/api-docs/binaryninja.function.IntrinsicInfo.html new file mode 100644 index 0000000..6ffd1e1 --- /dev/null +++ b/personal/api-docs/binaryninja.function.IntrinsicInfo.html @@ -0,0 +1,306 @@ + + + + + + + + + + + binaryninja.function.IntrinsicInfo — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.IntrinsicInfo

+
+
+class IntrinsicInfo(inputs, outputs, index=None)[source]
+
+
+__init__(inputs, outputs, index=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(inputs, outputs[, index])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.IntrinsicInput.html b/personal/api-docs/binaryninja.function.IntrinsicInput.html new file mode 100644 index 0000000..5506ae3 --- /dev/null +++ b/personal/api-docs/binaryninja.function.IntrinsicInput.html @@ -0,0 +1,306 @@ + + + + + + + + + + + binaryninja.function.IntrinsicInput — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.IntrinsicInput

+
+
+class IntrinsicInput(type_obj, name='')[source]
+
+
+__init__(type_obj, name='')[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(type_obj[, name])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.LookupTableEntry.html b/personal/api-docs/binaryninja.function.LookupTableEntry.html new file mode 100644 index 0000000..5e3ff34 --- /dev/null +++ b/personal/api-docs/binaryninja.function.LookupTableEntry.html @@ -0,0 +1,306 @@ + + + + + + + + + + + binaryninja.function.LookupTableEntry — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.LookupTableEntry

+
+
+class LookupTableEntry(from_values, to_value)[source]
+
+
+__init__(from_values, to_value)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(from_values, to_value)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.ParameterVariables.html b/personal/api-docs/binaryninja.function.ParameterVariables.html new file mode 100644 index 0000000..81fcc36 --- /dev/null +++ b/personal/api-docs/binaryninja.function.ParameterVariables.html @@ -0,0 +1,309 @@ + + + + + + + + + + + binaryninja.function.ParameterVariables — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.ParameterVariables

+
+
+class ParameterVariables(var_list, confidence=255)[source]
+
+
+__init__(var_list, confidence=255)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + +
__init__(var_list[, confidence])x.__init__(…) initializes x; see help(type(x)) for signature
with_confidence(confidence)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.PossibleValueSet.html b/personal/api-docs/binaryninja.function.PossibleValueSet.html new file mode 100644 index 0000000..4861bcb --- /dev/null +++ b/personal/api-docs/binaryninja.function.PossibleValueSet.html @@ -0,0 +1,306 @@ + + + + + + + + + + + binaryninja.function.PossibleValueSet — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.PossibleValueSet

+
+
+class PossibleValueSet(arch, value)[source]
+
+
+__init__(arch, value)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(arch, value)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.RegisterInfo.html b/personal/api-docs/binaryninja.function.RegisterInfo.html new file mode 100644 index 0000000..7464f02 --- /dev/null +++ b/personal/api-docs/binaryninja.function.RegisterInfo.html @@ -0,0 +1,306 @@ + + + + + + + + + + + binaryninja.function.RegisterInfo — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.RegisterInfo

+
+
+class RegisterInfo(full_width_reg, size, offset=0, extend=<ImplicitRegisterExtend.NoExtend: 0>, index=None)[source]
+
+
+__init__(full_width_reg, size, offset=0, extend=<ImplicitRegisterExtend.NoExtend: 0>, index=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(full_width_reg, size[, offset, …])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.RegisterStackInfo.html b/personal/api-docs/binaryninja.function.RegisterStackInfo.html new file mode 100644 index 0000000..8c479d2 --- /dev/null +++ b/personal/api-docs/binaryninja.function.RegisterStackInfo.html @@ -0,0 +1,306 @@ + + + + + + + + + + + binaryninja.function.RegisterStackInfo — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.RegisterStackInfo

+
+
+class RegisterStackInfo(storage_regs, top_relative_regs, stack_top_reg, index=None)[source]
+
+
+__init__(storage_regs, top_relative_regs, stack_top_reg, index=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(storage_regs, top_relative_regs, …)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.RegisterValue.html b/personal/api-docs/binaryninja.function.RegisterValue.html new file mode 100644 index 0000000..fb17ee4 --- /dev/null +++ b/personal/api-docs/binaryninja.function.RegisterValue.html @@ -0,0 +1,327 @@ + + + + + + + + + + + binaryninja.function.RegisterValue — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.RegisterValue

+
+
+class RegisterValue(arch=None, value=None, confidence=255)[source]
+
+
+__init__(arch=None, value=None, confidence=255)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__([arch, value, confidence])x.__init__(…) initializes x; see help(type(x)) for signature
constant(value)
constant_ptr(value)
entry_value(arch, reg)
imported_address(value)
return_address()
stack_frame_offset(offset)
undetermined()
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.StackVariableReference.html b/personal/api-docs/binaryninja.function.StackVariableReference.html new file mode 100644 index 0000000..7fd5440 --- /dev/null +++ b/personal/api-docs/binaryninja.function.StackVariableReference.html @@ -0,0 +1,306 @@ + + + + + + + + + + + binaryninja.function.StackVariableReference — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.StackVariableReference

+
+
+class StackVariableReference(src_operand, t, name, var, ref_ofs, size)[source]
+
+
+__init__(src_operand, t, name, var, ref_ofs, size)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(src_operand, t, name, var, ref_ofs, …)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.ValueRange.html b/personal/api-docs/binaryninja.function.ValueRange.html new file mode 100644 index 0000000..fca728f --- /dev/null +++ b/personal/api-docs/binaryninja.function.ValueRange.html @@ -0,0 +1,306 @@ + + + + + + + + + + + binaryninja.function.ValueRange — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.ValueRange

+
+
+class ValueRange(start, end, step)[source]
+
+
+__init__(start, end, step)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(start, end, step)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.Variable.html b/personal/api-docs/binaryninja.function.Variable.html new file mode 100644 index 0000000..7812daa --- /dev/null +++ b/personal/api-docs/binaryninja.function.Variable.html @@ -0,0 +1,309 @@ + + + + + + + + + + + binaryninja.function.Variable — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.Variable

+
+
+class Variable(func, source_type, index, storage, name=None, var_type=None)[source]
+
+
+__init__(func, source_type, index, storage, name=None, var_type=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + +
__init__(func, source_type, index, storage)x.__init__(…) initializes x; see help(type(x)) for signature
from_identifier(func, identifier[, name, …])
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.function.range.html b/personal/api-docs/binaryninja.function.range.html new file mode 100644 index 0000000..10c88d5 --- /dev/null +++ b/personal/api-docs/binaryninja.function.range.html @@ -0,0 +1,289 @@ + + + + + + + + + + + binaryninja.function.range — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.function.range

+
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.functionrecognizer-module.html b/personal/api-docs/binaryninja.functionrecognizer-module.html new file mode 100644 index 0000000..9e16b05 --- /dev/null +++ b/personal/api-docs/binaryninja.functionrecognizer-module.html @@ -0,0 +1,302 @@ + + + + + + + + + + + functionrecognizer module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

functionrecognizer module

+ ++++ + + + + + + + + +
binaryninja.functionrecognizer.FunctionRecognizer()
binaryninja.functionrecognizer.log(level, text)log writes messages to the log console for the given log level.
+
+
+
+
+class FunctionRecognizer[source]
+

Bases: object

+
+
+recognize_low_level_il(data, func, il)[source]
+
+ +
+
+recognize_medium_level_il(data, func, il)[source]
+
+ +
+
+classmethod register_arch(arch)[source]
+
+ +
+
+classmethod register_global()[source]
+
+ +
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.functionrecognizer.FunctionRecognizer.html b/personal/api-docs/binaryninja.functionrecognizer.FunctionRecognizer.html new file mode 100644 index 0000000..c636a1e --- /dev/null +++ b/personal/api-docs/binaryninja.functionrecognizer.FunctionRecognizer.html @@ -0,0 +1,298 @@ + + + + + + + + + + + binaryninja.functionrecognizer.FunctionRecognizer — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.functionrecognizer.FunctionRecognizer

+
+
+class FunctionRecognizer[source]
+
+
+__init__()[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + +
__init__()x.__init__(…) initializes x; see help(type(x)) for signature
recognize_low_level_il(data, func, il)
recognize_medium_level_il(data, func, il)
register_arch(arch)
register_global()
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.functionrecognizer.log.html b/personal/api-docs/binaryninja.functionrecognizer.log.html new file mode 100644 index 0000000..ec59048 --- /dev/null +++ b/personal/api-docs/binaryninja.functionrecognizer.log.html @@ -0,0 +1,321 @@ + + + + + + + + + + + binaryninja.functionrecognizer.log — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.functionrecognizer.log

+
+
+log(level, text)[source]
+

log writes messages to the log console for the given log level.

+
+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LogLevelNameLogLevelDescription
DebugLog0Logs debuging information messages to the console.
InfoLog1Logs general information messages to the console.
WarningLog2Logs message to console with Warning icon.
ErrorLog3Logs message to console with Error icon, focusing the error console.
AlertLog4Logs message to pop up window.
+
+ +++ + + + + + +
Parameters:
    +
  • level (LogLevel) – Log level to use
  • +
  • text (str) – message to print
  • +
+
Return type:

None

+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.highlight-module.html b/personal/api-docs/binaryninja.highlight-module.html new file mode 100644 index 0000000..185afc5 --- /dev/null +++ b/personal/api-docs/binaryninja.highlight-module.html @@ -0,0 +1,278 @@ + + + + + + + + + + + highlight module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

highlight module

+ ++++ + + + + + +
binaryninja.highlight.HighlightColor([…])
+
+
+
+
+class HighlightColor(color=None, mix_color=None, mix=None, red=None, green=None, blue=None, alpha=255)[source]
+

Bases: object

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.highlight.HighlightColor.html b/personal/api-docs/binaryninja.highlight.HighlightColor.html new file mode 100644 index 0000000..323e576 --- /dev/null +++ b/personal/api-docs/binaryninja.highlight.HighlightColor.html @@ -0,0 +1,285 @@ + + + + + + + + + + + binaryninja.highlight.HighlightColor — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.highlight.HighlightColor

+
+
+class HighlightColor(color=None, mix_color=None, mix=None, red=None, green=None, blue=None, alpha=255)[source]
+
+
+__init__(color=None, mix_color=None, mix=None, red=None, green=None, blue=None, alpha=255)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__([color, mix_color, mix, red, …])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction-module.html b/personal/api-docs/binaryninja.interaction-module.html new file mode 100644 index 0000000..606bfad --- /dev/null +++ b/personal/api-docs/binaryninja.interaction-module.html @@ -0,0 +1,1054 @@ + + + + + + + + + + + interaction module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

interaction module

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
binaryninja.interaction.AddressField(prompt)AddressField prompts the user for an address.
binaryninja.interaction.ChoiceField(prompt, …)ChoiceField prompts the user to choose from the list of strings provided in choices.
binaryninja.interaction.DirectoryNameField(prompt)DirectoryNameField prompts the user to specify a directory name to open.
binaryninja.interaction.FlowGraphReport(…)
binaryninja.interaction.HTMLReport(title, …)
binaryninja.interaction.IntegerField(prompt)IntegerField add prompt for integer.
binaryninja.interaction.InteractionHandler()
binaryninja.interaction.LabelField(text)LabelField adds a text label to the display.
binaryninja.interaction.MarkdownReport(…)
binaryninja.interaction.MultilineTextField(prompt)MultilineTextField add multi-line text string input field.
binaryninja.interaction.OpenFileNameField(prompt)OpenFileNameField prompts the user to specify a file name to open.
binaryninja.interaction.PlainTextReport(…)
binaryninja.interaction.ReportCollection([…])
binaryninja.interaction.SaveFileNameField(prompt)SaveFileNameField prompts the user to specify a file name to save.
binaryninja.interaction.SeparatorFieldSeparatorField adds vertical separation to the display.
binaryninja.interaction.TextLineField(prompt)TextLineField Adds prompt for text string input.
binaryninja.interaction.get_address_input(…)get_address_input prompts the user for an address with the given prompt and title.
binaryninja.interaction.get_choice_input(…)get_choice_input prompts the user to select the one of the provided choices.
binaryninja.interaction.get_directory_name_input(prompt)get_directory_name_input prompts the user for a directory name to save as, optionally providing a default_name.
binaryninja.interaction.get_form_input(…)get_from_input Prompts the user for a set of inputs specified in fields with given title.
binaryninja.interaction.get_int_input(…)get_int_input prompts the user to input a integer with the given prompt and title.
binaryninja.interaction.get_open_filename_input(prompt)get_open_filename_input prompts the user for a file name to open.
binaryninja.interaction.get_save_filename_input(prompt)get_save_filename_input prompts the user for a file name to save as, optionally providing a file extension and default_name.
binaryninja.interaction.get_text_line_input(…)get_text_line_input prompts the user to input a string with the given prompt and title.
binaryninja.interaction.markdown_to_html(…)markdown_to_html converts the provided markdown to HTML.
binaryninja.interaction.range(*args)A Python2 and Python3 Compatible Range Generator
binaryninja.interaction.show_graph_report(…)show_graph_report displays a flow graph in UI applications.
binaryninja.interaction.show_html_report(…)show_html_report displays the HTML contents in UI applications and plaintext in command-line applications.
binaryninja.interaction.show_markdown_report(…)show_markdown_report displays the markdown contents in UI applications and plaintext in command-line applications.
binaryninja.interaction.show_message_box(…)show_message_box Displays a configurable message box in the UI, or prompts on the console as appropriate retrieves a list of all Symbol objects of the provided symbol type in the optionally provided range.
binaryninja.interaction.show_plain_text_report(…)show_plain_text_report displays contents to the user in the UI or on the command-line.
binaryninja.interaction.show_report_collection(…)show_report_collection displays multiple reports in UI applications.
+
+
+
+
+class AddressField(prompt, view=None, current_address=0)[source]
+

Bases: object

+

AddressField prompts the user for an address. By passing the optional view and current_address parameters +offsets can be used instead of just an address. The result is stored as in int in self.result.

+
+
Note: This API currently functions differently on the command-line, as the view and current_address are
+
disregarded. Additionally where as in the UI the result defaults to hexadecimal on the command-line 0x must be +specified.
+
+
+ +
+
+class ChoiceField(prompt, choices)[source]
+

Bases: object

+

ChoiceField prompts the user to choose from the list of strings provided in choices. Result is stored +in self.result as an index in to the choices array.

+ +++ + + + + + + + +
Attr str prompt:
 prompt to be presented to the user
Attr list(str) choices:
 list of choices to choose from
+
+ +
+
+class DirectoryNameField(prompt, default_name='')[source]
+

Bases: object

+

DirectoryNameField prompts the user to specify a directory name to open. Result is stored in self.result as +a string.

+
+ +
+
+class FlowGraphReport(title, graph, view=None)[source]
+

Bases: object

+
+ +
+
+class HTMLReport(title, contents, plaintext='', view=None)[source]
+

Bases: object

+
+ +
+
+class IntegerField(prompt)[source]
+

Bases: object

+

IntegerField add prompt for integer. Result is stored in self.result as an int.

+
+ +
+
+class InteractionHandler[source]
+

Bases: object

+
+
+get_address_input(prompt, title, view, current_address)[source]
+
+ +
+
+get_choice_input(prompt, title, choices)[source]
+
+ +
+
+get_directory_name_input(prompt, default_name)[source]
+
+ +
+
+get_form_input(fields, title)[source]
+
+ +
+
+get_int_input(prompt, title)[source]
+
+ +
+
+get_open_filename_input(prompt, ext)[source]
+
+ +
+
+get_save_filename_input(prompt, ext, default_name)[source]
+
+ +
+
+get_text_line_input(prompt, title)[source]
+
+ +
+
+register()[source]
+
+ +
+
+show_graph_report(view, title, graph)[source]
+
+ +
+
+show_html_report(view, title, contents, plaintext)[source]
+
+ +
+
+show_markdown_report(view, title, contents, plaintext)[source]
+
+ +
+
+show_message_box(title, text, buttons, icon)[source]
+
+ +
+
+show_plain_text_report(view, title, contents)[source]
+
+ +
+
+show_report_collection(title, reports)[source]
+
+ +
+ +
+
+class LabelField(text)[source]
+

Bases: object

+

LabelField adds a text label to the display.

+
+ +
+
+class MarkdownReport(title, contents, plaintext='', view=None)[source]
+

Bases: object

+
+ +
+
+class MultilineTextField(prompt)[source]
+

Bases: object

+

MultilineTextField add multi-line text string input field. Result is stored in self.result +as a string. This option is not supported on the command-line.

+
+ +
+
+class OpenFileNameField(prompt, ext='')[source]
+

Bases: object

+

OpenFileNameField prompts the user to specify a file name to open. Result is stored in self.result as a string.

+
+ +
+
+class PlainTextReport(title, contents, view=None)[source]
+

Bases: object

+
+ +
+
+class ReportCollection(handle=None)[source]
+

Bases: object

+
+
+append(report)[source]
+
+ +
+ +
+
+class SaveFileNameField(prompt, ext='', default_name='')[source]
+

Bases: object

+

SaveFileNameField prompts the user to specify a file name to save. Result is stored in self.result as a string.

+
+ +
+
+class SeparatorField[source]
+

Bases: object

+

SeparatorField adds vertical separation to the display.

+
+ +
+
+class TextLineField(prompt)[source]
+

Bases: object

+

TextLineField Adds prompt for text string input. Result is stored in self.result as a string on completion.

+
+ +
+
+get_address_input(prompt, title)[source]
+

get_address_input prompts the user for an address with the given prompt and title.

+
+
Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line
+
a simple text prompt is used.
+
+ +++ + + + + + + + +
Parameters:
    +
  • prompt (str) – String to prompt with.
  • +
  • title (str) – Title of the window when executed in the UI.
  • +
+
Return type:

integer value input by the user.

+
Example:
>>> get_address_input("PROMPT>", "getinfo")
+PROMPT> 10
+10L
+
+
+
+
+ +
+
+get_choice_input(prompt, title, choices)[source]
+

get_choice_input prompts the user to select the one of the provided choices.

+
+
Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line
+
a simple text prompt is used. The UI uses a combo box.
+
+ +++ + + + + + + + +
Parameters:
    +
  • prompt (str) – String to prompt with.
  • +
  • title (str) – Title of the window when executed in the UI.
  • +
  • choices (list) – A list of strings for the user to choose from.
  • +
+
Return type:

integer array index of the selected option

+
Example:
>>> get_choice_input("PROMPT>", "choices", ["Yes", "No", "Maybe"])
+choices
+1) Yes
+2) No
+3) Maybe
+PROMPT> 1
+0L
+
+
+
+
+ +
+
+get_directory_name_input(prompt, default_name='')[source]
+

get_directory_name_input prompts the user for a directory name to save as, optionally providing a default_name.

+

Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line a simple text prompt is used. The UI uses the native window pop-up for file selection.

+ +++ + + + + + + + +
Parameters:
    +
  • prompt (str) – Prompt to display.
  • +
  • default_name (str) – Optional, default directory name.
  • +
+
Return type:

str

+
Example:
>>> get_directory_name_input("prompt")
+prompt dirname
+'dirname'
+
+
+
+
+ +
+
+get_form_input(fields, title)[source]
+

get_from_input Prompts the user for a set of inputs specified in fields with given title. +The fields parameter is a list which can contain the following types:

+
+
    +
  • str - an alias for LabelField
  • +
  • None - an alias for SeparatorField
  • +
  • LabelField - Text output
  • +
  • SeparatorField - Vertical spacing
  • +
  • TextLineField - Prompt for a string value
  • +
  • MultilineTextField - Prompt for multi-line string value
  • +
  • IntegerField - Prompt for an integer
  • +
  • AddressField - Prompt for an address
  • +
  • ChoiceField - Prompt for a choice from provided options
  • +
  • OpenFileNameField - Prompt for file to open
  • +
  • SaveFileNameField - Prompt for file to save to
  • +
  • DirectoryNameField - Prompt for directory name
  • +
+
+

This API is flexible and works both in the UI via a pop-up dialog and on the command-line. +:params list fields: A list containing of the above specified classes, strings or None +:params str title: The title of the pop-up dialog. +:Example:

+
+
>>> int_f = IntegerField("Specify Integer")
+>>> tex_f = TextLineField("Specify name")
+>>> choice_f = ChoiceField("Options", ["Yes", "No", "Maybe"])
+>>> get_form_input(["Get Data", None, int_f, tex_f, choice_f], "The options")
+Get Data
+
+
+

Specify Integer 1337 +Specify name Peter +The options +1) Yes +2) No +3) Maybe +Options 1 +>>> True +>>> print(tex_f.result, int_f.result, choice_f.result) +Peter 1337 0

+
+
+ +
+
+get_int_input(prompt, title)[source]
+

get_int_input prompts the user to input a integer with the given prompt and title.

+
+
Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line
+
a simple text prompt is used.
+
+ +++ + + + + + + + +
Parameters:
    +
  • prompt (str) – String to prompt with.
  • +
  • title (str) – Title of the window when executed in the UI.
  • +
+
Return type:

integer value input by the user.

+
Example:
>>> get_int_input("PROMPT>", "getinfo")
+PROMPT> 10
+10
+
+
+
+
+ +
+
+get_open_filename_input(prompt, ext='')[source]
+

get_open_filename_input prompts the user for a file name to open.

+
+
Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line
+
a simple text prompt is used. The UI uses the native window pop-up for file selection.
+
+ +++ + + + + + +
Parameters:
    +
  • prompt (str) – Prompt to display.
  • +
  • ext (str) – Optional, file extension
  • +
+
Example:
>>> get_open_filename_input("filename:", "exe")
+filename: foo.exe
+'foo.exe'
+
+
+
+
+ +
+
+get_save_filename_input(prompt, ext='', default_name='')[source]
+

get_save_filename_input prompts the user for a file name to save as, optionally providing a file extension and +default_name.

+
+
Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line
+
a simple text prompt is used. The UI uses the native window pop-up for file selection.
+
+ +++ + + + + + +
Parameters:
    +
  • prompt (str) – Prompt to display.
  • +
  • ext (str) – Optional, file extension
  • +
  • default_name (str) – Optional, default file name.
  • +
+
Example:
>>> get_save_filename_input("filename:", "exe", "foo.exe")
+filename: foo.exe
+'foo.exe'
+
+
+
+
+ +
+
+get_text_line_input(prompt, title)[source]
+

get_text_line_input prompts the user to input a string with the given prompt and title.

+
+
Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line
+
a simple text prompt is used.
+
+ +++ + + + + + + + +
Parameters:
    +
  • prompt (str) – String to prompt with.
  • +
  • title (str) – Title of the window when executed in the UI.
  • +
+
Return type:

string containing the input without trailing newline character.

+
Example:
>>> get_text_line_input("PROMPT>", "getinfo")
+PROMPT> Input!
+'Input!'
+
+
+
+
+ +
+
+markdown_to_html(contents)[source]
+

markdown_to_html converts the provided markdown to HTML.

+ +++ + + + + + + + +
Parameters:

contents (string) – Markdown contents to convert to HTML.

+
Return type:

string

+
Example:
>>> markdown_to_html("##Yay")
+'<h2>Yay</h2>'
+
+
+
+
+ +
+
+show_graph_report(title, graph)[source]
+

show_graph_report displays a flow graph in UI applications.

+

Note: This API function will have no effect outside the UI.

+ +++ + + + + + +
Parameters:graph (FlowGraph) – Flow graph to display
Return type:None
+
+ +
+
+show_html_report(title, contents, plaintext='')[source]
+

show_html_report displays the HTML contents in UI applications and plaintext in command-line +applications. This API doesn’t support hyperlinking into the BinaryView, use the BinaryView.show_html_report +if hyperlinking is needed.

+
+
Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line
+
a simple text prompt is used.
+
+ +++ + + + + + + + +
Parameters:
    +
  • contents (str) – HTML contents to display
  • +
  • plaintext (str) – Plain text version to display (used on the command-line)
  • +
+
Return type:

None

+
Example:
>>> show_html_report("title", "<h1>Contents</h1>", "Plain text contents")
+Plain text contents
+
+
+
+
+ +
+
+show_markdown_report(title, contents, plaintext='')[source]
+

show_markdown_report displays the markdown contents in UI applications and plaintext in command-line +applications. This API doesn’t support hyperlinking into the BinaryView, use the BinaryView.show_markdown_report +if hyperlinking is needed.

+
+
Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line
+
a simple text prompt is used.
+
+ +++ + + + + + + + +
Parameters:
    +
  • contents (str) – markdown contents to display
  • +
  • plaintext (str) – Plain text version to display (used on the command-line)
  • +
+
Return type:

None

+
Example:
>>> show_markdown_report("title", "##Contents", "Plain text contents")
+Plain text contents
+
+
+
+
+ +
+
+show_message_box(title, text, buttons=<MessageBoxButtonSet.OKButtonSet: 0>, icon=<MessageBoxIcon.InformationIcon: 0>)[source]
+

show_message_box Displays a configurable message box in the UI, or prompts on the console as appropriate +retrieves a list of all Symbol objects of the provided symbol type in the optionally +provided range.

+ +++ + + + + + + + +
Parameters:
    +
  • title (str) – Text title for the message box.
  • +
  • text (str) – Text for the main body of the message box.
  • +
  • buttons (MessageBoxButtonSet) – One of MessageBoxButtonSet
  • +
  • icon (MessageBoxIcon) – One of MessageBoxIcon
  • +
+
Returns:

Which button was selected

+
Return type:

MessageBoxButtonResult

+
+
+ +
+
+show_plain_text_report(title, contents)[source]
+

show_plain_text_report displays contents to the user in the UI or on the command-line.

+
+
Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line
+
a simple text prompt is used.
+
+ +++ + + + + + + + +
Parameters:
    +
  • title (str) – title to display in the UI pop-up.
  • +
  • contents (str) – plaintext contents to display
  • +
+
Return type:

None

+
Example:
>>> show_plain_text_report("title", "contents")
+contents
+
+
+
+
+ +
+
+show_report_collection(title, reports)[source]
+

show_report_collection displays multiple reports in UI applications.

+

Note: This API function will have no effect outside the UI.

+ +++ + + + + + +
Parameters:reports (ReportCollection) – Reports to display
Return type:None
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.AddressField.html b/personal/api-docs/binaryninja.interaction.AddressField.html new file mode 100644 index 0000000..7fda3c7 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.AddressField.html @@ -0,0 +1,323 @@ + + + + + + + + + + + binaryninja.interaction.AddressField — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.AddressField

+
+
+class AddressField(prompt, view=None, current_address=0)[source]
+

AddressField prompts the user for an address. By passing the optional view and current_address parameters +offsets can be used instead of just an address. The result is stored as in int in self.result.

+
+
Note: This API currently functions differently on the command-line, as the view and current_address are
+
disregarded. Additionally where as in the UI the result defaults to hexadecimal on the command-line 0x must be +specified.
+
+
+
+__init__(prompt, view=None, current_address=0)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(prompt[, view, current_address])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.ChoiceField.html b/personal/api-docs/binaryninja.interaction.ChoiceField.html new file mode 100644 index 0000000..95822a2 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.ChoiceField.html @@ -0,0 +1,330 @@ + + + + + + + + + + + binaryninja.interaction.ChoiceField — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.ChoiceField

+
+
+class ChoiceField(prompt, choices)[source]
+

ChoiceField prompts the user to choose from the list of strings provided in choices. Result is stored +in self.result as an index in to the choices array.

+ +++ + + + + + + + +
Attr str prompt:
 prompt to be presented to the user
Attr list(str) choices:
 list of choices to choose from
+
+
+__init__(prompt, choices)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(prompt, choices)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.DirectoryNameField.html b/personal/api-docs/binaryninja.interaction.DirectoryNameField.html new file mode 100644 index 0000000..bc4ef72 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.DirectoryNameField.html @@ -0,0 +1,318 @@ + + + + + + + + + + + binaryninja.interaction.DirectoryNameField — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.DirectoryNameField

+
+
+class DirectoryNameField(prompt, default_name='')[source]
+

DirectoryNameField prompts the user to specify a directory name to open. Result is stored in self.result as +a string.

+
+
+__init__(prompt, default_name='')[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(prompt[, default_name])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.FlowGraphReport.html b/personal/api-docs/binaryninja.interaction.FlowGraphReport.html new file mode 100644 index 0000000..1a5146e --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.FlowGraphReport.html @@ -0,0 +1,316 @@ + + + + + + + + + + + binaryninja.interaction.FlowGraphReport — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.FlowGraphReport

+
+
+class FlowGraphReport(title, graph, view=None)[source]
+
+
+__init__(title, graph, view=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(title, graph[, view])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.HTMLReport.html b/personal/api-docs/binaryninja.interaction.HTMLReport.html new file mode 100644 index 0000000..1a3151b --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.HTMLReport.html @@ -0,0 +1,316 @@ + + + + + + + + + + + binaryninja.interaction.HTMLReport — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.HTMLReport

+
+
+class HTMLReport(title, contents, plaintext='', view=None)[source]
+
+
+__init__(title, contents, plaintext='', view=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(title, contents[, plaintext, view])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.IntegerField.html b/personal/api-docs/binaryninja.interaction.IntegerField.html new file mode 100644 index 0000000..2721dd7 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.IntegerField.html @@ -0,0 +1,317 @@ + + + + + + + + + + + binaryninja.interaction.IntegerField — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.IntegerField

+
+
+class IntegerField(prompt)[source]
+

IntegerField add prompt for integer. Result is stored in self.result as an int.

+
+
+__init__(prompt)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(prompt)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.InteractionHandler.html b/personal/api-docs/binaryninja.interaction.InteractionHandler.html new file mode 100644 index 0000000..2aacd7e --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.InteractionHandler.html @@ -0,0 +1,361 @@ + + + + + + + + + + + binaryninja.interaction.InteractionHandler — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.InteractionHandler

+
+
+class InteractionHandler[source]
+
+
+__init__()[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__()x.__init__(…) initializes x; see help(type(x)) for signature
get_address_input(prompt, title, view, …)
get_choice_input(prompt, title, choices)
get_directory_name_input(prompt, default_name)
get_form_input(fields, title)
get_int_input(prompt, title)
get_open_filename_input(prompt, ext)
get_save_filename_input(prompt, ext, …)
get_text_line_input(prompt, title)
register()
show_graph_report(view, title, graph)
show_html_report(view, title, contents, …)
show_markdown_report(view, title, contents, …)
show_message_box(title, text, buttons, icon)
show_plain_text_report(view, title, contents)
show_report_collection(title, reports)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.LabelField.html b/personal/api-docs/binaryninja.interaction.LabelField.html new file mode 100644 index 0000000..866c6a2 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.LabelField.html @@ -0,0 +1,317 @@ + + + + + + + + + + + binaryninja.interaction.LabelField — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.LabelField

+
+
+class LabelField(text)[source]
+

LabelField adds a text label to the display.

+
+
+__init__(text)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(text)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.MarkdownReport.html b/personal/api-docs/binaryninja.interaction.MarkdownReport.html new file mode 100644 index 0000000..1fa2ab8 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.MarkdownReport.html @@ -0,0 +1,316 @@ + + + + + + + + + + + binaryninja.interaction.MarkdownReport — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.MarkdownReport

+
+
+class MarkdownReport(title, contents, plaintext='', view=None)[source]
+
+
+__init__(title, contents, plaintext='', view=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(title, contents[, plaintext, view])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.MultilineTextField.html b/personal/api-docs/binaryninja.interaction.MultilineTextField.html new file mode 100644 index 0000000..47ba620 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.MultilineTextField.html @@ -0,0 +1,318 @@ + + + + + + + + + + + binaryninja.interaction.MultilineTextField — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.MultilineTextField

+
+
+class MultilineTextField(prompt)[source]
+

MultilineTextField add multi-line text string input field. Result is stored in self.result +as a string. This option is not supported on the command-line.

+
+
+__init__(prompt)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(prompt)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.OpenFileNameField.html b/personal/api-docs/binaryninja.interaction.OpenFileNameField.html new file mode 100644 index 0000000..9f5f744 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.OpenFileNameField.html @@ -0,0 +1,317 @@ + + + + + + + + + + + binaryninja.interaction.OpenFileNameField — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.OpenFileNameField

+
+
+class OpenFileNameField(prompt, ext='')[source]
+

OpenFileNameField prompts the user to specify a file name to open. Result is stored in self.result as a string.

+
+
+__init__(prompt, ext='')[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(prompt[, ext])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.PlainTextReport.html b/personal/api-docs/binaryninja.interaction.PlainTextReport.html new file mode 100644 index 0000000..757e8b0 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.PlainTextReport.html @@ -0,0 +1,316 @@ + + + + + + + + + + + binaryninja.interaction.PlainTextReport — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.PlainTextReport

+
+
+class PlainTextReport(title, contents, view=None)[source]
+
+
+__init__(title, contents, view=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(title, contents[, view])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.ReportCollection.html b/personal/api-docs/binaryninja.interaction.ReportCollection.html new file mode 100644 index 0000000..30fc336 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.ReportCollection.html @@ -0,0 +1,319 @@ + + + + + + + + + + + binaryninja.interaction.ReportCollection — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.ReportCollection

+
+
+class ReportCollection(handle=None)[source]
+
+
+__init__(handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + +
__init__([handle])x.__init__(…) initializes x; see help(type(x)) for signature
append(report)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.SaveFileNameField.html b/personal/api-docs/binaryninja.interaction.SaveFileNameField.html new file mode 100644 index 0000000..6bf8429 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.SaveFileNameField.html @@ -0,0 +1,317 @@ + + + + + + + + + + + binaryninja.interaction.SaveFileNameField — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.SaveFileNameField

+
+
+class SaveFileNameField(prompt, ext='', default_name='')[source]
+

SaveFileNameField prompts the user to specify a file name to save. Result is stored in self.result as a string.

+
+
+__init__(prompt, ext='', default_name='')[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(prompt[, ext, default_name])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.SeparatorField.html b/personal/api-docs/binaryninja.interaction.SeparatorField.html new file mode 100644 index 0000000..6bbefbc --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.SeparatorField.html @@ -0,0 +1,305 @@ + + + + + + + + + + + binaryninja.interaction.SeparatorField — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.SeparatorField

+
+
+class SeparatorField[source]
+

SeparatorField adds vertical separation to the display.

+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.TextLineField.html b/personal/api-docs/binaryninja.interaction.TextLineField.html new file mode 100644 index 0000000..89f2bba --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.TextLineField.html @@ -0,0 +1,317 @@ + + + + + + + + + + + binaryninja.interaction.TextLineField — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.TextLineField

+
+
+class TextLineField(prompt)[source]
+

TextLineField Adds prompt for text string input. Result is stored in self.result as a string on completion.

+
+
+__init__(prompt)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(prompt)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.get_address_input.html b/personal/api-docs/binaryninja.interaction.get_address_input.html new file mode 100644 index 0000000..dc5e462 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.get_address_input.html @@ -0,0 +1,325 @@ + + + + + + + + + + + binaryninja.interaction.get_address_input — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.get_address_input

+
+
+get_address_input(prompt, title)[source]
+

get_address_input prompts the user for an address with the given prompt and title.

+
+
Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line
+
a simple text prompt is used.
+
+ +++ + + + + + + + +
Parameters:
    +
  • prompt (str) – String to prompt with.
  • +
  • title (str) – Title of the window when executed in the UI.
  • +
+
Return type:

integer value input by the user.

+
Example:
>>> get_address_input("PROMPT>", "getinfo")
+PROMPT> 10
+10L
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.get_choice_input.html b/personal/api-docs/binaryninja.interaction.get_choice_input.html new file mode 100644 index 0000000..e95de81 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.get_choice_input.html @@ -0,0 +1,330 @@ + + + + + + + + + + + binaryninja.interaction.get_choice_input — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.get_choice_input

+
+
+get_choice_input(prompt, title, choices)[source]
+

get_choice_input prompts the user to select the one of the provided choices.

+
+
Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line
+
a simple text prompt is used. The UI uses a combo box.
+
+ +++ + + + + + + + +
Parameters:
    +
  • prompt (str) – String to prompt with.
  • +
  • title (str) – Title of the window when executed in the UI.
  • +
  • choices (list) – A list of strings for the user to choose from.
  • +
+
Return type:

integer array index of the selected option

+
Example:
>>> get_choice_input("PROMPT>", "choices", ["Yes", "No", "Maybe"])
+choices
+1) Yes
+2) No
+3) Maybe
+PROMPT> 1
+0L
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.get_directory_name_input.html b/personal/api-docs/binaryninja.interaction.get_directory_name_input.html new file mode 100644 index 0000000..9d524e5 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.get_directory_name_input.html @@ -0,0 +1,322 @@ + + + + + + + + + + + binaryninja.interaction.get_directory_name_input — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.get_directory_name_input

+
+
+get_directory_name_input(prompt, default_name='')[source]
+

get_directory_name_input prompts the user for a directory name to save as, optionally providing a default_name.

+

Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line a simple text prompt is used. The UI uses the native window pop-up for file selection.

+ +++ + + + + + + + +
Parameters:
    +
  • prompt (str) – Prompt to display.
  • +
  • default_name (str) – Optional, default directory name.
  • +
+
Return type:

str

+
Example:
>>> get_directory_name_input("prompt")
+prompt dirname
+'dirname'
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.get_form_input.html b/personal/api-docs/binaryninja.interaction.get_form_input.html new file mode 100644 index 0000000..29be7f0 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.get_form_input.html @@ -0,0 +1,339 @@ + + + + + + + + + + + binaryninja.interaction.get_form_input — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.get_form_input

+
+
+get_form_input(fields, title)[source]
+

get_from_input Prompts the user for a set of inputs specified in fields with given title. +The fields parameter is a list which can contain the following types:

+
+
    +
  • str - an alias for LabelField
  • +
  • None - an alias for SeparatorField
  • +
  • LabelField - Text output
  • +
  • SeparatorField - Vertical spacing
  • +
  • TextLineField - Prompt for a string value
  • +
  • MultilineTextField - Prompt for multi-line string value
  • +
  • IntegerField - Prompt for an integer
  • +
  • AddressField - Prompt for an address
  • +
  • ChoiceField - Prompt for a choice from provided options
  • +
  • OpenFileNameField - Prompt for file to open
  • +
  • SaveFileNameField - Prompt for file to save to
  • +
  • DirectoryNameField - Prompt for directory name
  • +
+
+

This API is flexible and works both in the UI via a pop-up dialog and on the command-line. +:params list fields: A list containing of the above specified classes, strings or None +:params str title: The title of the pop-up dialog. +:Example:

+
+
>>> int_f = IntegerField("Specify Integer")
+>>> tex_f = TextLineField("Specify name")
+>>> choice_f = ChoiceField("Options", ["Yes", "No", "Maybe"])
+>>> get_form_input(["Get Data", None, int_f, tex_f, choice_f], "The options")
+Get Data
+
+
+

Specify Integer 1337 +Specify name Peter +The options +1) Yes +2) No +3) Maybe +Options 1 +>>> True +>>> print(tex_f.result, int_f.result, choice_f.result) +Peter 1337 0

+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.get_int_input.html b/personal/api-docs/binaryninja.interaction.get_int_input.html new file mode 100644 index 0000000..f96b4ed --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.get_int_input.html @@ -0,0 +1,325 @@ + + + + + + + + + + + binaryninja.interaction.get_int_input — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.get_int_input

+
+
+get_int_input(prompt, title)[source]
+

get_int_input prompts the user to input a integer with the given prompt and title.

+
+
Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line
+
a simple text prompt is used.
+
+ +++ + + + + + + + +
Parameters:
    +
  • prompt (str) – String to prompt with.
  • +
  • title (str) – Title of the window when executed in the UI.
  • +
+
Return type:

integer value input by the user.

+
Example:
>>> get_int_input("PROMPT>", "getinfo")
+PROMPT> 10
+10
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.get_open_filename_input.html b/personal/api-docs/binaryninja.interaction.get_open_filename_input.html new file mode 100644 index 0000000..d0b5d24 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.get_open_filename_input.html @@ -0,0 +1,322 @@ + + + + + + + + + + + binaryninja.interaction.get_open_filename_input — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.get_open_filename_input

+
+
+get_open_filename_input(prompt, ext='')[source]
+

get_open_filename_input prompts the user for a file name to open.

+
+
Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line
+
a simple text prompt is used. The UI uses the native window pop-up for file selection.
+
+ +++ + + + + + +
Parameters:
    +
  • prompt (str) – Prompt to display.
  • +
  • ext (str) – Optional, file extension
  • +
+
Example:
>>> get_open_filename_input("filename:", "exe")
+filename: foo.exe
+'foo.exe'
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.get_save_filename_input.html b/personal/api-docs/binaryninja.interaction.get_save_filename_input.html new file mode 100644 index 0000000..0f1f831 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.get_save_filename_input.html @@ -0,0 +1,324 @@ + + + + + + + + + + + binaryninja.interaction.get_save_filename_input — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.get_save_filename_input

+
+
+get_save_filename_input(prompt, ext='', default_name='')[source]
+

get_save_filename_input prompts the user for a file name to save as, optionally providing a file extension and +default_name.

+
+
Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line
+
a simple text prompt is used. The UI uses the native window pop-up for file selection.
+
+ +++ + + + + + +
Parameters:
    +
  • prompt (str) – Prompt to display.
  • +
  • ext (str) – Optional, file extension
  • +
  • default_name (str) – Optional, default file name.
  • +
+
Example:
>>> get_save_filename_input("filename:", "exe", "foo.exe")
+filename: foo.exe
+'foo.exe'
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.get_text_line_input.html b/personal/api-docs/binaryninja.interaction.get_text_line_input.html new file mode 100644 index 0000000..686764b --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.get_text_line_input.html @@ -0,0 +1,325 @@ + + + + + + + + + + + binaryninja.interaction.get_text_line_input — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.get_text_line_input

+
+
+get_text_line_input(prompt, title)[source]
+

get_text_line_input prompts the user to input a string with the given prompt and title.

+
+
Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line
+
a simple text prompt is used.
+
+ +++ + + + + + + + +
Parameters:
    +
  • prompt (str) – String to prompt with.
  • +
  • title (str) – Title of the window when executed in the UI.
  • +
+
Return type:

string containing the input without trailing newline character.

+
Example:
>>> get_text_line_input("PROMPT>", "getinfo")
+PROMPT> Input!
+'Input!'
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.markdown_to_html.html b/personal/api-docs/binaryninja.interaction.markdown_to_html.html new file mode 100644 index 0000000..e17f6ee --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.markdown_to_html.html @@ -0,0 +1,317 @@ + + + + + + + + + + + binaryninja.interaction.markdown_to_html — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.markdown_to_html

+
+
+markdown_to_html(contents)[source]
+

markdown_to_html converts the provided markdown to HTML.

+ +++ + + + + + + + +
Parameters:

contents (string) – Markdown contents to convert to HTML.

+
Return type:

string

+
Example:
>>> markdown_to_html("##Yay")
+'<h2>Yay</h2>'
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.range.html b/personal/api-docs/binaryninja.interaction.range.html new file mode 100644 index 0000000..682ec84 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.range.html @@ -0,0 +1,299 @@ + + + + + + + + + + + binaryninja.interaction.range — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.range

+
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.show_graph_report.html b/personal/api-docs/binaryninja.interaction.show_graph_report.html new file mode 100644 index 0000000..39f8c4a --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.show_graph_report.html @@ -0,0 +1,310 @@ + + + + + + + + + + + binaryninja.interaction.show_graph_report — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.show_graph_report

+
+
+show_graph_report(title, graph)[source]
+

show_graph_report displays a flow graph in UI applications.

+

Note: This API function will have no effect outside the UI.

+ +++ + + + + + +
Parameters:graph (FlowGraph) – Flow graph to display
Return type:None
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.show_html_report.html b/personal/api-docs/binaryninja.interaction.show_html_report.html new file mode 100644 index 0000000..fc55a06 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.show_html_report.html @@ -0,0 +1,326 @@ + + + + + + + + + + + binaryninja.interaction.show_html_report — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.show_html_report

+
+
+show_html_report(title, contents, plaintext='')[source]
+

show_html_report displays the HTML contents in UI applications and plaintext in command-line +applications. This API doesn’t support hyperlinking into the BinaryView, use the BinaryView.show_html_report +if hyperlinking is needed.

+
+
Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line
+
a simple text prompt is used.
+
+ +++ + + + + + + + +
Parameters:
    +
  • contents (str) – HTML contents to display
  • +
  • plaintext (str) – Plain text version to display (used on the command-line)
  • +
+
Return type:

None

+
Example:
>>> show_html_report("title", "<h1>Contents</h1>", "Plain text contents")
+Plain text contents
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.show_markdown_report.html b/personal/api-docs/binaryninja.interaction.show_markdown_report.html new file mode 100644 index 0000000..2227994 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.show_markdown_report.html @@ -0,0 +1,326 @@ + + + + + + + + + + + binaryninja.interaction.show_markdown_report — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.show_markdown_report

+
+
+show_markdown_report(title, contents, plaintext='')[source]
+

show_markdown_report displays the markdown contents in UI applications and plaintext in command-line +applications. This API doesn’t support hyperlinking into the BinaryView, use the BinaryView.show_markdown_report +if hyperlinking is needed.

+
+
Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line
+
a simple text prompt is used.
+
+ +++ + + + + + + + +
Parameters:
    +
  • contents (str) – markdown contents to display
  • +
  • plaintext (str) – Plain text version to display (used on the command-line)
  • +
+
Return type:

None

+
Example:
>>> show_markdown_report("title", "##Contents", "Plain text contents")
+Plain text contents
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.show_message_box.html b/personal/api-docs/binaryninja.interaction.show_message_box.html new file mode 100644 index 0000000..3c944fe --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.show_message_box.html @@ -0,0 +1,321 @@ + + + + + + + + + + + binaryninja.interaction.show_message_box — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.show_message_box

+
+
+show_message_box(title, text, buttons=<MessageBoxButtonSet.OKButtonSet: 0>, icon=<MessageBoxIcon.InformationIcon: 0>)[source]
+

show_message_box Displays a configurable message box in the UI, or prompts on the console as appropriate +retrieves a list of all Symbol objects of the provided symbol type in the optionally +provided range.

+ +++ + + + + + + + +
Parameters:
    +
  • title (str) – Text title for the message box.
  • +
  • text (str) – Text for the main body of the message box.
  • +
  • buttons (MessageBoxButtonSet) – One of MessageBoxButtonSet
  • +
  • icon (MessageBoxIcon) – One of MessageBoxIcon
  • +
+
Returns:

Which button was selected

+
Return type:

MessageBoxButtonResult

+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.show_plain_text_report.html b/personal/api-docs/binaryninja.interaction.show_plain_text_report.html new file mode 100644 index 0000000..34b4b19 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.show_plain_text_report.html @@ -0,0 +1,324 @@ + + + + + + + + + + + binaryninja.interaction.show_plain_text_report — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.show_plain_text_report

+
+
+show_plain_text_report(title, contents)[source]
+

show_plain_text_report displays contents to the user in the UI or on the command-line.

+
+
Note: This API function differently on the command-line vs the UI. In the UI a pop-up is used. On the command-line
+
a simple text prompt is used.
+
+ +++ + + + + + + + +
Parameters:
    +
  • title (str) – title to display in the UI pop-up.
  • +
  • contents (str) – plaintext contents to display
  • +
+
Return type:

None

+
Example:
>>> show_plain_text_report("title", "contents")
+contents
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.interaction.show_report_collection.html b/personal/api-docs/binaryninja.interaction.show_report_collection.html new file mode 100644 index 0000000..011d512 --- /dev/null +++ b/personal/api-docs/binaryninja.interaction.show_report_collection.html @@ -0,0 +1,310 @@ + + + + + + + + + + + binaryninja.interaction.show_report_collection — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.interaction.show_report_collection

+
+
+show_report_collection(title, reports)[source]
+

show_report_collection displays multiple reports in UI applications.

+

Note: This API function will have no effect outside the UI.

+ +++ + + + + + +
Parameters:reports (ReportCollection) – Reports to display
Return type:None
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lineardisassembly-module.html b/personal/api-docs/binaryninja.lineardisassembly-module.html new file mode 100644 index 0000000..ddbc16e --- /dev/null +++ b/personal/api-docs/binaryninja.lineardisassembly-module.html @@ -0,0 +1,293 @@ + + + + + + + + + + + lineardisassembly module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

lineardisassembly module

+ ++++ + + + + + + + + +
binaryninja.lineardisassembly.LinearDisassemblyLine(…)
binaryninja.lineardisassembly.LinearDisassemblyPosition(…)class LinearDisassemblyPosition is a helper object containing the position of the current Linear Disassembly.
+
+
+
+
+class LinearDisassemblyLine(line_type, func, block, line_offset, contents)[source]
+

Bases: object

+
+ +
+
+class LinearDisassemblyPosition(func, block, addr)[source]
+

Bases: object

+

class LinearDisassemblyPosition is a helper object containing the position of the current Linear Disassembly.

+
+

Note

+

This object should not be instantiated directly. Rather call get_linear_disassembly_position_at() which instantiates this object.

+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lineardisassembly.LinearDisassemblyLine.html b/personal/api-docs/binaryninja.lineardisassembly.LinearDisassemblyLine.html new file mode 100644 index 0000000..3a9aff4 --- /dev/null +++ b/personal/api-docs/binaryninja.lineardisassembly.LinearDisassemblyLine.html @@ -0,0 +1,286 @@ + + + + + + + + + + + binaryninja.lineardisassembly.LinearDisassemblyLine — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lineardisassembly.LinearDisassemblyLine

+
+
+class LinearDisassemblyLine(line_type, func, block, line_offset, contents)[source]
+
+
+__init__(line_type, func, block, line_offset, contents)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(line_type, func, block, …)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lineardisassembly.LinearDisassemblyPosition.html b/personal/api-docs/binaryninja.lineardisassembly.LinearDisassemblyPosition.html new file mode 100644 index 0000000..452fcf2 --- /dev/null +++ b/personal/api-docs/binaryninja.lineardisassembly.LinearDisassemblyPosition.html @@ -0,0 +1,291 @@ + + + + + + + + + + + binaryninja.lineardisassembly.LinearDisassemblyPosition — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lineardisassembly.LinearDisassemblyPosition

+
+
+class LinearDisassemblyPosition(func, block, addr)[source]
+

class LinearDisassemblyPosition is a helper object containing the position of the current Linear Disassembly.

+
+

Note

+

This object should not be instantiated directly. Rather call get_linear_disassembly_position_at() which instantiates this object.

+
+
+
+__init__(func, block, addr)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(func, block, addr)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.log-module.html b/personal/api-docs/binaryninja.log-module.html new file mode 100644 index 0000000..7ab80fd --- /dev/null +++ b/personal/api-docs/binaryninja.log-module.html @@ -0,0 +1,591 @@ + + + + + + + + + + + log module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

log module

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
binaryninja.log.close_logs()close_logs close all log files.
binaryninja.log.is_output_redirected_to_log()
binaryninja.log.log(level, text)log writes messages to the log console for the given log level.
binaryninja.log.log_alert(text)log_alert Logs message console and to a pop up window if run through the GUI.
binaryninja.log.log_debug(text)log_debug Logs debugging information messages to the console.
binaryninja.log.log_error(text)log_error Logs message to console, if run through the GUI it logs with Error icon, focusing the error console.
binaryninja.log.log_info(text)log_info Logs general information messages to the console.
binaryninja.log.log_to_file(min_level, path)log_to_file redirects minimum log level to a file named path, optionally appending rather than overwriting.
binaryninja.log.log_to_stderr(min_level)log_to_stderr redirects minimum log level to standard error.
binaryninja.log.log_to_stdout([min_level])log_to_stdout redirects minimum log level to standard out.
binaryninja.log.log_warn(text)log_warn Logs message to console, if run through the GUI it logs with Warning icon.
binaryninja.log.redirect_output_to_log()
+
+
+
+
+close_logs()[source]
+

close_logs close all log files.

+ +++ + + + +
Return type:None
+
+ +
+
+is_output_redirected_to_log()[source]
+
+ +
+
+log(level, text)[source]
+

log writes messages to the log console for the given log level.

+
+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LogLevelNameLogLevelDescription
DebugLog0Logs debuging information messages to the console.
InfoLog1Logs general information messages to the console.
WarningLog2Logs message to console with Warning icon.
ErrorLog3Logs message to console with Error icon, focusing the error console.
AlertLog4Logs message to pop up window.
+
+ +++ + + + + + +
Parameters:
    +
  • level (LogLevel) – Log level to use
  • +
  • text (str) – message to print
  • +
+
Return type:

None

+
+
+ +
+
+log_alert(text)[source]
+

log_alert Logs message console and to a pop up window if run through the GUI.

+ +++ + + + + + + + +
Parameters:

text (str) – message to print

+
Return type:

None

+
Example:
>>> log_to_stdout(LogLevel.DebugLog)
+>>> log_alert("Kielbasa!")
+Kielbasa!
+>>>
+
+
+
+
+ +
+
+log_debug(text)[source]
+

log_debug Logs debugging information messages to the console.

+ +++ + + + + + + + +
Parameters:

text (str) – message to print

+
Return type:

None

+
Example:
>>> log_to_stdout(LogLevel.DebugLog)
+>>> log_debug("Hotdogs!")
+Hotdogs!
+
+
+
+
+ +
+
+log_error(text)[source]
+

log_error Logs message to console, if run through the GUI it logs with Error icon, focusing the error console.

+ +++ + + + + + + + +
Parameters:

text (str) – message to print

+
Return type:

None

+
Example:
>>> log_to_stdout(LogLevel.DebugLog)
+>>> log_error("Spanferkel!")
+Spanferkel!
+>>>
+
+
+
+
+ +
+
+log_info(text)[source]
+

log_info Logs general information messages to the console.

+ +++ + + + + + + + +
Parameters:

text (str) – message to print

+
Return type:

None

+
Example:
>>> log_info("Saucisson!")
+Saucisson!
+>>>
+
+
+
+
+ +
+
+log_to_file(min_level, path, append=False)[source]
+

log_to_file redirects minimum log level to a file named path, optionally appending rather than overwriting.

+ +++ + + + + + +
Parameters:
    +
  • min_level (int) – minimum level to log to
  • +
  • path (str) – path to log to
  • +
  • append (bool) – optional flag for specifying appending. True = append, False = overwrite.
  • +
+
Return type:

None

+
+
+ +
+
+log_to_stderr(min_level)[source]
+

log_to_stderr redirects minimum log level to standard error.

+ +++ + + + + + +
Parameters:min_level (int) – minimum level to log to
Return type:None
+
+ +
+
+log_to_stdout(min_level=<LogLevel.InfoLog: 1>)[source]
+

log_to_stdout redirects minimum log level to standard out.

+ +++ + + + + + + + +
Parameters:

min_level (int) – minimum level to log to

+
Return type:

None

+
Example:
>>> log_debug("Hotdogs!")
+>>> log_to_stdout(LogLevel.DebugLog)
+>>> log_debug("Hotdogs!")
+Hotdogs!
+>>>
+
+
+
+
+ +
+
+log_warn(text)[source]
+

log_warn Logs message to console, if run through the GUI it logs with Warning icon.

+ +++ + + + + + + + +
Parameters:

text (str) – message to print

+
Return type:

None

+
Example:
>>> log_to_stdout(LogLevel.DebugLog)
+>>> log_info("Chilidogs!")
+Chilidogs!
+>>>
+
+
+
+
+ +
+
+redirect_output_to_log()[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.log.close_logs.html b/personal/api-docs/binaryninja.log.close_logs.html new file mode 100644 index 0000000..4e46a0c --- /dev/null +++ b/personal/api-docs/binaryninja.log.close_logs.html @@ -0,0 +1,287 @@ + + + + + + + + + + + binaryninja.log.close_logs — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.log.close_logs

+
+
+close_logs()[source]
+

close_logs close all log files.

+ +++ + + + +
Return type:None
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.log.is_output_redirected_to_log.html b/personal/api-docs/binaryninja.log.is_output_redirected_to_log.html new file mode 100644 index 0000000..8481418 --- /dev/null +++ b/personal/api-docs/binaryninja.log.is_output_redirected_to_log.html @@ -0,0 +1,278 @@ + + + + + + + + + + + binaryninja.log.is_output_redirected_to_log — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.log.is_output_redirected_to_log

+
+
+is_output_redirected_to_log()[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.log.log.html b/personal/api-docs/binaryninja.log.log.html new file mode 100644 index 0000000..fc485d1 --- /dev/null +++ b/personal/api-docs/binaryninja.log.log.html @@ -0,0 +1,331 @@ + + + + + + + + + + + binaryninja.log.log — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.log.log

+
+
+log(level, text)[source]
+

log writes messages to the log console for the given log level.

+
+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LogLevelNameLogLevelDescription
DebugLog0Logs debuging information messages to the console.
InfoLog1Logs general information messages to the console.
WarningLog2Logs message to console with Warning icon.
ErrorLog3Logs message to console with Error icon, focusing the error console.
AlertLog4Logs message to pop up window.
+
+ +++ + + + + + +
Parameters:
    +
  • level (LogLevel) – Log level to use
  • +
  • text (str) – message to print
  • +
+
Return type:

None

+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.log.log_alert.html b/personal/api-docs/binaryninja.log.log_alert.html new file mode 100644 index 0000000..b82396c --- /dev/null +++ b/personal/api-docs/binaryninja.log.log_alert.html @@ -0,0 +1,299 @@ + + + + + + + + + + + binaryninja.log.log_alert — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.log.log_alert

+
+
+log_alert(text)[source]
+

log_alert Logs message console and to a pop up window if run through the GUI.

+ +++ + + + + + + + +
Parameters:

text (str) – message to print

+
Return type:

None

+
Example:
>>> log_to_stdout(LogLevel.DebugLog)
+>>> log_alert("Kielbasa!")
+Kielbasa!
+>>>
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.log.log_debug.html b/personal/api-docs/binaryninja.log.log_debug.html new file mode 100644 index 0000000..9480b0a --- /dev/null +++ b/personal/api-docs/binaryninja.log.log_debug.html @@ -0,0 +1,298 @@ + + + + + + + + + + + binaryninja.log.log_debug — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.log.log_debug

+
+
+log_debug(text)[source]
+

log_debug Logs debugging information messages to the console.

+ +++ + + + + + + + +
Parameters:

text (str) – message to print

+
Return type:

None

+
Example:
>>> log_to_stdout(LogLevel.DebugLog)
+>>> log_debug("Hotdogs!")
+Hotdogs!
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.log.log_error.html b/personal/api-docs/binaryninja.log.log_error.html new file mode 100644 index 0000000..cbdba49 --- /dev/null +++ b/personal/api-docs/binaryninja.log.log_error.html @@ -0,0 +1,299 @@ + + + + + + + + + + + binaryninja.log.log_error — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.log.log_error

+
+
+log_error(text)[source]
+

log_error Logs message to console, if run through the GUI it logs with Error icon, focusing the error console.

+ +++ + + + + + + + +
Parameters:

text (str) – message to print

+
Return type:

None

+
Example:
>>> log_to_stdout(LogLevel.DebugLog)
+>>> log_error("Spanferkel!")
+Spanferkel!
+>>>
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.log.log_info.html b/personal/api-docs/binaryninja.log.log_info.html new file mode 100644 index 0000000..4681fc0 --- /dev/null +++ b/personal/api-docs/binaryninja.log.log_info.html @@ -0,0 +1,298 @@ + + + + + + + + + + + binaryninja.log.log_info — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.log.log_info

+
+
+log_info(text)[source]
+

log_info Logs general information messages to the console.

+ +++ + + + + + + + +
Parameters:

text (str) – message to print

+
Return type:

None

+
Example:
>>> log_info("Saucisson!")
+Saucisson!
+>>>
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.log.log_to_file.html b/personal/api-docs/binaryninja.log.log_to_file.html new file mode 100644 index 0000000..943722b --- /dev/null +++ b/personal/api-docs/binaryninja.log.log_to_file.html @@ -0,0 +1,295 @@ + + + + + + + + + + + binaryninja.log.log_to_file — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.log.log_to_file

+
+
+log_to_file(min_level, path, append=False)[source]
+

log_to_file redirects minimum log level to a file named path, optionally appending rather than overwriting.

+ +++ + + + + + +
Parameters:
    +
  • min_level (int) – minimum level to log to
  • +
  • path (str) – path to log to
  • +
  • append (bool) – optional flag for specifying appending. True = append, False = overwrite.
  • +
+
Return type:

None

+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.log.log_to_stderr.html b/personal/api-docs/binaryninja.log.log_to_stderr.html new file mode 100644 index 0000000..ef29c2c --- /dev/null +++ b/personal/api-docs/binaryninja.log.log_to_stderr.html @@ -0,0 +1,289 @@ + + + + + + + + + + + binaryninja.log.log_to_stderr — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.log.log_to_stderr

+
+
+log_to_stderr(min_level)[source]
+

log_to_stderr redirects minimum log level to standard error.

+ +++ + + + + + +
Parameters:min_level (int) – minimum level to log to
Return type:None
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.log.log_to_stdout.html b/personal/api-docs/binaryninja.log.log_to_stdout.html new file mode 100644 index 0000000..a0174ad --- /dev/null +++ b/personal/api-docs/binaryninja.log.log_to_stdout.html @@ -0,0 +1,300 @@ + + + + + + + + + + + binaryninja.log.log_to_stdout — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.log.log_to_stdout

+
+
+log_to_stdout(min_level=<LogLevel.InfoLog: 1>)[source]
+

log_to_stdout redirects minimum log level to standard out.

+ +++ + + + + + + + +
Parameters:

min_level (int) – minimum level to log to

+
Return type:

None

+
Example:
>>> log_debug("Hotdogs!")
+>>> log_to_stdout(LogLevel.DebugLog)
+>>> log_debug("Hotdogs!")
+Hotdogs!
+>>>
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.log.log_warn.html b/personal/api-docs/binaryninja.log.log_warn.html new file mode 100644 index 0000000..f56a99c --- /dev/null +++ b/personal/api-docs/binaryninja.log.log_warn.html @@ -0,0 +1,299 @@ + + + + + + + + + + + binaryninja.log.log_warn — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.log.log_warn

+
+
+log_warn(text)[source]
+

log_warn Logs message to console, if run through the GUI it logs with Warning icon.

+ +++ + + + + + + + +
Parameters:

text (str) – message to print

+
Return type:

None

+
Example:
>>> log_to_stdout(LogLevel.DebugLog)
+>>> log_info("Chilidogs!")
+Chilidogs!
+>>>
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.log.redirect_output_to_log.html b/personal/api-docs/binaryninja.log.redirect_output_to_log.html new file mode 100644 index 0000000..877190a --- /dev/null +++ b/personal/api-docs/binaryninja.log.redirect_output_to_log.html @@ -0,0 +1,278 @@ + + + + + + + + + + + binaryninja.log.redirect_output_to_log — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.log.redirect_output_to_log

+
+
+redirect_output_to_log()[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil-module.html b/personal/api-docs/binaryninja.lowlevelil-module.html new file mode 100644 index 0000000..50ac62d --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil-module.html @@ -0,0 +1,3472 @@ + + + + + + + + + + + lowlevelil module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

lowlevelil module

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
binaryninja.lowlevelil.ILFlag(arch, flag)
binaryninja.lowlevelil.ILIntrinsic(arch, …)
binaryninja.lowlevelil.ILRegister(arch, reg)
binaryninja.lowlevelil.ILRegisterStack(arch, …)
binaryninja.lowlevelil.ILSemanticFlagClass(…)
binaryninja.lowlevelil.ILSemanticFlagGroup(…)
binaryninja.lowlevelil.LowLevelILBasicBlock(…)
binaryninja.lowlevelil.LowLevelILExpr(index)class LowLevelILExpr hold the index of IL Expressions.
binaryninja.lowlevelil.LowLevelILFunction([…])class LowLevelILFunction contains the list of LowLevelILExpr objects that make up a binaryninja.function.
binaryninja.lowlevelil.LowLevelILInstruction(…)class LowLevelILInstruction Low Level Intermediate Language Instructions are infinite length tree-based instructions.
binaryninja.lowlevelil.LowLevelILLabel([handle])
binaryninja.lowlevelil.LowLevelILOperationAndSize(…)
binaryninja.lowlevelil.SSAFlag(flag, version)
binaryninja.lowlevelil.SSARegister(reg, version)
binaryninja.lowlevelil.SSARegisterOrFlag(…)
binaryninja.lowlevelil.SSARegisterStack(…)
binaryninja.lowlevelil.LLIL_GET_TEMP_REG_INDEX(n)
binaryninja.lowlevelil.LLIL_REG_IS_TEMP(n)
binaryninja.lowlevelil.LLIL_TEMP(n)
binaryninja.lowlevelil.range(*args)A Python2 and Python3 Compatible Range Generator
+
+
+
+
+class ILFlag(arch, flag)[source]
+

Bases: object

+
+ +
+
+class ILIntrinsic(arch, intrinsic)[source]
+

Bases: object

+
+ +
+
+class ILRegister(arch, reg)[source]
+

Bases: object

+
+
+info
+
+ +
+ +
+
+class ILRegisterStack(arch, reg_stack)[source]
+

Bases: object

+
+
+info
+
+ +
+ +
+
+class ILSemanticFlagClass(arch, sem_class)[source]
+

Bases: object

+
+ +
+
+class ILSemanticFlagGroup(arch, sem_group)[source]
+

Bases: object

+
+ +
+
+class LowLevelILBasicBlock(view, handle, owner)[source]
+

Bases: binaryninja.basicblock.BasicBlock

+
+ +
+
+class LowLevelILExpr(index)[source]
+

Bases: object

+

class LowLevelILExpr hold the index of IL Expressions.

+
+

Note

+

This class shouldn’t be instantiated directly. Rather the helper members of LowLevelILFunction should be used instead.

+
+
+ +
+
+class LowLevelILFunction(arch=None, handle=None, source_func=None)[source]
+

Bases: object

+

class LowLevelILFunction contains the list of LowLevelILExpr objects that make up a binaryninja.function. LowLevelILExpr +objects can be added to the LowLevelILFunction by calling append and passing the result of the various class +methods which return LowLevelILExpr objects.

+

LowLevelILFlagCondition values used as parameters in the flag_condition method.

+
+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LowLevelILFlagConditionOperatorDescription
LLFC_E==Equal
LLFC_NE!=Not equal
LLFC_SLTs<Signed less than
LLFC_ULTu<Unsigned less than
LLFC_SLEs<=Signed less than or equal
LLFC_ULEu<=Unsigned less than or equal
LLFC_SGEs>=Signed greater than or equal
LLFC_UGEu>=Unsigned greater than or equal
LLFC_SGTs>Signed greater than
LLFC_UGTu>Unsigned greater than
LLFC_NEG
    +
  • +
+
Negative
LLFC_POS
    +
  • +
+
Positive
LLFC_OoverflowOverflow
LLFC_NO!overflowNo overflow
+
+
+
+add(size, a, b, flags=None)[source]
+

add adds expression a to expression b potentially setting flags flags and returning +an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression add.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+add_carry(size, a, b, carry, flags=None)[source]
+

add_carry adds with carry expression a to expression b potentially setting flags flags and +returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression adc.<size>{<flags>}(a, b, carry)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+add_label_for_address(arch, addr)[source]
+

add_label_for_address adds a low-level IL label for the given architecture arch at the given virtual +address addr

+ +++ + + + +
Parameters:
    +
  • arch (Architecture) – Architecture to add labels for
  • +
  • addr (int) – the IL address to add a label at
  • +
+
+
+ +
+
+add_label_list(labels)[source]
+

add_label_list returns a label list expression for the given list of LowLevelILLabel objects.

+ +++ + + + + + + + +
Parameters:lables (list(LowLevelILLabel)) – the list of LowLevelILLabel to get a label list expression from
Returns:the label list expression
Return type:LowLevelILExpr
+
+ +
+
+add_operand_list(operands)[source]
+

add_operand_list returns an operand list expression for the given list of integer operands.

+ +++ + + + + + + + +
Parameters:operands (list(int)) – list of operand numbers
Returns:an operand list expression
Return type:LowLevelILExpr
+
+ +
+
+and_expr(size, a, b, flags=None)[source]
+

and_expr bitwise and’s expression a and expression b potentially setting flags flags +and returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression and.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+append(expr)[source]
+

append adds the LowLevelILExpr expr to the current LowLevelILFunction.

+ +++ + + + + + + + +
Parameters:expr (LowLevelILExpr) – the LowLevelILExpr to add to the current LowLevelILFunction
Returns:number of LowLevelILExpr in the current function
Return type:int
+
+ +
+
+arith_shift_right(size, a, b, flags=None)[source]
+

arith_shift_right shifts arithmatic right expression a by expression b potentially setting flags +flags and returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression asr.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+breakpoint()[source]
+

breakpoint returns a processor breakpoint expression.

+ +++ + + + + + +
Returns:a breakpoint expression.
Return type:LowLevelILExpr
+
+ +
+
+call(dest)[source]
+

call returns an expression which first pushes the address of the next instruction onto the stack then jumps +(branches) to the expression dest

+ +++ + + + + + + + +
Parameters:dest (LowLevelILExpr) – the expression to call
Returns:The expression call(dest)
Return type:LowLevelILExpr
+
+ +
+
+call_stack_adjust(dest, stack_adjust)[source]
+

call_stack_adjust returns an expression which first pushes the address of the next instruction onto the stack +then jumps (branches) to the expression dest. After the function exits, stack_adjust is added to the +stack pointer register.

+ +++ + + + + + + + +
Parameters:dest (LowLevelILExpr) – the expression to call
Returns:The expression call(dest), stack += stack_adjust
Return type:LowLevelILExpr
+
+ +
+
+ceil(size, value, flags=None)[source]
+

ceil rounds a floating point value to an integer towards positive infinity

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the result in bytes
  • +
  • value (LowLevelILExpr) – the expression to negate
  • +
  • flags (str) – optional, flags to set
  • +
+
Returns:

The expression roundint.<size>{<flags>}(value)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+clear_indirect_branches()[source]
+
+ +
+
+compare_equal(size, a, b)[source]
+

compare_equal returns comparison expression of size size checking if expression a is equal to +expression b

+ +++ + + + + + + + +
Parameters: +
Returns:

a comparison expression.

+
Return type:

LowLevelILExpr

+
+
+ +
+
+compare_not_equal(size, a, b)[source]
+

compare_not_equal returns comparison expression of size size checking if expression a is not equal to +expression b

+ +++ + + + + + + + +
Parameters: +
Returns:

a comparison expression.

+
Return type:

LowLevelILExpr

+
+
+ +
+
+compare_signed_greater_equal(size, a, b)[source]
+

compare_signed_greater_equal returns comparison expression of size size checking if expression a is +signed greater than or equal to expression b

+ +++ + + + + + + + +
Parameters: +
Returns:

a comparison expression.

+
Return type:

LowLevelILExpr

+
+
+ +
+
+compare_signed_greater_than(size, a, b)[source]
+

compare_signed_greater_than returns comparison expression of size size checking if expression a is +signed greater than or equal to expression b

+ +++ + + + + + + + +
Parameters: +
Returns:

a comparison expression.

+
Return type:

LowLevelILExpr

+
+
+ +
+
+compare_signed_less_equal(size, a, b)[source]
+

compare_signed_less_equal returns comparison expression of size size checking if expression a is +signed less than or equal to expression b

+ +++ + + + + + + + +
Parameters: +
Returns:

a comparison expression.

+
Return type:

LowLevelILExpr

+
+
+ +
+
+compare_signed_less_than(size, a, b)[source]
+

compare_signed_less_than returns comparison expression of size size checking if expression a is +signed less than expression b

+ +++ + + + + + + + +
Parameters: +
Returns:

a comparison expression.

+
Return type:

LowLevelILExpr

+
+
+ +
+
+compare_unsigned_greater_equal(size, a, b)[source]
+

compare_unsigned_greater_equal returns comparison expression of size size checking if expression a +is unsigned greater than or equal to expression b

+ +++ + + + + + + + +
Parameters: +
Returns:

a comparison expression.

+
Return type:

LowLevelILExpr

+
+
+ +
+
+compare_unsigned_greater_than(size, a, b)[source]
+

compare_unsigned_greater_than returns comparison expression of size size checking if expression a is +unsigned greater than or equal to expression b

+ +++ + + + + + + + +
Parameters: +
Returns:

a comparison expression.

+
Return type:

LowLevelILExpr

+
+
+ +
+
+compare_unsigned_less_equal(size, a, b)[source]
+

compare_unsigned_less_equal returns comparison expression of size size checking if expression a is +unsigned less than or equal to expression b

+ +++ + + + + + + + +
Parameters: +
Returns:

a comparison expression.

+
Return type:

LowLevelILExpr

+
+
+ +
+
+compare_unsigned_less_than(size, a, b)[source]
+

compare_unsigned_less_than returns comparison expression of size size checking if expression a is +unsigned less than expression b

+ +++ + + + + + + + +
Parameters: +
Returns:

a comparison expression.

+
Return type:

LowLevelILExpr

+
+
+ +
+
+const(size, value)[source]
+

const returns an expression for the constant integer value with size size

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the constant in bytes
  • +
  • value (int) – integer value of the constant
  • +
+
Returns:

A constant expression of given value and size

+
Return type:

LowLevelILExpr

+
+
+ +
+
+const_pointer(size, value)[source]
+

const_pointer returns an expression for the constant pointer value with size size

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the pointer in bytes
  • +
  • value (int) – address referenced by pointer
  • +
+
Returns:

A constant expression of given value and size

+
Return type:

LowLevelILExpr

+
+
+ +
+
+create_graph(settings=None)[source]
+
+ +
+
+div_double_prec_signed(size, a, b, flags=None)[source]
+

div_double_prec_signed signed double precision divide using expression a as a +single double precision register by expression b potentially setting flags flags and returning an +expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression divs.dp.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+div_double_prec_unsigned(size, a, b, flags=None)[source]
+

div_double_prec_unsigned unsigned double precision divide using expression a as +a single double precision register by expression b potentially setting flags flags and returning an +expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression divu.dp.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+div_signed(size, a, b, flags=None)[source]
+

div_signed signed divide expression a by expression b potentially setting flags flags +and returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression divs.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+div_unsigned(size, a, b, flags=None)[source]
+

div_unsigned unsigned divide expression a by expression b potentially setting flags flags +and returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression divu.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+expr(operation, a=0, b=0, c=0, d=0, size=0, flags=None)[source]
+
+ +
+
+finalize()[source]
+

finalize ends the function and computes the list of basic blocks.

+ +++ + + + +
Return type:None
+
+ +
+
+flag(reg)[source]
+

flag returns a flag expression for the given flag name.

+ +++ + + + + + + + +
Parameters:reg (str) – name of the flag expression to retrieve
Returns:A flag expression of given flag name
Return type:LowLevelILExpr
+
+ +
+
+flag_bit(size, reg, bit)[source]
+

flag_bit sets the flag named reg and size size to the constant integer value bit

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the flag
  • +
  • reg (str) – flag value
  • +
  • bit (int) – integer value to set the bit to
  • +
+
Returns:

A constant expression of given value and size FLAG.reg = bit

+
Return type:

LowLevelILExpr

+
+
+ +
+
+flag_condition(cond, sem_class=None)[source]
+

flag_condition returns a flag_condition expression for the given LowLevelILFlagCondition

+ +++ + + + + + + + +
Parameters: +
Returns:

A flag_condition expression

+
Return type:

LowLevelILExpr

+
+
+ +
+
+flag_group(sem_group)[source]
+

flag_group returns a flag_group expression for the given semantic flag group

+ +++ + + + + + + + +
Parameters:sem_group (str) – Semantic flag group to access
Returns:A flag_group expression
Return type:LowLevelILExpr
+
+ +
+
+float_abs(size, value, flags=None)[source]
+

float_abs returns absolute value of floating point expression value of size size potentially setting flags

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the result in bytes
  • +
  • value (LowLevelILExpr) – the expression to negate
  • +
  • flags (str) – optional, flags to set
  • +
+
Returns:

The expression fabs.<size>{<flags>}(value)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+float_add(size, a, b, flags=None)[source]
+

float_add adds floating point expression a to expression b potentially setting flags flags +and returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression fadd.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+float_compare_equal(size, a, b)[source]
+

float_compare_equal returns floating point comparison expression of size size checking if +expression a is equal to expression b

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression a f== b

+
Return type:

LowLevelILExpr

+
+
+ +
+
+float_compare_greater_equal(size, a, b)[source]
+

float_compare_greater_equal returns floating point comparison expression of size size checking if +expression a is greater than or equal to expression b

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression a f>= b

+
Return type:

LowLevelILExpr

+
+
+ +
+
+float_compare_greater_than(size, a, b)[source]
+

float_compare_greater_than returns floating point comparison expression of size size checking if +expression a is greater than or equal to expression b

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression a f> b

+
Return type:

LowLevelILExpr

+
+
+ +
+
+float_compare_less_equal(size, a, b)[source]
+

float_compare_less_equal returns floating point comparison expression of size size checking if +expression a is less than or equal to expression b

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression a f<= b

+
Return type:

LowLevelILExpr

+
+
+ +
+
+float_compare_less_than(size, a, b)[source]
+

float_compare_less_than returns floating point comparison expression of size size checking if +expression a is less than to expression b

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression a f< b

+
Return type:

LowLevelILExpr

+
+
+ +
+
+float_compare_not_equal(size, a, b)[source]
+

float_compare_not_equal returns floating point comparison expression of size size checking if +expression a is not equal to expression b

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression a f!= b

+
Return type:

LowLevelILExpr

+
+
+ +
+
+float_compare_unordered(size, a, b)[source]
+

float_compare_unordered returns floating point comparison expression of size size checking if +expression a is unordered relative to expression b

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression is_unordered(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+float_const_double(value)[source]
+

float_const_double returns an expression for the double precision floating point value value

+ +++ + + + + + + + +
Parameters:value (float) – float value for the constant
Returns:A constant expression of given value and size
Return type:LowLevelILExpr
+
+ +
+
+float_const_raw(size, value)[source]
+

float_const_raw returns an expression for the constant raw binary floating point +value value with size size

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the constant in bytes
  • +
  • value (int) – integer value for the raw binary representation of the constant
  • +
+
Returns:

A constant expression of given value and size

+
Return type:

LowLevelILExpr

+
+
+ +
+
+float_const_single(value)[source]
+

float_const_single returns an expression for the single precision floating point value value

+ +++ + + + + + + + +
Parameters:value (float) – float value for the constant
Returns:A constant expression of given value and size
Return type:LowLevelILExpr
+
+ +
+
+float_convert(size, value, flags=None)[source]
+

int_to_float converts floating point value of expression value to size size potentially setting flags

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the result in bytes
  • +
  • value (LowLevelILExpr) – the expression to negate
  • +
  • flags (str) – optional, flags to set
  • +
+
Returns:

The expression fconvert.<size>{<flags>}(value)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+float_div(size, a, b, flags=None)[source]
+

float_div divides floating point expression a by expression b potentially setting flags flags +and returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression fdiv.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+float_mult(size, a, b, flags=None)[source]
+

float_mult multiplies floating point expression a by expression b potentially setting flags flags +and returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression fmul.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+float_neg(size, value, flags=None)[source]
+

float_neg returns sign negation of floating point expression value of size size potentially setting flags

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the result in bytes
  • +
  • value (LowLevelILExpr) – the expression to negate
  • +
  • flags (str) – optional, flags to set
  • +
+
Returns:

The expression fneg.<size>{<flags>}(value)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+float_sqrt(size, value, flags=None)[source]
+

float_sqrt returns square root of floating point expression value of size size potentially setting flags

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the result in bytes
  • +
  • value (LowLevelILExpr) – the expression to negate
  • +
  • flags (str) – optional, flags to set
  • +
+
Returns:

The expression sqrt.<size>{<flags>}(value)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+float_sub(size, a, b, flags=None)[source]
+

float_sub subtracts floating point expression b from expression a potentially setting flags flags +and returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression fsub.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+float_to_int(size, value, flags=None)[source]
+

float_to_int returns integer value of floating point expression value of size size potentially setting flags

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the result in bytes
  • +
  • value (LowLevelILExpr) – the expression to negate
  • +
  • flags (str) – optional, flags to set
  • +
+
Returns:

The expression int.<size>{<flags>}(value)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+float_trunc(size, value, flags=None)[source]
+

float_trunc rounds a floating point value to an integer towards zero

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the result in bytes
  • +
  • value (LowLevelILExpr) – the expression to negate
  • +
  • flags (str) – optional, flags to set
  • +
+
Returns:

The expression roundint.<size>{<flags>}(value)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+floor(size, value, flags=None)[source]
+

floor rounds a floating point value to an integer towards negative infinity

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the result in bytes
  • +
  • value (LowLevelILExpr) – the expression to negate
  • +
  • flags (str) – optional, flags to set
  • +
+
Returns:

The expression roundint.<size>{<flags>}(value)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+get_instruction_start(addr, arch=None)[source]
+
+ +
+
+get_label_for_address(arch, addr)[source]
+

get_label_for_address returns the LowLevelILLabel for the given Architecture arch and IL address addr.

+ +++ + + + + + + + +
Parameters: +
Returns:

the LowLevelILLabel for the given IL address

+
Return type:

LowLevelILLabel

+
+
+ +
+
+get_mapped_medium_level_il_expr_index(expr)[source]
+
+ +
+
+get_mapped_medium_level_il_instruction_index(instr)[source]
+
+ +
+
+get_medium_level_il_expr_index(expr)[source]
+
+ +
+
+get_medium_level_il_instruction_index(instr)[source]
+
+ +
+
+get_non_ssa_instruction_index(instr)[source]
+
+ +
+
+get_ssa_flag_definition(flag_ssa)[source]
+
+ +
+
+get_ssa_flag_uses(flag_ssa)[source]
+
+ +
+
+get_ssa_flag_value(flag_ssa)[source]
+
+ +
+
+get_ssa_instruction_index(instr)[source]
+
+ +
+
+get_ssa_memory_definition(index)[source]
+
+ +
+
+get_ssa_memory_uses(index)[source]
+
+ +
+
+get_ssa_reg_definition(reg_ssa)[source]
+
+ +
+
+get_ssa_reg_uses(reg_ssa)[source]
+
+ +
+
+get_ssa_reg_value(reg_ssa)[source]
+
+ +
+
+goto(label)[source]
+

goto returns a goto expression which jumps to the provided LowLevelILLabel.

+ +++ + + + + + + + +
Parameters:label (LowLevelILLabel) – Label to jump to
Returns:the LowLevelILExpr that jumps to the provided label
Return type:LowLevelILExpr
+
+ +
+
+if_expr(operand, t, f)[source]
+

if_expr returns the if expression which depending on condition operand jumps to the LowLevelILLabel +t when the condition expression operand is non-zero and f when it’s zero.

+ +++ + + + + + + + +
Parameters: +
Returns:

the LowLevelILExpr for the if expression

+
Return type:

LowLevelILExpr

+
+
+ +
+
+int_to_float(size, value, flags=None)[source]
+

int_to_float returns floating point value of integer expression value of size size potentially setting flags

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the result in bytes
  • +
  • value (LowLevelILExpr) – the expression to negate
  • +
  • flags (str) – optional, flags to set
  • +
+
Returns:

The expression float.<size>{<flags>}(value)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+intrinsic(outputs, intrinsic, params, flags=None)[source]
+

intrinsic return an intrinsic expression.

+ +++ + + + + + +
Returns:an intrinsic expression.
Return type:LowLevelILExpr
+
+ +
+
+jump(dest)[source]
+

jump returns an expression which jumps (branches) to the expression dest

+ +++ + + + + + + + +
Parameters:dest (LowLevelILExpr) – the expression to jump to
Returns:The expression jump(dest)
Return type:LowLevelILExpr
+
+ +
+
+load(size, addr)[source]
+

load Reads size bytes from the expression addr

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – number of bytes to read
  • +
  • addr (LowLevelILExpr) – the expression to read memory from
  • +
+
Returns:

The expression [addr].size

+
Return type:

LowLevelILExpr

+
+
+ +
+
+logical_shift_right(size, a, b, flags=None)[source]
+

logical_shift_right shifts logically right expression a by expression b potentially setting flags +flags``and returning an expression of ``size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression lsr.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+low_part(size, value, flags=None)[source]
+

low_part truncates value to size bytes

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the result in bytes
  • +
  • value (LowLevelILExpr) – the expression to zero extend
  • +
+
Returns:

The expression (value).<size>

+
Return type:

LowLevelILExpr

+
+
+ +
+
+mark_label(label)[source]
+

mark_label assigns a LowLevelILLabel to the current IL address.

+ +++ + + + + + +
Parameters:label (LowLevelILLabel) –
Return type:None
+
+ +
+
+mod_double_prec_signed(size, a, b, flags=None)[source]
+

mod_double_prec_signed signed double precision modulus using expression a as a single +double precision register by expression b potentially setting flags flags and returning an expression +of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression mods.dp.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+mod_double_prec_unsigned(size, a, b, flags=None)[source]
+

mod_double_prec_unsigned unsigned double precision modulus using expression a as +a single double precision register by expression b potentially setting flags flags and returning an +expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression modu.dp.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+mod_signed(size, a, b, flags=None)[source]
+

mod_signed signed modulus expression a by expression b potentially setting flags flags +and returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression mods.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+mod_unsigned(size, a, b, flags=None)[source]
+

mod_unsigned unsigned modulus expression a by expression b potentially setting flags flags +and returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression modu.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+mult(size, a, b, flags=None)[source]
+

mult multiplies expression a by expression b potentially setting flags flags and returning an +expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression sbc.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+mult_double_prec_signed(size, a, b, flags=None)[source]
+

mult_double_prec_signed multiplies signed with double precision expression a by expression b +potentially setting flags flags and returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression muls.dp.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+mult_double_prec_unsigned(size, a, b, flags=None)[source]
+

mult_double_prec_unsigned multiplies unsigned with double precision expression a by expression b +potentially setting flags flags and returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression mulu.dp.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+neg_expr(size, value, flags=None)[source]
+

neg_expr two’s complement sign negation of expression value of size size potentially setting flags

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the result in bytes
  • +
  • value (LowLevelILExpr) – the expression to negate
  • +
  • flags (str) – optional, flags to set
  • +
+
Returns:

The expression neg.<size>{<flags>}(value)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+no_ret()[source]
+

no_ret returns an expression halts disassembly

+ +++ + + + + + +
Returns:The expression noreturn
Return type:LowLevelILExpr
+
+ +
+
+nop()[source]
+

nop no operation, this instruction does nothing

+ +++ + + + + + +
Returns:The no operation expression
Return type:LowLevelILExpr
+
+ +
+
+not_expr(size, value, flags=None)[source]
+

not_expr bitwise inverse of expression value of size size potentially setting flags

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the result in bytes
  • +
  • value (LowLevelILExpr) – the expression to bitwise invert
  • +
  • flags (str) – optional, flags to set
  • +
+
Returns:

The expression not.<size>{<flags>}(value)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+operand(n, expr)[source]
+

operand sets the operand number of the expression expr and passes back expr without modification.

+ +++ + + + + + + + +
Parameters: +
Returns:

returns the expression expr unmodified

+
Return type:

LowLevelILExpr

+
+
+ +
+
+or_expr(size, a, b, flags=None)[source]
+

or_expr bitwise or’s expression a and expression b potentially setting flags flags +and returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression or.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+pop(size)[source]
+

pop reads size bytes from the stack, adjusting the stack by size.

+ +++ + + + + + + + +
Parameters:size (int) – number of bytes to read from the stack
Returns:The expression pop
Return type:LowLevelILExpr
+
+ +
+
+push(size, value)[source]
+

push writes size bytes from expression value to the stack, adjusting the stack by size.

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – number of bytes to write and adjust the stack by
  • +
  • value (LowLevelILExpr) – the expression to write
  • +
+
Returns:

The expression push(value)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+reg(size, reg)[source]
+

reg returns a register of size size with name reg

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the register in bytes
  • +
  • reg (str) – the name of the register
  • +
+
Returns:

A register expression for the given string

+
Return type:

LowLevelILExpr

+
+
+ +
+
+reg_split(size, hi, lo)[source]
+

reg_split combines registers of size size with names hi and lo

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the register in bytes
  • +
  • hi (str) – register holding high part of value
  • +
  • lo (str) – register holding low part of value
  • +
+
Returns:

The expression hi:lo

+
Return type:

LowLevelILExpr

+
+
+ +
+
+reg_stack_pop(size, reg_stack)[source]
+

reg_stack_pop returns the top entry of size size in register stack with name reg_stack, and +removes the entry from the stack

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the register in bytes
  • +
  • reg_stack (str) – the name of the register stack
  • +
+
Returns:

The expression reg_stack.pop

+
Return type:

LowLevelILExpr

+
+
+ +
+
+reg_stack_push(size, reg_stack, value, flags=0)[source]
+

reg_stack_push pushes the expression value of size size onto the top of the register +stack reg_stack

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – size of the register parameter in bytes
  • +
  • reg_stack (str) – the register stack name
  • +
  • value (LowLevelILExpr) – an expression to push
  • +
  • flags (str) – which flags are set by this operation
  • +
+
Returns:

The expression reg_stack.push(value)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+reg_stack_top_relative(size, reg_stack, entry)[source]
+

reg_stack_top_relative returns a register stack entry of size size at top-relative +location entry in register stack with name reg_stack

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the register in bytes
  • +
  • reg_stack (str) – the name of the register stack
  • +
  • entry (LowLevelILExpr) – an expression for which stack entry to fetch
  • +
+
Returns:

The expression reg_stack[entry]

+
Return type:

LowLevelILExpr

+
+
+ +
+
+reloc_pointer(size, value)[source]
+

reloc_pointer returns an expression for the constant relocated pointer value with size size

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the pointer in bytes
  • +
  • value (int) – address referenced by pointer
  • +
+
Returns:

A constant expression of given value and size

+
Return type:

LowLevelILExpr

+
+
+ +
+
+ret(dest)[source]
+

ret returns an expression which jumps (branches) to the expression dest. ret is a special alias for +jump that makes the disassembler stop disassembling.

+ +++ + + + + + + + +
Parameters:dest (LowLevelILExpr) – the expression to jump to
Returns:The expression jump(dest)
Return type:LowLevelILExpr
+
+ +
+
+rotate_left(size, a, b, flags=None)[source]
+

rotate_left bitwise rotates left expression a by expression b potentially setting flags flags +and returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression rol.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+rotate_left_carry(size, a, b, carry, flags=None)[source]
+

rotate_left_carry bitwise rotates left with carry expression a by expression b potentially setting +flags flags and returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression rlc.<size>{<flags>}(a, b, carry)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+rotate_right(size, a, b, flags=None)[source]
+

rotate_right bitwise rotates right expression a by expression b potentially setting flags flags +and returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression ror.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+rotate_right_carry(size, a, b, carry, flags=None)[source]
+

rotate_right_carry bitwise rotates right with carry expression a by expression b potentially setting +flags flags and returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression rrc.<size>{<flags>}(a, b, carry)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+round_to_int(size, value, flags=None)[source]
+

round_to_int rounds a floating point value to the nearest integer

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the result in bytes
  • +
  • value (LowLevelILExpr) – the expression to negate
  • +
  • flags (str) – optional, flags to set
  • +
+
Returns:

The expression roundint.<size>{<flags>}(value)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+set_current_address(value, arch=None)[source]
+
+ +
+
+set_current_source_block(block)[source]
+
+ +
+
+set_flag(flag, value)[source]
+

set_flag sets the flag flag to the LowLevelILExpr value

+ +++ + + + + + + + +
Parameters:
    +
  • flag (str) – the low register name
  • +
  • value (LowLevelILExpr) – an expression to set the flag to
  • +
+
Returns:

The expression FLAG.flag = value

+
Return type:

LowLevelILExpr

+
+
+ +
+
+set_indirect_branches(branches)[source]
+
+ +
+
+set_reg(size, reg, value, flags=0)[source]
+

set_reg sets the register reg of size size to the expression value

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – size of the register parameter in bytes
  • +
  • reg (str) – the register name
  • +
  • value (LowLevelILExpr) – an expression to set the register to
  • +
  • flags (str) – which flags are set by this operation
  • +
+
Returns:

The expression reg = value

+
Return type:

LowLevelILExpr

+
+
+ +
+
+set_reg_split(size, hi, lo, value, flags=0)[source]
+

set_reg_split uses hi and lo as a single extended register setting hi:lo to the expression +value.

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – size of the register parameter in bytes
  • +
  • hi (str) – the high register name
  • +
  • lo (str) – the low register name
  • +
  • value (LowLevelILExpr) – an expression to set the split registers to
  • +
  • flags (str) – which flags are set by this operation
  • +
+
Returns:

The expression hi:lo = value

+
Return type:

LowLevelILExpr

+
+
+ +
+
+set_reg_stack_top_relative(size, reg_stack, entry, value, flags=0)[source]
+

set_reg_stack_top_relative sets the top-relative entry entry of size size in register +stack reg_stack to the expression value

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – size of the register parameter in bytes
  • +
  • reg_stack (str) – the register stack name
  • +
  • entry (LowLevelILExpr) – an expression for which stack entry to set
  • +
  • value (LowLevelILExpr) – an expression to set the entry to
  • +
  • flags (str) – which flags are set by this operation
  • +
+
Returns:

The expression reg_stack[entry] = value

+
Return type:

LowLevelILExpr

+
+
+ +
+
+shift_left(size, a, b, flags=None)[source]
+

shift_left subtracts with borrow expression b from expression a potentially setting flags flags +and returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression lsl.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+sign_extend(size, value, flags=None)[source]
+

sign_extend two’s complement sign-extends the expression in value to size bytes

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the result in bytes
  • +
  • value (LowLevelILExpr) – the expression to sign extend
  • +
  • flags (str) – optional, flags to set
  • +
+
Returns:

The expression sx.<size>(value)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+store(size, addr, value, flags=None)[source]
+

store Writes size bytes to expression addr read from expression value

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – number of bytes to write
  • +
  • addr (LowLevelILExpr) – the expression to write to
  • +
  • value (LowLevelILExpr) – the expression to be written
  • +
  • flags (str) – which flags are set by this operation
  • +
+
Returns:

The expression [addr].size = value

+
Return type:

LowLevelILExpr

+
+
+ +
+
+sub(size, a, b, flags=None)[source]
+

sub subtracts expression b from expression a potentially setting flags flags and returning +an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression sub.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+sub_borrow(size, a, b, carry, flags=None)[source]
+

sub_borrow subtracts with borrow expression b from expression a potentially setting flags flags +and returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression sbb.<size>{<flags>}(a, b, carry)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+system_call()[source]
+

system_call return a system call expression.

+ +++ + + + + + +
Returns:a system call expression.
Return type:LowLevelILExpr
+
+ +
+
+tailcall(dest)[source]
+

tailcall returns an expression which jumps (branches) to the expression dest

+ +++ + + + + + + + +
Parameters:dest (LowLevelILExpr) – the expression to jump to
Returns:The expression tailcall(dest)
Return type:LowLevelILExpr
+
+ +
+
+test_bit(size, a, b)[source]
+
+ +
+
+trap(value)[source]
+

trap returns a processor trap (interrupt) expression of the given integer value.

+ +++ + + + + + + + +
Parameters:value (int) – trap (interrupt) number
Returns:a trap expression.
Return type:LowLevelILExpr
+
+ +
+
+undefined()[source]
+

undefined returns the undefined expression. This should be used for instructions which perform functions but +aren’t important for dataflow or partial emulation purposes.

+ +++ + + + + + +
Returns:the unimplemented expression.
Return type:LowLevelILExpr
+
+ +
+
+unimplemented()[source]
+

unimplemented returns the unimplemented expression. This should be used for all instructions which aren’t +implemented.

+ +++ + + + + + +
Returns:the unimplemented expression.
Return type:LowLevelILExpr
+
+ +
+
+unimplemented_memory_ref(size, addr)[source]
+

unimplemented_memory_ref a memory reference to expression addr of size size with unimplemented operation.

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – size in bytes of the memory reference
  • +
  • addr (LowLevelILExpr) – expression to reference memory
  • +
+
Returns:

the unimplemented memory reference expression.

+
Return type:

LowLevelILExpr

+
+
+ +
+
+xor_expr(size, a, b, flags=None)[source]
+

xor_expr xor’s expression a with expression b potentially setting flags flags +and returning an expression of size bytes.

+ +++ + + + + + + + +
Parameters: +
Returns:

The expression xor.<size>{<flags>}(a, b)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+zero_extend(size, value, flags=None)[source]
+

zero_extend zero-extends the expression in value to size bytes

+ +++ + + + + + + + +
Parameters:
    +
  • size (int) – the size of the result in bytes
  • +
  • value (LowLevelILExpr) – the expression to zero extend
  • +
+
Returns:

The expression zx.<size>(value)

+
Return type:

LowLevelILExpr

+
+
+ +
+
+basic_blocks
+

list of LowLevelILBasicBlock objects (read-only)

+
+ +
+
+current_address
+

Current IL Address (read/write)

+
+ +
+
+instructions
+

A generator of llil instructions of the current llil function

+
+ +
+
+mapped_medium_level_il
+

Medium level IL with mappings between low level IL and medium level IL. Unused stores are not removed. +Typically, this should only be used to answer queries on assembly or low level IL where the query is +easier to perform on medium level IL.

+
+ +
+
+medium_level_il
+

Medium level IL for this low level IL.

+
+ +
+
+mlil
+
+ +
+
+mmlil
+
+ +
+
+non_ssa_form
+

Low level IL in non-SSA (default) form (read-only)

+
+ +
+
+ssa_form
+

Low level IL in SSA form (read-only)

+
+ +
+
+temp_flag_count
+

Number of temporary flags (read-only)

+
+ +
+
+temp_reg_count
+

Number of temporary registers (read-only)

+
+ +
+ +
+
+class LowLevelILInstruction(func, expr_index, instr_index=None)[source]
+

Bases: object

+

class LowLevelILInstruction Low Level Intermediate Language Instructions are infinite length tree-based +instructions. Tree-based instructions use infix notation with the left hand operand being the destination operand. +Infix notation is thus more natural to read than other notations (e.g. x86 mov eax, 0 vs. LLIL eax = 0).

+
+
+get_flag_value(flag)[source]
+
+ +
+
+get_flag_value_after(flag)[source]
+
+ +
+
+get_possible_flag_values(flag)[source]
+
+ +
+
+get_possible_flag_values_after(flag)[source]
+
+ +
+
+get_possible_reg_values(reg)[source]
+
+ +
+
+get_possible_reg_values_after(reg)[source]
+
+ +
+
+get_possible_stack_contents(offset, size)[source]
+
+ +
+
+get_possible_stack_contents_after(offset, size)[source]
+
+ +
+
+get_reg_value(reg)[source]
+
+ +
+
+get_reg_value_after(reg)[source]
+
+ +
+
+get_stack_contents(offset, size)[source]
+
+ +
+
+get_stack_contents_after(offset, size)[source]
+
+ +
+
+ILOperations = {<LowLevelILOperation.LLIL_NOP: 0>: [], <LowLevelILOperation.LLIL_SET_REG: 1>: [('dest', 'reg'), ('src', 'expr')], <LowLevelILOperation.LLIL_SET_REG_SPLIT: 2>: [('hi', 'reg'), ('lo', 'reg'), ('src', 'expr')], <LowLevelILOperation.LLIL_SET_FLAG: 3>: [('dest', 'flag'), ('src', 'expr')], <LowLevelILOperation.LLIL_SET_REG_STACK_REL: 4>: [('stack', 'reg_stack'), ('dest', 'expr'), ('src', 'expr')], <LowLevelILOperation.LLIL_REG_STACK_PUSH: 5>: [('stack', 'reg_stack'), ('src', 'expr')], <LowLevelILOperation.LLIL_LOAD: 6>: [('src', 'expr')], <LowLevelILOperation.LLIL_STORE: 7>: [('dest', 'expr'), ('src', 'expr')], <LowLevelILOperation.LLIL_PUSH: 8>: [('src', 'expr')], <LowLevelILOperation.LLIL_POP: 9>: [], <LowLevelILOperation.LLIL_REG: 10>: [('src', 'reg')], <LowLevelILOperation.LLIL_REG_SPLIT: 11>: [('hi', 'reg'), ('lo', 'reg')], <LowLevelILOperation.LLIL_REG_STACK_REL: 12>: [('stack', 'reg_stack'), ('src', 'expr')], <LowLevelILOperation.LLIL_REG_STACK_POP: 13>: [('stack', 'reg_stack')], <LowLevelILOperation.LLIL_REG_STACK_FREE_REG: 14>: [('dest', 'reg')], <LowLevelILOperation.LLIL_REG_STACK_FREE_REL: 15>: [('stack', 'reg_stack'), ('dest', 'expr')], <LowLevelILOperation.LLIL_CONST: 16>: [('constant', 'int')], <LowLevelILOperation.LLIL_CONST_PTR: 17>: [('constant', 'int')], <LowLevelILOperation.LLIL_EXTERN_PTR: 18>: [('constant', 'int'), ('offset', 'int')], <LowLevelILOperation.LLIL_FLOAT_CONST: 19>: [('constant', 'float')], <LowLevelILOperation.LLIL_FLAG: 20>: [('src', 'flag')], <LowLevelILOperation.LLIL_FLAG_BIT: 21>: [('src', 'flag'), ('bit', 'int')], <LowLevelILOperation.LLIL_ADD: 22>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_ADC: 23>: [('left', 'expr'), ('right', 'expr'), ('carry', 'expr')], <LowLevelILOperation.LLIL_SUB: 24>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_SBB: 25>: [('left', 'expr'), ('right', 'expr'), ('carry', 'expr')], <LowLevelILOperation.LLIL_AND: 26>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_OR: 27>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_XOR: 28>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_LSL: 29>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_LSR: 30>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_ASR: 31>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_ROL: 32>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_RLC: 33>: [('left', 'expr'), ('right', 'expr'), ('carry', 'expr')], <LowLevelILOperation.LLIL_ROR: 34>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_RRC: 35>: [('left', 'expr'), ('right', 'expr'), ('carry', 'expr')], <LowLevelILOperation.LLIL_MUL: 36>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_MULU_DP: 37>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_MULS_DP: 38>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_DIVU: 39>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_DIVU_DP: 40>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_DIVS: 41>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_DIVS_DP: 42>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_MODU: 43>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_MODU_DP: 44>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_MODS: 45>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_MODS_DP: 46>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_NEG: 47>: [('src', 'expr')], <LowLevelILOperation.LLIL_NOT: 48>: [('src', 'expr')], <LowLevelILOperation.LLIL_SX: 49>: [('src', 'expr')], <LowLevelILOperation.LLIL_ZX: 50>: [('src', 'expr')], <LowLevelILOperation.LLIL_LOW_PART: 51>: [('src', 'expr')], <LowLevelILOperation.LLIL_JUMP: 52>: [('dest', 'expr')], <LowLevelILOperation.LLIL_JUMP_TO: 53>: [('dest', 'expr'), ('targets', 'int_list')], <LowLevelILOperation.LLIL_CALL: 54>: [('dest', 'expr')], <LowLevelILOperation.LLIL_CALL_STACK_ADJUST: 55>: [('dest', 'expr'), ('stack_adjustment', 'int'), ('reg_stack_adjustments', 'reg_stack_adjust')], <LowLevelILOperation.LLIL_TAILCALL: 56>: [('dest', 'expr')], <LowLevelILOperation.LLIL_RET: 57>: [('dest', 'expr')], <LowLevelILOperation.LLIL_NORET: 58>: [], <LowLevelILOperation.LLIL_IF: 59>: [('condition', 'expr'), ('true', 'int'), ('false', 'int')], <LowLevelILOperation.LLIL_GOTO: 60>: [('dest', 'int')], <LowLevelILOperation.LLIL_FLAG_COND: 61>: [('condition', 'cond'), ('semantic_class', 'sem_class')], <LowLevelILOperation.LLIL_FLAG_GROUP: 62>: [('semantic_group', 'sem_group')], <LowLevelILOperation.LLIL_CMP_E: 63>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_CMP_NE: 64>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_CMP_SLT: 65>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_CMP_ULT: 66>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_CMP_SLE: 67>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_CMP_ULE: 68>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_CMP_SGE: 69>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_CMP_UGE: 70>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_CMP_SGT: 71>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_CMP_UGT: 72>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_TEST_BIT: 73>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_BOOL_TO_INT: 74>: [('src', 'expr')], <LowLevelILOperation.LLIL_ADD_OVERFLOW: 75>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_SYSCALL: 76>: [], <LowLevelILOperation.LLIL_BP: 77>: [], <LowLevelILOperation.LLIL_TRAP: 78>: [('vector', 'int')], <LowLevelILOperation.LLIL_INTRINSIC: 79>: [('output', 'reg_or_flag_list'), ('intrinsic', 'intrinsic'), ('param', 'expr')], <LowLevelILOperation.LLIL_UNDEF: 80>: [], <LowLevelILOperation.LLIL_UNIMPL: 81>: [], <LowLevelILOperation.LLIL_UNIMPL_MEM: 82>: [('src', 'expr')], <LowLevelILOperation.LLIL_FADD: 83>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_FSUB: 84>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_FMUL: 85>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_FDIV: 86>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_FSQRT: 87>: [('src', 'expr')], <LowLevelILOperation.LLIL_FNEG: 88>: [('src', 'expr')], <LowLevelILOperation.LLIL_FABS: 89>: [('src', 'expr')], <LowLevelILOperation.LLIL_FLOAT_TO_INT: 90>: [('src', 'expr')], <LowLevelILOperation.LLIL_INT_TO_FLOAT: 91>: [('src', 'expr')], <LowLevelILOperation.LLIL_FLOAT_CONV: 92>: [('src', 'expr')], <LowLevelILOperation.LLIL_ROUND_TO_INT: 93>: [('src', 'expr')], <LowLevelILOperation.LLIL_FLOOR: 94>: [('src', 'expr')], <LowLevelILOperation.LLIL_CEIL: 95>: [('src', 'expr')], <LowLevelILOperation.LLIL_FTRUNC: 96>: [('src', 'expr')], <LowLevelILOperation.LLIL_FCMP_E: 97>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_FCMP_NE: 98>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_FCMP_LT: 99>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_FCMP_LE: 100>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_FCMP_GE: 101>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_FCMP_GT: 102>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_FCMP_O: 103>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_FCMP_UO: 104>: [('left', 'expr'), ('right', 'expr')], <LowLevelILOperation.LLIL_SET_REG_SSA: 105>: [('dest', 'reg_ssa'), ('src', 'expr')], <LowLevelILOperation.LLIL_SET_REG_SSA_PARTIAL: 106>: [('full_reg', 'reg_ssa'), ('dest', 'reg'), ('src', 'expr')], <LowLevelILOperation.LLIL_SET_REG_SPLIT_SSA: 107>: [('hi', 'expr'), ('lo', 'expr'), ('src', 'expr')], <LowLevelILOperation.LLIL_SET_REG_STACK_REL_SSA: 108>: [('stack', 'expr'), ('dest', 'expr'), ('top', 'expr'), ('src', 'expr')], <LowLevelILOperation.LLIL_SET_REG_STACK_ABS_SSA: 109>: [('stack', 'expr'), ('dest', 'reg'), ('src', 'expr')], <LowLevelILOperation.LLIL_REG_SPLIT_DEST_SSA: 110>: [('dest', 'reg_ssa')], <LowLevelILOperation.LLIL_REG_STACK_DEST_SSA: 111>: [('src', 'reg_stack_ssa_dest_and_src')], <LowLevelILOperation.LLIL_REG_SSA: 112>: [('src', 'reg_ssa')], <LowLevelILOperation.LLIL_REG_SSA_PARTIAL: 113>: [('full_reg', 'reg_ssa'), ('src', 'reg')], <LowLevelILOperation.LLIL_REG_SPLIT_SSA: 114>: [('hi', 'reg_ssa'), ('lo', 'reg_ssa')], <LowLevelILOperation.LLIL_REG_STACK_REL_SSA: 115>: [('stack', 'reg_stack_ssa'), ('src', 'expr'), ('top', 'expr')], <LowLevelILOperation.LLIL_REG_STACK_ABS_SSA: 116>: [('stack', 'reg_stack_ssa'), ('src', 'reg')], <LowLevelILOperation.LLIL_REG_STACK_FREE_REL_SSA: 117>: [('stack', 'expr'), ('dest', 'expr'), ('top', 'expr')], <LowLevelILOperation.LLIL_REG_STACK_FREE_ABS_SSA: 118>: [('stack', 'expr'), ('dest', 'reg')], <LowLevelILOperation.LLIL_SET_FLAG_SSA: 119>: [('dest', 'flag_ssa'), ('src', 'expr')], <LowLevelILOperation.LLIL_FLAG_SSA: 120>: [('src', 'flag_ssa')], <LowLevelILOperation.LLIL_FLAG_BIT_SSA: 121>: [('src', 'flag_ssa'), ('bit', 'int')], <LowLevelILOperation.LLIL_CALL_SSA: 122>: [('output', 'expr'), ('dest', 'expr'), ('stack', 'expr'), ('param', 'expr')], <LowLevelILOperation.LLIL_SYSCALL_SSA: 123>: [('output', 'expr'), ('stack', 'expr'), ('param', 'expr')], <LowLevelILOperation.LLIL_TAILCALL_SSA: 124>: [('output', 'expr'), ('dest', 'expr'), ('stack', 'expr'), ('param', 'expr')], <LowLevelILOperation.LLIL_CALL_PARAM: 125>: [('src', 'expr_list')], <LowLevelILOperation.LLIL_CALL_STACK_SSA: 126>: [('src', 'reg_ssa'), ('src_memory', 'int')], <LowLevelILOperation.LLIL_CALL_OUTPUT_SSA: 127>: [('dest_memory', 'int'), ('dest', 'reg_ssa_list')], <LowLevelILOperation.LLIL_LOAD_SSA: 128>: [('src', 'expr'), ('src_memory', 'int')], <LowLevelILOperation.LLIL_STORE_SSA: 129>: [('dest', 'expr'), ('dest_memory', 'int'), ('src_memory', 'int'), ('src', 'expr')], <LowLevelILOperation.LLIL_INTRINSIC_SSA: 130>: [('output', 'reg_or_flag_ssa_list'), ('intrinsic', 'intrinsic'), ('param', 'expr')], <LowLevelILOperation.LLIL_REG_PHI: 131>: [('dest', 'reg_ssa'), ('src', 'reg_ssa_list')], <LowLevelILOperation.LLIL_REG_STACK_PHI: 132>: [('dest', 'reg_stack_ssa'), ('src', 'reg_stack_ssa_list')], <LowLevelILOperation.LLIL_FLAG_PHI: 133>: [('dest', 'flag_ssa'), ('src', 'flag_ssa_list')], <LowLevelILOperation.LLIL_MEM_PHI: 134>: [('dest_memory', 'int'), ('src_memory', 'int_list')]}
+
+ +
+
+il_basic_block
+

IL basic block object containing this expression (read-only) (only available on finalized functions)

+
+ +
+
+mapped_medium_level_il
+

Gets the mapped medium level IL expression corresponding to this expression

+
+ +
+
+medium_level_il
+

Gets the medium level IL expression corresponding to this expression (may be None for eliminated instructions)

+
+ +
+
+mlil
+
+ +
+
+mmlil
+
+ +
+
+non_ssa_form
+

Non-SSA form of expression (read-only)

+
+ +
+
+possible_values
+

Possible values of expression using path-sensitive static data flow analysis (read-only)

+
+ +
+
+postfix_operands
+

All operands in the expression tree in postfix order

+
+ +
+
+prefix_operands
+

All operands in the expression tree in prefix order

+
+ +
+
+ssa_form
+

SSA form of expression (read-only)

+
+ +
+
+tokens
+

LLIL tokens (read-only)

+
+ +
+
+value
+

Value of expression if constant or a known value (read-only)

+
+ +
+ +
+
+class LowLevelILLabel(handle=None)[source]
+

Bases: object

+
+ +
+
+class LowLevelILOperationAndSize(operation, size)[source]
+

Bases: object

+
+ +
+
+class SSAFlag(flag, version)[source]
+

Bases: object

+
+ +
+
+class SSARegister(reg, version)[source]
+

Bases: object

+
+ +
+
+class SSARegisterOrFlag(reg_or_flag, version)[source]
+

Bases: object

+
+ +
+
+class SSARegisterStack(reg_stack, version)[source]
+

Bases: object

+
+ +
+
+LLIL_GET_TEMP_REG_INDEX(n)[source]
+
+ +
+
+LLIL_REG_IS_TEMP(n)[source]
+
+ +
+
+LLIL_TEMP(n)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil.ILFlag.html b/personal/api-docs/binaryninja.lowlevelil.ILFlag.html new file mode 100644 index 0000000..71c8384 --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil.ILFlag.html @@ -0,0 +1,304 @@ + + + + + + + + + + + binaryninja.lowlevelil.ILFlag — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lowlevelil.ILFlag

+
+
+class ILFlag(arch, flag)[source]
+
+
+__init__(arch, flag)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(arch, flag)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil.ILIntrinsic.html b/personal/api-docs/binaryninja.lowlevelil.ILIntrinsic.html new file mode 100644 index 0000000..48e8b53 --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil.ILIntrinsic.html @@ -0,0 +1,304 @@ + + + + + + + + + + + binaryninja.lowlevelil.ILIntrinsic — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lowlevelil.ILIntrinsic

+
+
+class ILIntrinsic(arch, intrinsic)[source]
+
+
+__init__(arch, intrinsic)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(arch, intrinsic)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil.ILRegister.html b/personal/api-docs/binaryninja.lowlevelil.ILRegister.html new file mode 100644 index 0000000..53e2681 --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil.ILRegister.html @@ -0,0 +1,316 @@ + + + + + + + + + + + binaryninja.lowlevelil.ILRegister — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lowlevelil.ILRegister

+
+
+class ILRegister(arch, reg)[source]
+
+
+__init__(arch, reg)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(arch, reg)x.__init__(…) initializes x; see help(type(x)) for signature
+

Attributes

+ ++++ + + + + + +
info
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil.ILRegisterStack.html b/personal/api-docs/binaryninja.lowlevelil.ILRegisterStack.html new file mode 100644 index 0000000..a5ce06e --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil.ILRegisterStack.html @@ -0,0 +1,316 @@ + + + + + + + + + + + binaryninja.lowlevelil.ILRegisterStack — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lowlevelil.ILRegisterStack

+
+
+class ILRegisterStack(arch, reg_stack)[source]
+
+
+__init__(arch, reg_stack)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(arch, reg_stack)x.__init__(…) initializes x; see help(type(x)) for signature
+

Attributes

+ ++++ + + + + + +
info
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil.ILSemanticFlagClass.html b/personal/api-docs/binaryninja.lowlevelil.ILSemanticFlagClass.html new file mode 100644 index 0000000..c04fa95 --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil.ILSemanticFlagClass.html @@ -0,0 +1,304 @@ + + + + + + + + + + + binaryninja.lowlevelil.ILSemanticFlagClass — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lowlevelil.ILSemanticFlagClass

+
+
+class ILSemanticFlagClass(arch, sem_class)[source]
+
+
+__init__(arch, sem_class)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(arch, sem_class)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil.ILSemanticFlagGroup.html b/personal/api-docs/binaryninja.lowlevelil.ILSemanticFlagGroup.html new file mode 100644 index 0000000..f57b3ed --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil.ILSemanticFlagGroup.html @@ -0,0 +1,304 @@ + + + + + + + + + + + binaryninja.lowlevelil.ILSemanticFlagGroup — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lowlevelil.ILSemanticFlagGroup

+
+
+class ILSemanticFlagGroup(arch, sem_group)[source]
+
+
+__init__(arch, sem_group)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(arch, sem_group)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil.LLIL_GET_TEMP_REG_INDEX.html b/personal/api-docs/binaryninja.lowlevelil.LLIL_GET_TEMP_REG_INDEX.html new file mode 100644 index 0000000..5026e10 --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil.LLIL_GET_TEMP_REG_INDEX.html @@ -0,0 +1,286 @@ + + + + + + + + + + + binaryninja.lowlevelil.LLIL_GET_TEMP_REG_INDEX — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lowlevelil.LLIL_GET_TEMP_REG_INDEX

+
+
+LLIL_GET_TEMP_REG_INDEX(n)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil.LLIL_REG_IS_TEMP.html b/personal/api-docs/binaryninja.lowlevelil.LLIL_REG_IS_TEMP.html new file mode 100644 index 0000000..ba6e871 --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil.LLIL_REG_IS_TEMP.html @@ -0,0 +1,286 @@ + + + + + + + + + + + binaryninja.lowlevelil.LLIL_REG_IS_TEMP — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lowlevelil.LLIL_REG_IS_TEMP

+
+
+LLIL_REG_IS_TEMP(n)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil.LLIL_TEMP.html b/personal/api-docs/binaryninja.lowlevelil.LLIL_TEMP.html new file mode 100644 index 0000000..66e92ba --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil.LLIL_TEMP.html @@ -0,0 +1,286 @@ + + + + + + + + + + + binaryninja.lowlevelil.LLIL_TEMP — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lowlevelil.LLIL_TEMP

+
+
+LLIL_TEMP(n)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil.LowLevelILBasicBlock.html b/personal/api-docs/binaryninja.lowlevelil.LowLevelILBasicBlock.html new file mode 100644 index 0000000..5401b68 --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil.LowLevelILBasicBlock.html @@ -0,0 +1,391 @@ + + + + + + + + + + + binaryninja.lowlevelil.LowLevelILBasicBlock — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lowlevelil.LowLevelILBasicBlock

+
+
+class LowLevelILBasicBlock(view, handle, owner)[source]
+
+
+__init__(view, handle, owner)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + +
__init__(view, handle, owner)x.__init__(…) initializes x; see help(type(x)) for signature
get_disassembly_text([settings])get_disassembly_text returns a list of binaryninja.function.DisassemblyTextLine objects for the current basic block.
get_iterated_dominance_frontier(blocks)
mark_recent_use()
set_auto_highlight(color)set_auto_highlight highlights the current BasicBlock with the supplied color.
set_user_highlight(color)set_user_highlight highlights the current BasicBlock with the supplied color
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
annotationsList of automatic annotations for the start of this block (read-only)
archBasic block architecture (read-only)
can_exitWhether basic block can return or is tagged as ‘No Return’ (read-only)
disassembly_textdisassembly_text property which returns a list of binaryninja.function.DisassemblyTextLine objects for the current basic block.
dominance_frontierDominance frontier for this basic block (read-only)
dominator_tree_childrenList of child blocks in the dominator tree for this basic block (read-only)
dominatorsList of dominators for this basic block (read-only)
endBasic block end (read-only)
functionBasic block function (read-only)
has_undetermined_outgoing_edgesWhether basic block has undetermined outgoing edges (read-only)
highlightGets or sets the highlight color for basic block
immediate_dominatorImmediate dominator of this basic block (read-only)
incoming_edgesList of basic block incoming edges (read-only)
indexBasic block index in list of blocks for the function (read-only)
is_ilWhether the basic block contains IL
is_low_level_ilWhether the basic block contains Low Level IL
is_medium_level_ilWhether the basic block contains Medium Level IL
lengthBasic block length (read-only)
outgoing_edgesList of basic block outgoing edges (read-only)
startBasic block start (read-only)
strict_dominatorsList of strict dominators for this basic block (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil.LowLevelILExpr.html b/personal/api-docs/binaryninja.lowlevelil.LowLevelILExpr.html new file mode 100644 index 0000000..d482ca1 --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil.LowLevelILExpr.html @@ -0,0 +1,309 @@ + + + + + + + + + + + binaryninja.lowlevelil.LowLevelILExpr — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lowlevelil.LowLevelILExpr

+
+
+class LowLevelILExpr(index)[source]
+

class LowLevelILExpr hold the index of IL Expressions.

+
+

Note

+

This class shouldn’t be instantiated directly. Rather the helper members of LowLevelILFunction should be used instead.

+
+
+
+__init__(index)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(index)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil.LowLevelILFunction.html b/personal/api-docs/binaryninja.lowlevelil.LowLevelILFunction.html new file mode 100644 index 0000000..cd4bbed --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil.LowLevelILFunction.html @@ -0,0 +1,810 @@ + + + + + + + + + + + binaryninja.lowlevelil.LowLevelILFunction — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lowlevelil.LowLevelILFunction

+
+
+class LowLevelILFunction(arch=None, handle=None, source_func=None)[source]
+

class LowLevelILFunction contains the list of LowLevelILExpr objects that make up a binaryninja.function. LowLevelILExpr +objects can be added to the LowLevelILFunction by calling append and passing the result of the various class +methods which return LowLevelILExpr objects.

+

LowLevelILFlagCondition values used as parameters in the flag_condition method.

+
+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LowLevelILFlagConditionOperatorDescription
LLFC_E==Equal
LLFC_NE!=Not equal
LLFC_SLTs<Signed less than
LLFC_ULTu<Unsigned less than
LLFC_SLEs<=Signed less than or equal
LLFC_ULEu<=Unsigned less than or equal
LLFC_SGEs>=Signed greater than or equal
LLFC_UGEu>=Unsigned greater than or equal
LLFC_SGTs>Signed greater than
LLFC_UGTu>Unsigned greater than
LLFC_NEG
    +
  • +
+
Negative
LLFC_POS
    +
  • +
+
Positive
LLFC_OoverflowOverflow
LLFC_NO!overflowNo overflow
+
+
+
+__init__(arch=None, handle=None, source_func=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__([arch, handle, source_func])x.__init__(…) initializes x; see help(type(x)) for signature
add(size, a, b[, flags])add adds expression a to expression b potentially setting flags flags and returning an expression of size bytes.
add_carry(size, a, b, carry[, flags])add_carry adds with carry expression a to expression b potentially setting flags flags and returning an expression of size bytes.
add_label_for_address(arch, addr)add_label_for_address adds a low-level IL label for the given architecture arch at the given virtual address addr
add_label_list(labels)add_label_list returns a label list expression for the given list of LowLevelILLabel objects.
add_operand_list(operands)add_operand_list returns an operand list expression for the given list of integer operands.
and_expr(size, a, b[, flags])and_expr bitwise and’s expression a and expression b potentially setting flags flags and returning an expression of size bytes.
append(expr)append adds the LowLevelILExpr expr to the current LowLevelILFunction.
arith_shift_right(size, a, b[, flags])arith_shift_right shifts arithmatic right expression a by expression b potentially setting flags flags and returning an expression of size bytes.
breakpoint()breakpoint returns a processor breakpoint expression.
call(dest)call returns an expression which first pushes the address of the next instruction onto the stack then jumps (branches) to the expression dest
call_stack_adjust(dest, stack_adjust)call_stack_adjust returns an expression which first pushes the address of the next instruction onto the stack then jumps (branches) to the expression dest.
ceil(size, value[, flags])ceil rounds a floating point value to an integer towards positive infinity
clear_indirect_branches()
compare_equal(size, a, b)compare_equal returns comparison expression of size size checking if expression a is equal to expression b
compare_not_equal(size, a, b)compare_not_equal returns comparison expression of size size checking if expression a is not equal to expression b
compare_signed_greater_equal(size, a, b)compare_signed_greater_equal returns comparison expression of size size checking if expression a is signed greater than or equal to expression b
compare_signed_greater_than(size, a, b)compare_signed_greater_than returns comparison expression of size size checking if expression a is signed greater than or equal to expression b
compare_signed_less_equal(size, a, b)compare_signed_less_equal returns comparison expression of size size checking if expression a is signed less than or equal to expression b
compare_signed_less_than(size, a, b)compare_signed_less_than returns comparison expression of size size checking if expression a is signed less than expression b
compare_unsigned_greater_equal(size, a, b)compare_unsigned_greater_equal returns comparison expression of size size checking if expression a is unsigned greater than or equal to expression b
compare_unsigned_greater_than(size, a, b)compare_unsigned_greater_than returns comparison expression of size size checking if expression a is unsigned greater than or equal to expression b
compare_unsigned_less_equal(size, a, b)compare_unsigned_less_equal returns comparison expression of size size checking if expression a is unsigned less than or equal to expression b
compare_unsigned_less_than(size, a, b)compare_unsigned_less_than returns comparison expression of size size checking if expression a is unsigned less than expression b
const(size, value)const returns an expression for the constant integer value with size size
const_pointer(size, value)const_pointer returns an expression for the constant pointer value with size size
create_graph([settings])
div_double_prec_signed(size, a, b[, flags])div_double_prec_signed signed double precision divide using expression a as a single double precision register by expression b potentially setting flags flags and returning an expression of size bytes.
div_double_prec_unsigned(size, a, b[, flags])div_double_prec_unsigned unsigned double precision divide using expression a as a single double precision register by expression b potentially setting flags flags and returning an expression of size bytes.
div_signed(size, a, b[, flags])div_signed signed divide expression a by expression b potentially setting flags flags and returning an expression of size bytes.
div_unsigned(size, a, b[, flags])div_unsigned unsigned divide expression a by expression b potentially setting flags flags and returning an expression of size bytes.
expr(operation[, a, b, c, d, size, flags])
finalize()finalize ends the function and computes the list of basic blocks.
flag(reg)flag returns a flag expression for the given flag name.
flag_bit(size, reg, bit)flag_bit sets the flag named reg and size size to the constant integer value bit
flag_condition(cond[, sem_class])flag_condition returns a flag_condition expression for the given LowLevelILFlagCondition
flag_group(sem_group)flag_group returns a flag_group expression for the given semantic flag group
float_abs(size, value[, flags])float_abs returns absolute value of floating point expression value of size size potentially setting flags
float_add(size, a, b[, flags])float_add adds floating point expression a to expression b potentially setting flags flags and returning an expression of size bytes.
float_compare_equal(size, a, b)float_compare_equal returns floating point comparison expression of size size checking if expression a is equal to expression b
float_compare_greater_equal(size, a, b)float_compare_greater_equal returns floating point comparison expression of size size checking if expression a is greater than or equal to expression b
float_compare_greater_than(size, a, b)float_compare_greater_than returns floating point comparison expression of size size checking if expression a is greater than or equal to expression b
float_compare_less_equal(size, a, b)float_compare_less_equal returns floating point comparison expression of size size checking if expression a is less than or equal to expression b
float_compare_less_than(size, a, b)float_compare_less_than returns floating point comparison expression of size size checking if expression a is less than to expression b
float_compare_not_equal(size, a, b)float_compare_not_equal returns floating point comparison expression of size size checking if expression a is not equal to expression b
float_compare_unordered(size, a, b)float_compare_unordered returns floating point comparison expression of size size checking if expression a is unordered relative to expression b
float_const_double(value)float_const_double returns an expression for the double precision floating point value value
float_const_raw(size, value)float_const_raw returns an expression for the constant raw binary floating point value value with size size
float_const_single(value)float_const_single returns an expression for the single precision floating point value value
float_convert(size, value[, flags])int_to_float converts floating point value of expression value to size size potentially setting flags
float_div(size, a, b[, flags])float_div divides floating point expression a by expression b potentially setting flags flags and returning an expression of size bytes.
float_mult(size, a, b[, flags])float_mult multiplies floating point expression a by expression b potentially setting flags flags and returning an expression of size bytes.
float_neg(size, value[, flags])float_neg returns sign negation of floating point expression value of size size potentially setting flags
float_sqrt(size, value[, flags])float_sqrt returns square root of floating point expression value of size size potentially setting flags
float_sub(size, a, b[, flags])float_sub subtracts floating point expression b from expression a potentially setting flags flags and returning an expression of size bytes.
float_to_int(size, value[, flags])float_to_int returns integer value of floating point expression value of size size potentially setting flags
float_trunc(size, value[, flags])float_trunc rounds a floating point value to an integer towards zero
floor(size, value[, flags])floor rounds a floating point value to an integer towards negative infinity
get_instruction_start(addr[, arch])
get_label_for_address(arch, addr)get_label_for_address returns the LowLevelILLabel for the given Architecture arch and IL address addr.
get_mapped_medium_level_il_expr_index(expr)
get_mapped_medium_level_il_instruction_index(instr)
get_medium_level_il_expr_index(expr)
get_medium_level_il_instruction_index(instr)
get_non_ssa_instruction_index(instr)
get_ssa_flag_definition(flag_ssa)
get_ssa_flag_uses(flag_ssa)
get_ssa_flag_value(flag_ssa)
get_ssa_instruction_index(instr)
get_ssa_memory_definition(index)
get_ssa_memory_uses(index)
get_ssa_reg_definition(reg_ssa)
get_ssa_reg_uses(reg_ssa)
get_ssa_reg_value(reg_ssa)
goto(label)goto returns a goto expression which jumps to the provided LowLevelILLabel.
if_expr(operand, t, f)if_expr returns the if expression which depending on condition operand jumps to the LowLevelILLabel t when the condition expression operand is non-zero and f when it’s zero.
int_to_float(size, value[, flags])int_to_float returns floating point value of integer expression value of size size potentially setting flags
intrinsic(outputs, intrinsic, params[, flags])intrinsic return an intrinsic expression.
jump(dest)jump returns an expression which jumps (branches) to the expression dest
load(size, addr)load Reads size bytes from the expression addr
logical_shift_right(size, a, b[, flags])logical_shift_right shifts logically right expression a by expression b potentially setting flags flags``and returning an expression of ``size bytes.
low_part(size, value[, flags])low_part truncates value to size bytes
mark_label(label)mark_label assigns a LowLevelILLabel to the current IL address.
mod_double_prec_signed(size, a, b[, flags])mod_double_prec_signed signed double precision modulus using expression a as a single double precision register by expression b potentially setting flags flags and returning an expression of size bytes.
mod_double_prec_unsigned(size, a, b[, flags])mod_double_prec_unsigned unsigned double precision modulus using expression a as a single double precision register by expression b potentially setting flags flags and returning an expression of size bytes.
mod_signed(size, a, b[, flags])mod_signed signed modulus expression a by expression b potentially setting flags flags and returning an expression of size bytes.
mod_unsigned(size, a, b[, flags])mod_unsigned unsigned modulus expression a by expression b potentially setting flags flags and returning an expression of size bytes.
mult(size, a, b[, flags])mult multiplies expression a by expression b potentially setting flags flags and returning an expression of size bytes.
mult_double_prec_signed(size, a, b[, flags])mult_double_prec_signed multiplies signed with double precision expression a by expression b potentially setting flags flags and returning an expression of size bytes.
mult_double_prec_unsigned(size, a, b[, flags])mult_double_prec_unsigned multiplies unsigned with double precision expression a by expression b potentially setting flags flags and returning an expression of size bytes.
neg_expr(size, value[, flags])neg_expr two’s complement sign negation of expression value of size size potentially setting flags
no_ret()no_ret returns an expression halts disassembly
nop()nop no operation, this instruction does nothing
not_expr(size, value[, flags])not_expr bitwise inverse of expression value of size size potentially setting flags
operand(n, expr)operand sets the operand number of the expression expr and passes back expr without modification.
or_expr(size, a, b[, flags])or_expr bitwise or’s expression a and expression b potentially setting flags flags and returning an expression of size bytes.
pop(size)pop reads size bytes from the stack, adjusting the stack by size.
push(size, value)push writes size bytes from expression value to the stack, adjusting the stack by size.
reg(size, reg)reg returns a register of size size with name reg
reg_split(size, hi, lo)reg_split combines registers of size size with names hi and lo
reg_stack_pop(size, reg_stack)reg_stack_pop returns the top entry of size size in register stack with name reg_stack, and removes the entry from the stack
reg_stack_push(size, reg_stack, value[, flags])reg_stack_push pushes the expression value of size size onto the top of the register stack reg_stack
reg_stack_top_relative(size, reg_stack, entry)reg_stack_top_relative returns a register stack entry of size size at top-relative location entry in register stack with name reg_stack
reloc_pointer(size, value)reloc_pointer returns an expression for the constant relocated pointer value with size size
ret(dest)ret returns an expression which jumps (branches) to the expression dest.
rotate_left(size, a, b[, flags])rotate_left bitwise rotates left expression a by expression b potentially setting flags flags and returning an expression of size bytes.
rotate_left_carry(size, a, b, carry[, flags])rotate_left_carry bitwise rotates left with carry expression a by expression b potentially setting flags flags and returning an expression of size bytes.
rotate_right(size, a, b[, flags])rotate_right bitwise rotates right expression a by expression b potentially setting flags flags and returning an expression of size bytes.
rotate_right_carry(size, a, b, carry[, flags])rotate_right_carry bitwise rotates right with carry expression a by expression b potentially setting flags flags and returning an expression of size bytes.
round_to_int(size, value[, flags])round_to_int rounds a floating point value to the nearest integer
set_current_address(value[, arch])
set_flag(flag, value)set_flag sets the flag flag to the LowLevelILExpr value
set_indirect_branches(branches)
set_reg(size, reg, value[, flags])set_reg sets the register reg of size size to the expression value
set_reg_split(size, hi, lo, value[, flags])set_reg_split uses hi and lo as a single extended register setting hi:lo to the expression value.
set_reg_stack_top_relative(size, reg_stack, …)set_reg_stack_top_relative sets the top-relative entry entry of size size in register stack reg_stack to the expression value
shift_left(size, a, b[, flags])shift_left subtracts with borrow expression b from expression a potentially setting flags flags and returning an expression of size bytes.
sign_extend(size, value[, flags])sign_extend two’s complement sign-extends the expression in value to size bytes
store(size, addr, value[, flags])store Writes size bytes to expression addr read from expression value
sub(size, a, b[, flags])sub subtracts expression b from expression a potentially setting flags flags and returning an expression of size bytes.
sub_borrow(size, a, b, carry[, flags])sub_borrow subtracts with borrow expression b from expression a potentially setting flags flags and returning an expression of size bytes.
system_call()system_call return a system call expression.
tailcall(dest)tailcall returns an expression which jumps (branches) to the expression dest
test_bit(size, a, b)
trap(value)trap returns a processor trap (interrupt) expression of the given integer value.
undefined()undefined returns the undefined expression.
unimplemented()unimplemented returns the unimplemented expression.
unimplemented_memory_ref(size, addr)unimplemented_memory_ref a memory reference to expression addr of size size with unimplemented operation.
xor_expr(size, a, b[, flags])xor_expr xor’s expression a with expression b potentially setting flags flags and returning an expression of size bytes.
zero_extend(size, value[, flags])zero_extend zero-extends the expression in value to size bytes
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
basic_blockslist of LowLevelILBasicBlock objects (read-only)
current_addressCurrent IL Address (read/write)
instructionsA generator of llil instructions of the current llil function
mapped_medium_level_ilMedium level IL with mappings between low level IL and medium level IL.
medium_level_ilMedium level IL for this low level IL.
non_ssa_formLow level IL in non-SSA (default) form (read-only)
ssa_formLow level IL in SSA form (read-only)
temp_flag_countNumber of temporary flags (read-only)
temp_reg_countNumber of temporary registers (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil.LowLevelILInstruction.html b/personal/api-docs/binaryninja.lowlevelil.LowLevelILInstruction.html new file mode 100644 index 0000000..18b09e9 --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil.LowLevelILInstruction.html @@ -0,0 +1,385 @@ + + + + + + + + + + + binaryninja.lowlevelil.LowLevelILInstruction — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lowlevelil.LowLevelILInstruction

+
+
+class LowLevelILInstruction(func, expr_index, instr_index=None)[source]
+

class LowLevelILInstruction Low Level Intermediate Language Instructions are infinite length tree-based +instructions. Tree-based instructions use infix notation with the left hand operand being the destination operand. +Infix notation is thus more natural to read than other notations (e.g. x86 mov eax, 0 vs. LLIL eax = 0).

+
+
+__init__(func, expr_index, instr_index=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__(func, expr_index[, instr_index])x.__init__(…) initializes x; see help(type(x)) for signature
get_flag_value(flag)
get_flag_value_after(flag)
get_possible_flag_values(flag)
get_possible_flag_values_after(flag)
get_possible_reg_values(reg)
get_possible_reg_values_after(reg)
get_possible_stack_contents(offset, size)
get_possible_stack_contents_after(offset, size)
get_reg_value(reg)
get_reg_value_after(reg)
get_stack_contents(offset, size)
get_stack_contents_after(offset, size)
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ILOperations
il_basic_blockIL basic block object containing this expression (read-only) (only available on finalized functions)
mapped_medium_level_ilGets the mapped medium level IL expression corresponding to this expression
medium_level_ilGets the medium level IL expression corresponding to this expression (may be None for eliminated instructions)
non_ssa_formNon-SSA form of expression (read-only)
possible_valuesPossible values of expression using path-sensitive static data flow analysis (read-only)
postfix_operandsAll operands in the expression tree in postfix order
prefix_operandsAll operands in the expression tree in prefix order
ssa_formSSA form of expression (read-only)
tokensLLIL tokens (read-only)
valueValue of expression if constant or a known value (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil.LowLevelILLabel.html b/personal/api-docs/binaryninja.lowlevelil.LowLevelILLabel.html new file mode 100644 index 0000000..0fe8bfb --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil.LowLevelILLabel.html @@ -0,0 +1,304 @@ + + + + + + + + + + + binaryninja.lowlevelil.LowLevelILLabel — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lowlevelil.LowLevelILLabel

+
+
+class LowLevelILLabel(handle=None)[source]
+
+
+__init__(handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__([handle])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil.LowLevelILOperationAndSize.html b/personal/api-docs/binaryninja.lowlevelil.LowLevelILOperationAndSize.html new file mode 100644 index 0000000..460276d --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil.LowLevelILOperationAndSize.html @@ -0,0 +1,304 @@ + + + + + + + + + + + binaryninja.lowlevelil.LowLevelILOperationAndSize — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lowlevelil.LowLevelILOperationAndSize

+
+
+class LowLevelILOperationAndSize(operation, size)[source]
+
+
+__init__(operation, size)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(operation, size)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil.SSAFlag.html b/personal/api-docs/binaryninja.lowlevelil.SSAFlag.html new file mode 100644 index 0000000..4accb25 --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil.SSAFlag.html @@ -0,0 +1,304 @@ + + + + + + + + + + + binaryninja.lowlevelil.SSAFlag — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lowlevelil.SSAFlag

+
+
+class SSAFlag(flag, version)[source]
+
+
+__init__(flag, version)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(flag, version)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil.SSARegister.html b/personal/api-docs/binaryninja.lowlevelil.SSARegister.html new file mode 100644 index 0000000..2b7e9f1 --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil.SSARegister.html @@ -0,0 +1,304 @@ + + + + + + + + + + + binaryninja.lowlevelil.SSARegister — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lowlevelil.SSARegister

+
+
+class SSARegister(reg, version)[source]
+
+
+__init__(reg, version)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(reg, version)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil.SSARegisterOrFlag.html b/personal/api-docs/binaryninja.lowlevelil.SSARegisterOrFlag.html new file mode 100644 index 0000000..dfffc54 --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil.SSARegisterOrFlag.html @@ -0,0 +1,304 @@ + + + + + + + + + + + binaryninja.lowlevelil.SSARegisterOrFlag — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lowlevelil.SSARegisterOrFlag

+
+
+class SSARegisterOrFlag(reg_or_flag, version)[source]
+
+
+__init__(reg_or_flag, version)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(reg_or_flag, version)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil.SSARegisterStack.html b/personal/api-docs/binaryninja.lowlevelil.SSARegisterStack.html new file mode 100644 index 0000000..77faf5e --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil.SSARegisterStack.html @@ -0,0 +1,304 @@ + + + + + + + + + + + binaryninja.lowlevelil.SSARegisterStack — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lowlevelil.SSARegisterStack

+
+
+class SSARegisterStack(reg_stack, version)[source]
+
+
+__init__(reg_stack, version)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(reg_stack, version)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.lowlevelil.range.html b/personal/api-docs/binaryninja.lowlevelil.range.html new file mode 100644 index 0000000..4ef6a11 --- /dev/null +++ b/personal/api-docs/binaryninja.lowlevelil.range.html @@ -0,0 +1,287 @@ + + + + + + + + + + + binaryninja.lowlevelil.range — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.lowlevelil.range

+
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.mainthread-module.html b/personal/api-docs/binaryninja.mainthread-module.html new file mode 100644 index 0000000..f39a304 --- /dev/null +++ b/personal/api-docs/binaryninja.mainthread-module.html @@ -0,0 +1,331 @@ + + + + + + + + + + + mainthread module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

mainthread module

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + +
binaryninja.mainthread.execute_on_main_thread(func)
binaryninja.mainthread.execute_on_main_thread_and_wait(func)
binaryninja.mainthread.get_worker_thread_count()
binaryninja.mainthread.set_worker_thread_count(count)
binaryninja.mainthread.worker_enqueue(func)
binaryninja.mainthread.worker_interactive_enqueue(func)
binaryninja.mainthread.worker_priority_enqueue(func)
+
+
+
+
+execute_on_main_thread(func)[source]
+
+ +
+
+execute_on_main_thread_and_wait(func)[source]
+
+ +
+
+get_worker_thread_count()[source]
+
+ +
+
+set_worker_thread_count(count)[source]
+
+ +
+
+worker_enqueue(func)[source]
+
+ +
+
+worker_interactive_enqueue(func)[source]
+
+ +
+
+worker_priority_enqueue(func)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.mainthread.execute_on_main_thread.html b/personal/api-docs/binaryninja.mainthread.execute_on_main_thread.html new file mode 100644 index 0000000..46e9306 --- /dev/null +++ b/personal/api-docs/binaryninja.mainthread.execute_on_main_thread.html @@ -0,0 +1,273 @@ + + + + + + + + + + + binaryninja.mainthread.execute_on_main_thread — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.mainthread.execute_on_main_thread

+
+
+execute_on_main_thread(func)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.mainthread.execute_on_main_thread_and_wait.html b/personal/api-docs/binaryninja.mainthread.execute_on_main_thread_and_wait.html new file mode 100644 index 0000000..5c09d08 --- /dev/null +++ b/personal/api-docs/binaryninja.mainthread.execute_on_main_thread_and_wait.html @@ -0,0 +1,273 @@ + + + + + + + + + + + binaryninja.mainthread.execute_on_main_thread_and_wait — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.mainthread.execute_on_main_thread_and_wait

+
+
+execute_on_main_thread_and_wait(func)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.mainthread.get_worker_thread_count.html b/personal/api-docs/binaryninja.mainthread.get_worker_thread_count.html new file mode 100644 index 0000000..92e748a --- /dev/null +++ b/personal/api-docs/binaryninja.mainthread.get_worker_thread_count.html @@ -0,0 +1,273 @@ + + + + + + + + + + + binaryninja.mainthread.get_worker_thread_count — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.mainthread.get_worker_thread_count

+
+
+get_worker_thread_count()[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.mainthread.set_worker_thread_count.html b/personal/api-docs/binaryninja.mainthread.set_worker_thread_count.html new file mode 100644 index 0000000..62a9dbd --- /dev/null +++ b/personal/api-docs/binaryninja.mainthread.set_worker_thread_count.html @@ -0,0 +1,273 @@ + + + + + + + + + + + binaryninja.mainthread.set_worker_thread_count — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.mainthread.set_worker_thread_count

+
+
+set_worker_thread_count(count)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.mainthread.worker_enqueue.html b/personal/api-docs/binaryninja.mainthread.worker_enqueue.html new file mode 100644 index 0000000..1329881 --- /dev/null +++ b/personal/api-docs/binaryninja.mainthread.worker_enqueue.html @@ -0,0 +1,273 @@ + + + + + + + + + + + binaryninja.mainthread.worker_enqueue — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.mainthread.worker_enqueue

+
+
+worker_enqueue(func)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.mainthread.worker_interactive_enqueue.html b/personal/api-docs/binaryninja.mainthread.worker_interactive_enqueue.html new file mode 100644 index 0000000..51d67ae --- /dev/null +++ b/personal/api-docs/binaryninja.mainthread.worker_interactive_enqueue.html @@ -0,0 +1,273 @@ + + + + + + + + + + + binaryninja.mainthread.worker_interactive_enqueue — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.mainthread.worker_interactive_enqueue

+
+
+worker_interactive_enqueue(func)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.mainthread.worker_priority_enqueue.html b/personal/api-docs/binaryninja.mainthread.worker_priority_enqueue.html new file mode 100644 index 0000000..cc76508 --- /dev/null +++ b/personal/api-docs/binaryninja.mainthread.worker_priority_enqueue.html @@ -0,0 +1,273 @@ + + + + + + + + + + + binaryninja.mainthread.worker_priority_enqueue — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.mainthread.worker_priority_enqueue

+
+
+worker_priority_enqueue(func)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.mediumlevelil-module.html b/personal/api-docs/binaryninja.mediumlevelil-module.html new file mode 100644 index 0000000..91a9641 --- /dev/null +++ b/personal/api-docs/binaryninja.mediumlevelil-module.html @@ -0,0 +1,825 @@ + + + + + + + + + + + mediumlevelil module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

mediumlevelil module

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +
binaryninja.mediumlevelil.MediumLevelILBasicBlock(…)
binaryninja.mediumlevelil.MediumLevelILExpr(index)class MediumLevelILExpr hold the index of IL Expressions.
binaryninja.mediumlevelil.MediumLevelILFunction([…])class MediumLevelILFunction contains the list of MediumLevelILExpr objects that make up a binaryninja.function.
binaryninja.mediumlevelil.MediumLevelILInstruction(…)class MediumLevelILInstruction Medium Level Intermediate Language Instructions are infinite length tree-based instructions.
binaryninja.mediumlevelil.MediumLevelILLabel([…])
binaryninja.mediumlevelil.MediumLevelILOperationAndSize(…)
binaryninja.mediumlevelil.SSAVariable(var, …)
binaryninja.mediumlevelil.range(*args)A Python2 and Python3 Compatible Range Generator
+
+
+
+
+class MediumLevelILBasicBlock(view, handle, owner)[source]
+

Bases: binaryninja.basicblock.BasicBlock

+
+ +
+
+class MediumLevelILExpr(index)[source]
+

Bases: object

+

class MediumLevelILExpr hold the index of IL Expressions.

+
+

Note

+

This class shouldn’t be instantiated directly. Rather the helper members of MediumLevelILFunction should be used instead.

+
+
+ +
+
+class MediumLevelILFunction(arch=None, handle=None, source_func=None)[source]
+

Bases: object

+

class MediumLevelILFunction contains the list of MediumLevelILExpr objects that make up a binaryninja.function. MediumLevelILExpr +objects can be added to the MediumLevelILFunction by calling append and passing the result of the various class +methods which return MediumLevelILExpr objects.

+
+
+add_label_list(labels)[source]
+

add_label_list returns a label list expression for the given list of MediumLevelILLabel objects.

+ +++ + + + + + + + +
Parameters:labels (list(MediumLevelILLabel)) – the list of MediumLevelILLabel to get a label list expression from
Returns:the label list expression
Return type:MediumLevelILExpr
+
+ +
+
+add_operand_list(operands)[source]
+

add_operand_list returns an operand list expression for the given list of integer operands.

+ +++ + + + + + + + +
Parameters:operands (list(int)) – list of operand numbers
Returns:an operand list expression
Return type:MediumLevelILExpr
+
+ +
+
+append(expr)[source]
+

append adds the MediumLevelILExpr expr to the current MediumLevelILFunction.

+ +++ + + + + + + + +
Parameters:expr (MediumLevelILExpr) – the MediumLevelILExpr to add to the current MediumLevelILFunction
Returns:number of MediumLevelILExpr in the current function
Return type:int
+
+ +
+
+create_graph(settings=None)[source]
+
+ +
+
+expr(operation, a=0, b=0, c=0, d=0, e=0, size=0)[source]
+
+ +
+
+finalize()[source]
+

finalize ends the function and computes the list of basic blocks.

+ +++ + + + +
Return type:None
+
+ +
+
+get_instruction_start(addr, arch=None)[source]
+
+ +
+
+get_low_level_il_expr_index(expr)[source]
+
+ +
+
+get_low_level_il_instruction_index(instr)[source]
+
+ +
+
+get_non_ssa_instruction_index(instr)[source]
+
+ +
+
+get_ssa_instruction_index(instr)[source]
+
+ +
+
+get_ssa_memory_definition(version)[source]
+
+ +
+
+get_ssa_memory_uses(version)[source]
+
+ +
+
+get_ssa_var_definition(ssa_var)[source]
+
+ +
+
+get_ssa_var_uses(ssa_var)[source]
+
+ +
+
+get_ssa_var_value(ssa_var)[source]
+
+ +
+
+get_var_definitions(var)[source]
+
+ +
+
+get_var_uses(var)[source]
+
+ +
+
+goto(label)[source]
+

goto returns a goto expression which jumps to the provided MediumLevelILLabel.

+ +++ + + + + + + + +
Parameters:label (MediumLevelILLabel) – Label to jump to
Returns:the MediumLevelILExpr that jumps to the provided label
Return type:MediumLevelILExpr
+
+ +
+
+if_expr(operand, t, f)[source]
+

if_expr returns the if expression which depending on condition operand jumps to the MediumLevelILLabel +t when the condition expression operand is non-zero and f when it’s zero.

+ +++ + + + + + + + +
Parameters: +
Returns:

the MediumLevelILExpr for the if expression

+
Return type:

MediumLevelILExpr

+
+
+ +
+
+is_ssa_var_live(ssa_var)[source]
+

is_ssa_var_live determines if ssa_var is live at any point in the function

+ +++ + + + + + + + +
Parameters:ssa_var (SSAVariable) – the SSA variable to query
Returns:whether the variable is live at any point in the function
Return type:bool
+
+ +
+
+mark_label(label)[source]
+

mark_label assigns a MediumLevelILLabel to the current IL address.

+ +++ + + + + + +
Parameters:label (MediumLevelILLabel) –
Return type:None
+
+ +
+
+operand(n, expr)[source]
+

operand sets the operand number of the expression expr and passes back expr without modification.

+ +++ + + + + + + + +
Parameters: +
Returns:

returns the expression expr unmodified

+
Return type:

MediumLevelILExpr

+
+
+ +
+
+set_current_address(value, arch=None)[source]
+
+ +
+
+basic_blocks
+

list of MediumLevelILBasicBlock objects (read-only)

+
+ +
+
+current_address
+

Current IL Address (read/write)

+
+ +
+
+instructions
+

A generator of mlil instructions of the current function

+
+ +
+
+llil
+

Alias for low_level_il

+
+ +
+
+low_level_il
+

Low level IL for this function

+
+ +
+
+non_ssa_form
+

Medium level IL in non-SSA (default) form (read-only)

+
+ +
+
+ssa_form
+

Medium level IL in SSA form (read-only)

+
+ +
+ +
+
+class MediumLevelILInstruction(func, expr_index, instr_index=None)[source]
+

Bases: object

+

class MediumLevelILInstruction Medium Level Intermediate Language Instructions are infinite length tree-based +instructions. Tree-based instructions use infix notation with the left hand operand being the destination operand. +Infix notation is thus more natural to read than other notations (e.g. x86 mov eax, 0 vs. MLIL eax = 0).

+
+
+get_branch_dependence(branch_instr)[source]
+
+ +
+
+get_flag_value(flag)[source]
+
+ +
+
+get_flag_value_after(flag)[source]
+
+ +
+
+get_possible_flag_values(flag)[source]
+
+ +
+
+get_possible_flag_values_after(flag)[source]
+
+ +
+
+get_possible_reg_values(reg)[source]
+
+ +
+
+get_possible_reg_values_after(reg)[source]
+
+ +
+
+get_possible_stack_contents(offset, size)[source]
+
+ +
+
+get_possible_stack_contents_after(offset, size)[source]
+
+ +
+
+get_reg_value(reg)[source]
+
+ +
+
+get_reg_value_after(reg)[source]
+
+ +
+
+get_ssa_var_possible_values(ssa_var)[source]
+
+ +
+
+get_ssa_var_version(var)[source]
+
+ +
+
+get_stack_contents(offset, size)[source]
+
+ +
+
+get_stack_contents_after(offset, size)[source]
+
+ +
+
+get_var_for_flag(flag)[source]
+
+ +
+
+get_var_for_reg(reg)[source]
+
+ +
+
+get_var_for_stack_location(offset)[source]
+
+ +
+
+ILOperations = {<MediumLevelILOperation.MLIL_NOP: 0>: [], <MediumLevelILOperation.MLIL_SET_VAR: 1>: [('dest', 'var'), ('src', 'expr')], <MediumLevelILOperation.MLIL_SET_VAR_FIELD: 2>: [('dest', 'var'), ('offset', 'int'), ('src', 'expr')], <MediumLevelILOperation.MLIL_SET_VAR_SPLIT: 3>: [('high', 'var'), ('low', 'var'), ('src', 'expr')], <MediumLevelILOperation.MLIL_LOAD: 4>: [('src', 'expr')], <MediumLevelILOperation.MLIL_LOAD_STRUCT: 5>: [('src', 'expr'), ('offset', 'int')], <MediumLevelILOperation.MLIL_STORE: 6>: [('dest', 'expr'), ('src', 'expr')], <MediumLevelILOperation.MLIL_STORE_STRUCT: 7>: [('dest', 'expr'), ('offset', 'int'), ('src', 'expr')], <MediumLevelILOperation.MLIL_VAR: 8>: [('src', 'var')], <MediumLevelILOperation.MLIL_VAR_FIELD: 9>: [('src', 'var'), ('offset', 'int')], <MediumLevelILOperation.MLIL_VAR_SPLIT: 10>: [('high', 'var'), ('low', 'var')], <MediumLevelILOperation.MLIL_ADDRESS_OF: 11>: [('src', 'var')], <MediumLevelILOperation.MLIL_ADDRESS_OF_FIELD: 12>: [('src', 'var'), ('offset', 'int')], <MediumLevelILOperation.MLIL_CONST: 13>: [('constant', 'int')], <MediumLevelILOperation.MLIL_CONST_PTR: 14>: [('constant', 'int')], <MediumLevelILOperation.MLIL_EXTERN_PTR: 15>: [('constant', 'int'), ('offset', 'int')], <MediumLevelILOperation.MLIL_FLOAT_CONST: 16>: [('constant', 'float')], <MediumLevelILOperation.MLIL_IMPORT: 17>: [('constant', 'int')], <MediumLevelILOperation.MLIL_ADD: 18>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_ADC: 19>: [('left', 'expr'), ('right', 'expr'), ('carry', 'expr')], <MediumLevelILOperation.MLIL_SUB: 20>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_SBB: 21>: [('left', 'expr'), ('right', 'expr'), ('carry', 'expr')], <MediumLevelILOperation.MLIL_AND: 22>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_OR: 23>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_XOR: 24>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_LSL: 25>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_LSR: 26>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_ASR: 27>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_ROL: 28>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_RLC: 29>: [('left', 'expr'), ('right', 'expr'), ('carry', 'expr')], <MediumLevelILOperation.MLIL_ROR: 30>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_RRC: 31>: [('left', 'expr'), ('right', 'expr'), ('carry', 'expr')], <MediumLevelILOperation.MLIL_MUL: 32>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_MULU_DP: 33>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_MULS_DP: 34>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_DIVU: 35>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_DIVU_DP: 36>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_DIVS: 37>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_DIVS_DP: 38>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_MODU: 39>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_MODU_DP: 40>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_MODS: 41>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_MODS_DP: 42>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_NEG: 43>: [('src', 'expr')], <MediumLevelILOperation.MLIL_NOT: 44>: [('src', 'expr')], <MediumLevelILOperation.MLIL_SX: 45>: [('src', 'expr')], <MediumLevelILOperation.MLIL_ZX: 46>: [('src', 'expr')], <MediumLevelILOperation.MLIL_LOW_PART: 47>: [('src', 'expr')], <MediumLevelILOperation.MLIL_JUMP: 48>: [('dest', 'expr')], <MediumLevelILOperation.MLIL_JUMP_TO: 49>: [('dest', 'expr'), ('targets', 'int_list')], <MediumLevelILOperation.MLIL_RET_HINT: 50>: [('dest', 'expr')], <MediumLevelILOperation.MLIL_CALL: 51>: [('output', 'var_list'), ('dest', 'expr'), ('params', 'expr_list')], <MediumLevelILOperation.MLIL_CALL_UNTYPED: 52>: [('output', 'expr'), ('dest', 'expr'), ('params', 'expr'), ('stack', 'expr')], <MediumLevelILOperation.MLIL_CALL_OUTPUT: 53>: [('dest', 'var_list')], <MediumLevelILOperation.MLIL_CALL_PARAM: 54>: [('src', 'var_list')], <MediumLevelILOperation.MLIL_RET: 55>: [('src', 'expr_list')], <MediumLevelILOperation.MLIL_NORET: 56>: [], <MediumLevelILOperation.MLIL_IF: 57>: [('condition', 'expr'), ('true', 'int'), ('false', 'int')], <MediumLevelILOperation.MLIL_GOTO: 58>: [('dest', 'int')], <MediumLevelILOperation.MLIL_CMP_E: 59>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_CMP_NE: 60>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_CMP_SLT: 61>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_CMP_ULT: 62>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_CMP_SLE: 63>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_CMP_ULE: 64>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_CMP_SGE: 65>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_CMP_UGE: 66>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_CMP_SGT: 67>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_CMP_UGT: 68>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_TEST_BIT: 69>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_BOOL_TO_INT: 70>: [('src', 'expr')], <MediumLevelILOperation.MLIL_ADD_OVERFLOW: 71>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_SYSCALL: 72>: [('output', 'var_list'), ('params', 'expr_list')], <MediumLevelILOperation.MLIL_SYSCALL_UNTYPED: 73>: [('output', 'expr'), ('params', 'expr'), ('stack', 'expr')], <MediumLevelILOperation.MLIL_TAILCALL: 74>: [('output', 'var_list'), ('dest', 'expr'), ('params', 'expr_list')], <MediumLevelILOperation.MLIL_TAILCALL_UNTYPED: 75>: [('output', 'expr'), ('dest', 'expr'), ('params', 'expr'), ('stack', 'expr')], <MediumLevelILOperation.MLIL_INTRINSIC: 76>: [('output', 'var_list'), ('intrinsic', 'intrinsic'), ('params', 'expr_list')], <MediumLevelILOperation.MLIL_FREE_VAR_SLOT: 77>: [('dest', 'var')], <MediumLevelILOperation.MLIL_BP: 78>: [], <MediumLevelILOperation.MLIL_TRAP: 79>: [('vector', 'int')], <MediumLevelILOperation.MLIL_UNDEF: 80>: [], <MediumLevelILOperation.MLIL_UNIMPL: 81>: [], <MediumLevelILOperation.MLIL_UNIMPL_MEM: 82>: [('src', 'expr')], <MediumLevelILOperation.MLIL_FADD: 83>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_FSUB: 84>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_FMUL: 85>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_FDIV: 86>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_FSQRT: 87>: [('src', 'expr')], <MediumLevelILOperation.MLIL_FNEG: 88>: [('src', 'expr')], <MediumLevelILOperation.MLIL_FABS: 89>: [('src', 'expr')], <MediumLevelILOperation.MLIL_FLOAT_TO_INT: 90>: [('src', 'expr')], <MediumLevelILOperation.MLIL_INT_TO_FLOAT: 91>: [('src', 'expr')], <MediumLevelILOperation.MLIL_FLOAT_CONV: 92>: [('src', 'expr')], <MediumLevelILOperation.MLIL_ROUND_TO_INT: 93>: [('src', 'expr')], <MediumLevelILOperation.MLIL_FLOOR: 94>: [('src', 'expr')], <MediumLevelILOperation.MLIL_CEIL: 95>: [('src', 'expr')], <MediumLevelILOperation.MLIL_FTRUNC: 96>: [('src', 'expr')], <MediumLevelILOperation.MLIL_FCMP_E: 97>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_FCMP_NE: 98>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_FCMP_LT: 99>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_FCMP_LE: 100>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_FCMP_GE: 101>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_FCMP_GT: 102>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_FCMP_O: 103>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_FCMP_UO: 104>: [('left', 'expr'), ('right', 'expr')], <MediumLevelILOperation.MLIL_SET_VAR_SSA: 105>: [('dest', 'var_ssa'), ('src', 'expr')], <MediumLevelILOperation.MLIL_SET_VAR_SSA_FIELD: 106>: [('prev', 'var_ssa_dest_and_src'), ('offset', 'int'), ('src', 'expr')], <MediumLevelILOperation.MLIL_SET_VAR_SPLIT_SSA: 107>: [('high', 'var_ssa'), ('low', 'var_ssa'), ('src', 'expr')], <MediumLevelILOperation.MLIL_SET_VAR_ALIASED: 108>: [('prev', 'var_ssa_dest_and_src'), ('src', 'expr')], <MediumLevelILOperation.MLIL_SET_VAR_ALIASED_FIELD: 109>: [('prev', 'var_ssa_dest_and_src'), ('offset', 'int'), ('src', 'expr')], <MediumLevelILOperation.MLIL_VAR_SSA: 110>: [('src', 'var_ssa')], <MediumLevelILOperation.MLIL_VAR_SSA_FIELD: 111>: [('src', 'var_ssa'), ('offset', 'int')], <MediumLevelILOperation.MLIL_VAR_ALIASED: 112>: [('src', 'var_ssa')], <MediumLevelILOperation.MLIL_VAR_ALIASED_FIELD: 113>: [('src', 'var_ssa'), ('offset', 'int')], <MediumLevelILOperation.MLIL_VAR_SPLIT_SSA: 114>: [('high', 'var_ssa'), ('low', 'var_ssa')], <MediumLevelILOperation.MLIL_CALL_SSA: 115>: [('output', 'expr'), ('dest', 'expr'), ('params', 'expr_list'), ('src_memory', 'int')], <MediumLevelILOperation.MLIL_CALL_UNTYPED_SSA: 116>: [('output', 'expr'), ('dest', 'expr'), ('params', 'expr'), ('stack', 'expr')], <MediumLevelILOperation.MLIL_SYSCALL_SSA: 117>: [('output', 'expr'), ('params', 'expr_list'), ('src_memory', 'int')], <MediumLevelILOperation.MLIL_SYSCALL_UNTYPED_SSA: 118>: [('output', 'expr'), ('params', 'expr'), ('stack', 'expr')], <MediumLevelILOperation.MLIL_TAILCALL_SSA: 119>: [('output', 'expr'), ('dest', 'expr'), ('params', 'expr_list'), ('src_memory', 'int')], <MediumLevelILOperation.MLIL_TAILCALL_UNTYPED_SSA: 120>: [('output', 'expr'), ('dest', 'expr'), ('params', 'expr'), ('stack', 'expr')], <MediumLevelILOperation.MLIL_CALL_PARAM_SSA: 121>: [('src_memory', 'int'), ('src', 'var_ssa_list')], <MediumLevelILOperation.MLIL_CALL_OUTPUT_SSA: 122>: [('dest_memory', 'int'), ('dest', 'var_ssa_list')], <MediumLevelILOperation.MLIL_LOAD_SSA: 123>: [('src', 'expr'), ('src_memory', 'int')], <MediumLevelILOperation.MLIL_LOAD_STRUCT_SSA: 124>: [('src', 'expr'), ('offset', 'int'), ('src_memory', 'int')], <MediumLevelILOperation.MLIL_STORE_SSA: 125>: [('dest', 'expr'), ('dest_memory', 'int'), ('src_memory', 'int'), ('src', 'expr')], <MediumLevelILOperation.MLIL_STORE_STRUCT_SSA: 126>: [('dest', 'expr'), ('offset', 'int'), ('dest_memory', 'int'), ('src_memory', 'int'), ('src', 'expr')], <MediumLevelILOperation.MLIL_INTRINSIC_SSA: 127>: [('output', 'var_ssa_list'), ('intrinsic', 'intrinsic'), ('params', 'expr_list')], <MediumLevelILOperation.MLIL_FREE_VAR_SLOT_SSA: 128>: [('prev', 'var_ssa_dest_and_src')], <MediumLevelILOperation.MLIL_VAR_PHI: 129>: [('dest', 'var_ssa'), ('src', 'var_ssa_list')], <MediumLevelILOperation.MLIL_MEM_PHI: 130>: [('dest_memory', 'int'), ('src_memory', 'int_list')]}
+
+ +
+
+branch_dependence
+

Set of branching instructions that must take the true or false path to reach this instruction

+
+ +
+
+expr_type
+

Type of expression

+
+ +
+
+il_basic_block
+

IL basic block object containing this expression (read-only) (only available on finalized functions)

+
+ +
+
+llil
+

Alias for low_level_il

+
+ +
+
+low_level_il
+

Low level IL form of this expression

+
+ +
+
+non_ssa_form
+

Non-SSA form of expression (read-only)

+
+ +
+
+possible_values
+

Possible values of expression using path-sensitive static data flow analysis (read-only)

+
+ +
+
+postfix_operands
+

All operands in the expression tree in postfix order

+
+ +
+
+prefix_operands
+

All operands in the expression tree in prefix order

+
+ +
+
+ssa_form
+

SSA form of expression (read-only)

+
+ +
+
+ssa_memory_version
+

Version of active memory contents in SSA form for this instruction

+
+ +
+
+tokens
+

MLIL tokens (read-only)

+
+ +
+
+value
+

Value of expression if constant or a known value (read-only)

+
+ +
+
+vars_read
+

List of variables read by instruction

+
+ +
+
+vars_written
+

List of variables written by instruction

+
+ +
+ +
+
+class MediumLevelILLabel(handle=None)[source]
+

Bases: object

+
+ +
+
+class MediumLevelILOperationAndSize(operation, size)[source]
+

Bases: object

+
+ +
+
+class SSAVariable(var, version)[source]
+

Bases: object

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.mediumlevelil.MediumLevelILBasicBlock.html b/personal/api-docs/binaryninja.mediumlevelil.MediumLevelILBasicBlock.html new file mode 100644 index 0000000..8e47472 --- /dev/null +++ b/personal/api-docs/binaryninja.mediumlevelil.MediumLevelILBasicBlock.html @@ -0,0 +1,379 @@ + + + + + + + + + + + binaryninja.mediumlevelil.MediumLevelILBasicBlock — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.mediumlevelil.MediumLevelILBasicBlock

+
+
+class MediumLevelILBasicBlock(view, handle, owner)[source]
+
+
+__init__(view, handle, owner)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + +
__init__(view, handle, owner)x.__init__(…) initializes x; see help(type(x)) for signature
get_disassembly_text([settings])get_disassembly_text returns a list of binaryninja.function.DisassemblyTextLine objects for the current basic block.
get_iterated_dominance_frontier(blocks)
mark_recent_use()
set_auto_highlight(color)set_auto_highlight highlights the current BasicBlock with the supplied color.
set_user_highlight(color)set_user_highlight highlights the current BasicBlock with the supplied color
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
annotationsList of automatic annotations for the start of this block (read-only)
archBasic block architecture (read-only)
can_exitWhether basic block can return or is tagged as ‘No Return’ (read-only)
disassembly_textdisassembly_text property which returns a list of binaryninja.function.DisassemblyTextLine objects for the current basic block.
dominance_frontierDominance frontier for this basic block (read-only)
dominator_tree_childrenList of child blocks in the dominator tree for this basic block (read-only)
dominatorsList of dominators for this basic block (read-only)
endBasic block end (read-only)
functionBasic block function (read-only)
has_undetermined_outgoing_edgesWhether basic block has undetermined outgoing edges (read-only)
highlightGets or sets the highlight color for basic block
immediate_dominatorImmediate dominator of this basic block (read-only)
incoming_edgesList of basic block incoming edges (read-only)
indexBasic block index in list of blocks for the function (read-only)
is_ilWhether the basic block contains IL
is_low_level_ilWhether the basic block contains Low Level IL
is_medium_level_ilWhether the basic block contains Medium Level IL
lengthBasic block length (read-only)
outgoing_edgesList of basic block outgoing edges (read-only)
startBasic block start (read-only)
strict_dominatorsList of strict dominators for this basic block (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.mediumlevelil.MediumLevelILExpr.html b/personal/api-docs/binaryninja.mediumlevelil.MediumLevelILExpr.html new file mode 100644 index 0000000..d5fee0b --- /dev/null +++ b/personal/api-docs/binaryninja.mediumlevelil.MediumLevelILExpr.html @@ -0,0 +1,297 @@ + + + + + + + + + + + binaryninja.mediumlevelil.MediumLevelILExpr — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.mediumlevelil.MediumLevelILExpr

+
+
+class MediumLevelILExpr(index)[source]
+

class MediumLevelILExpr hold the index of IL Expressions.

+
+

Note

+

This class shouldn’t be instantiated directly. Rather the helper members of MediumLevelILFunction should be used instead.

+
+
+
+__init__(index)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(index)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.mediumlevelil.MediumLevelILFunction.html b/personal/api-docs/binaryninja.mediumlevelil.MediumLevelILFunction.html new file mode 100644 index 0000000..d3229cb --- /dev/null +++ b/personal/api-docs/binaryninja.mediumlevelil.MediumLevelILFunction.html @@ -0,0 +1,394 @@ + + + + + + + + + + + binaryninja.mediumlevelil.MediumLevelILFunction — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.mediumlevelil.MediumLevelILFunction

+
+
+class MediumLevelILFunction(arch=None, handle=None, source_func=None)[source]
+

class MediumLevelILFunction contains the list of MediumLevelILExpr objects that make up a binaryninja.function. MediumLevelILExpr +objects can be added to the MediumLevelILFunction by calling append and passing the result of the various class +methods which return MediumLevelILExpr objects.

+
+
+__init__(arch=None, handle=None, source_func=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__([arch, handle, source_func])x.__init__(…) initializes x; see help(type(x)) for signature
add_label_list(labels)add_label_list returns a label list expression for the given list of MediumLevelILLabel objects.
add_operand_list(operands)add_operand_list returns an operand list expression for the given list of integer operands.
append(expr)append adds the MediumLevelILExpr expr to the current MediumLevelILFunction.
create_graph([settings])
expr(operation[, a, b, c, d, e, size])
finalize()finalize ends the function and computes the list of basic blocks.
get_instruction_start(addr[, arch])
get_low_level_il_expr_index(expr)
get_low_level_il_instruction_index(instr)
get_non_ssa_instruction_index(instr)
get_ssa_instruction_index(instr)
get_ssa_memory_definition(version)
get_ssa_memory_uses(version)
get_ssa_var_definition(ssa_var)
get_ssa_var_uses(ssa_var)
get_ssa_var_value(ssa_var)
get_var_definitions(var)
get_var_uses(var)
goto(label)goto returns a goto expression which jumps to the provided MediumLevelILLabel.
if_expr(operand, t, f)if_expr returns the if expression which depending on condition operand jumps to the MediumLevelILLabel t when the condition expression operand is non-zero and f when it’s zero.
is_ssa_var_live(ssa_var)is_ssa_var_live determines if ssa_var is live at any point in the function
mark_label(label)mark_label assigns a MediumLevelILLabel to the current IL address.
operand(n, expr)operand sets the operand number of the expression expr and passes back expr without modification.
set_current_address(value[, arch])
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + +
basic_blockslist of MediumLevelILBasicBlock objects (read-only)
current_addressCurrent IL Address (read/write)
instructionsA generator of mlil instructions of the current function
low_level_ilLow level IL for this function
non_ssa_formMedium level IL in non-SSA (default) form (read-only)
ssa_formMedium level IL in SSA form (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.mediumlevelil.MediumLevelILInstruction.html b/personal/api-docs/binaryninja.mediumlevelil.MediumLevelILInstruction.html new file mode 100644 index 0000000..b4fe873 --- /dev/null +++ b/personal/api-docs/binaryninja.mediumlevelil.MediumLevelILInstruction.html @@ -0,0 +1,403 @@ + + + + + + + + + + + binaryninja.mediumlevelil.MediumLevelILInstruction — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.mediumlevelil.MediumLevelILInstruction

+
+
+class MediumLevelILInstruction(func, expr_index, instr_index=None)[source]
+

class MediumLevelILInstruction Medium Level Intermediate Language Instructions are infinite length tree-based +instructions. Tree-based instructions use infix notation with the left hand operand being the destination operand. +Infix notation is thus more natural to read than other notations (e.g. x86 mov eax, 0 vs. MLIL eax = 0).

+
+
+__init__(func, expr_index, instr_index=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__(func, expr_index[, instr_index])x.__init__(…) initializes x; see help(type(x)) for signature
get_branch_dependence(branch_instr)
get_flag_value(flag)
get_flag_value_after(flag)
get_possible_flag_values(flag)
get_possible_flag_values_after(flag)
get_possible_reg_values(reg)
get_possible_reg_values_after(reg)
get_possible_stack_contents(offset, size)
get_possible_stack_contents_after(offset, size)
get_reg_value(reg)
get_reg_value_after(reg)
get_ssa_var_possible_values(ssa_var)
get_ssa_var_version(var)
get_stack_contents(offset, size)
get_stack_contents_after(offset, size)
get_var_for_flag(flag)
get_var_for_reg(reg)
get_var_for_stack_location(offset)
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ILOperations
branch_dependenceSet of branching instructions that must take the true or false path to reach this instruction
expr_typeType of expression
il_basic_blockIL basic block object containing this expression (read-only) (only available on finalized functions)
low_level_ilLow level IL form of this expression
non_ssa_formNon-SSA form of expression (read-only)
possible_valuesPossible values of expression using path-sensitive static data flow analysis (read-only)
postfix_operandsAll operands in the expression tree in postfix order
prefix_operandsAll operands in the expression tree in prefix order
ssa_formSSA form of expression (read-only)
ssa_memory_versionVersion of active memory contents in SSA form for this instruction
tokensMLIL tokens (read-only)
valueValue of expression if constant or a known value (read-only)
vars_readList of variables read by instruction
vars_writtenList of variables written by instruction
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.mediumlevelil.MediumLevelILLabel.html b/personal/api-docs/binaryninja.mediumlevelil.MediumLevelILLabel.html new file mode 100644 index 0000000..83a32a4 --- /dev/null +++ b/personal/api-docs/binaryninja.mediumlevelil.MediumLevelILLabel.html @@ -0,0 +1,292 @@ + + + + + + + + + + + binaryninja.mediumlevelil.MediumLevelILLabel — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.mediumlevelil.MediumLevelILLabel

+
+
+class MediumLevelILLabel(handle=None)[source]
+
+
+__init__(handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__([handle])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.mediumlevelil.MediumLevelILOperationAndSize.html b/personal/api-docs/binaryninja.mediumlevelil.MediumLevelILOperationAndSize.html new file mode 100644 index 0000000..60d9be4 --- /dev/null +++ b/personal/api-docs/binaryninja.mediumlevelil.MediumLevelILOperationAndSize.html @@ -0,0 +1,292 @@ + + + + + + + + + + + binaryninja.mediumlevelil.MediumLevelILOperationAndSize — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.mediumlevelil.MediumLevelILOperationAndSize

+
+
+class MediumLevelILOperationAndSize(operation, size)[source]
+
+
+__init__(operation, size)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(operation, size)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.mediumlevelil.SSAVariable.html b/personal/api-docs/binaryninja.mediumlevelil.SSAVariable.html new file mode 100644 index 0000000..b60f74b --- /dev/null +++ b/personal/api-docs/binaryninja.mediumlevelil.SSAVariable.html @@ -0,0 +1,292 @@ + + + + + + + + + + + binaryninja.mediumlevelil.SSAVariable — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.mediumlevelil.SSAVariable

+
+
+class SSAVariable(var, version)[source]
+
+
+__init__(var, version)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(var, version)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.mediumlevelil.range.html b/personal/api-docs/binaryninja.mediumlevelil.range.html new file mode 100644 index 0000000..d8ee3fc --- /dev/null +++ b/personal/api-docs/binaryninja.mediumlevelil.range.html @@ -0,0 +1,275 @@ + + + + + + + + + + + binaryninja.mediumlevelil.range — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.mediumlevelil.range

+
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.metadata-module.html b/personal/api-docs/binaryninja.metadata-module.html new file mode 100644 index 0000000..d056bac --- /dev/null +++ b/personal/api-docs/binaryninja.metadata-module.html @@ -0,0 +1,351 @@ + + + + + + + + + + + metadata module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

metadata module

+ ++++ + + + + + + + + + + + +
binaryninja.metadata.Metadata([value, …])
binaryninja.metadata.pyNativeStr(arg)
binaryninja.metadata.range(*args)A Python2 and Python3 Compatible Range Generator
+
+
+
+
+class Metadata(value=None, signed=None, raw=None, handle=None)[source]
+

Bases: object

+
+
+get_dict()[source]
+
+ +
+
+remove(key_or_index)[source]
+
+ +
+
+is_array
+
+ +
+
+is_boolean
+
+ +
+
+is_dict
+
+ +
+
+is_float
+
+ +
+
+is_integer
+
+ +
+
+is_raw
+
+ +
+
+is_signed_integer
+
+ +
+
+is_string
+
+ +
+
+is_unsigned_integer
+
+ +
+
+type
+
+ +
+
+value
+
+ +
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.metadata.Metadata.html b/personal/api-docs/binaryninja.metadata.Metadata.html new file mode 100644 index 0000000..19e8700 --- /dev/null +++ b/personal/api-docs/binaryninja.metadata.Metadata.html @@ -0,0 +1,335 @@ + + + + + + + + + + + binaryninja.metadata.Metadata — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.metadata.Metadata

+
+
+class Metadata(value=None, signed=None, raw=None, handle=None)[source]
+
+
+__init__(value=None, signed=None, raw=None, handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + +
__init__([value, signed, raw, handle])x.__init__(…) initializes x; see help(type(x)) for signature
get_dict()
remove(key_or_index)
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
is_array
is_boolean
is_dict
is_float
is_integer
is_raw
is_signed_integer
is_string
is_unsigned_integer
type
value
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.metadata.pyNativeStr.html b/personal/api-docs/binaryninja.metadata.pyNativeStr.html new file mode 100644 index 0000000..0b3e650 --- /dev/null +++ b/personal/api-docs/binaryninja.metadata.pyNativeStr.html @@ -0,0 +1,269 @@ + + + + + + + + + + + binaryninja.metadata.pyNativeStr — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.metadata.pyNativeStr

+
+
+pyNativeStr(arg)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.metadata.range.html b/personal/api-docs/binaryninja.metadata.range.html new file mode 100644 index 0000000..f876d30 --- /dev/null +++ b/personal/api-docs/binaryninja.metadata.range.html @@ -0,0 +1,270 @@ + + + + + + + + + + + binaryninja.metadata.range — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.metadata.range

+
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.numbers-module.html b/personal/api-docs/binaryninja.numbers-module.html new file mode 100644 index 0000000..350d980 --- /dev/null +++ b/personal/api-docs/binaryninja.numbers-module.html @@ -0,0 +1,407 @@ + + + + + + + + + + + numbers module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

numbers module

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +
binaryninja.numbers.ABCMetaMetaclass for defining Abstract Base Classes (ABCs).
binaryninja.numbers.ComplexComplex defines the operations that work on the builtin complex type.
binaryninja.numbers.IntegralIntegral adds a conversion to long and the bit-string operations.
binaryninja.numbers.NumberAll numbers inherit from this class.
binaryninja.numbers.Rational.numerator and .denominator should be in lowest terms.
binaryninja.numbers.RealTo Complex, Real adds the operations that work on real numbers.
binaryninja.numbers.abstractpropertyA decorator indicating abstract properties.
binaryninja.numbers.abstractmethod(funcobj)A decorator indicating abstract methods.
+
+
+

Abstract Base Classes (ABCs) for numbers, according to PEP 3141.

+

TODO: Fill out more detailed documentation on the operators.

+
+
+class Number
+

Bases: object

+

All numbers inherit from this class.

+

If you just want to check if an argument x is a number, without +caring what kind, use isinstance(x, Number).

+
+ +
+
+class Complex
+

Bases: numbers.Number

+

Complex defines the operations that work on the builtin complex type.

+

In short, those are: a conversion to complex, .real, .imag, +, -, +*, /, abs(), .conjugate, ==, and !=.

+

If it is given heterogenous arguments, and doesn’t have special +knowledge about them, it should fall back to the builtin complex +type as described below.

+
+
+conjugate()
+

(x+y*i).conjugate() returns (x-y*i).

+
+ +
+
+imag
+

Retrieve the imaginary component of this number.

+

This should subclass Real.

+
+ +
+
+real
+

Retrieve the real component of this number.

+

This should subclass Real.

+
+ +
+ +
+
+class Real
+

Bases: numbers.Complex

+

To Complex, Real adds the operations that work on real numbers.

+

In short, those are: a conversion to float, trunc(), divmod, +%, <, <=, >, and >=.

+

Real also provides defaults for the derived operations.

+
+
+conjugate()
+

Conjugate is a no-op for Reals.

+
+ +
+
+imag
+

Real numbers have no imaginary component.

+
+ +
+
+real
+

Real numbers are their real component.

+
+ +
+ +
+
+class Rational
+

Bases: numbers.Real

+

.numerator and .denominator should be in lowest terms.

+
+
+denominator
+
+ +
+
+numerator
+
+ +
+ +
+
+class Integral
+

Bases: numbers.Rational

+

Integral adds a conversion to long and the bit-string operations.

+
+
+denominator
+

Integers have a denominator of 1.

+
+ +
+
+numerator
+

Integers are their own numerators.

+
+ +
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.numbers.ABCMeta.html b/personal/api-docs/binaryninja.numbers.ABCMeta.html new file mode 100644 index 0000000..ce4b7e0 --- /dev/null +++ b/personal/api-docs/binaryninja.numbers.ABCMeta.html @@ -0,0 +1,305 @@ + + + + + + + + + + + binaryninja.numbers.ABCMeta — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.numbers.ABCMeta

+
+
+class ABCMeta
+

Metaclass for defining Abstract Base Classes (ABCs).

+

Use this metaclass to create an ABC. An ABC can be subclassed +directly, and then acts as a mix-in class. You can also register +unrelated concrete classes (even built-in classes) and unrelated +ABCs as ‘virtual subclasses’ – these and their descendants will +be considered subclasses of the registering ABC by the built-in +issubclass() function, but the registering ABC won’t show up in +their MRO (Method Resolution Order) nor will method +implementations defined by the registering ABC be callable (not +even via super()).

+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + +
mro()return a type’s method resolution order
register(subclass)Register a virtual subclass of an ABC.
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.numbers.Complex.html b/personal/api-docs/binaryninja.numbers.Complex.html new file mode 100644 index 0000000..d57c29c --- /dev/null +++ b/personal/api-docs/binaryninja.numbers.Complex.html @@ -0,0 +1,313 @@ + + + + + + + + + + + binaryninja.numbers.Complex — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.numbers.Complex

+
+
+class Complex
+

Complex defines the operations that work on the builtin complex type.

+

In short, those are: a conversion to complex, .real, .imag, +, -, +*, /, abs(), .conjugate, ==, and !=.

+

If it is given heterogenous arguments, and doesn’t have special +knowledge about them, it should fall back to the builtin complex +type as described below.

+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
conjugate()(x+y*i).conjugate() returns (x-y*i).
+

Attributes

+ ++++ + + + + + + + + +
imagRetrieve the imaginary component of this number.
realRetrieve the real component of this number.
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.numbers.Integral.html b/personal/api-docs/binaryninja.numbers.Integral.html new file mode 100644 index 0000000..75c4f26 --- /dev/null +++ b/personal/api-docs/binaryninja.numbers.Integral.html @@ -0,0 +1,314 @@ + + + + + + + + + + + binaryninja.numbers.Integral — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.numbers.Integral

+
+
+class Integral
+

Integral adds a conversion to long and the bit-string operations.

+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
conjugate()Conjugate is a no-op for Reals.
+

Attributes

+ ++++ + + + + + + + + + + + + + + +
denominatorIntegers have a denominator of 1.
imagReal numbers have no imaginary component.
numeratorIntegers are their own numerators.
realReal numbers are their real component.
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.numbers.Number.html b/personal/api-docs/binaryninja.numbers.Number.html new file mode 100644 index 0000000..0e42410 --- /dev/null +++ b/personal/api-docs/binaryninja.numbers.Number.html @@ -0,0 +1,283 @@ + + + + + + + + + + + binaryninja.numbers.Number — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.numbers.Number

+
+
+class Number
+

All numbers inherit from this class.

+

If you just want to check if an argument x is a number, without +caring what kind, use isinstance(x, Number).

+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.numbers.Rational.html b/personal/api-docs/binaryninja.numbers.Rational.html new file mode 100644 index 0000000..8b94aee --- /dev/null +++ b/personal/api-docs/binaryninja.numbers.Rational.html @@ -0,0 +1,314 @@ + + + + + + + + + + + binaryninja.numbers.Rational — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.numbers.Rational

+
+
+class Rational
+

.numerator and .denominator should be in lowest terms.

+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
conjugate()Conjugate is a no-op for Reals.
+

Attributes

+ ++++ + + + + + + + + + + + + + + +
denominator
imagReal numbers have no imaginary component.
numerator
realReal numbers are their real component.
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.numbers.Real.html b/personal/api-docs/binaryninja.numbers.Real.html new file mode 100644 index 0000000..bed07a8 --- /dev/null +++ b/personal/api-docs/binaryninja.numbers.Real.html @@ -0,0 +1,311 @@ + + + + + + + + + + + binaryninja.numbers.Real — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.numbers.Real

+
+
+class Real
+

To Complex, Real adds the operations that work on real numbers.

+

In short, those are: a conversion to float, trunc(), divmod, +%, <, <=, >, and >=.

+

Real also provides defaults for the derived operations.

+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
conjugate()Conjugate is a no-op for Reals.
+

Attributes

+ ++++ + + + + + + + + +
imagReal numbers have no imaginary component.
realReal numbers are their real component.
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.numbers.abstractmethod.html b/personal/api-docs/binaryninja.numbers.abstractmethod.html new file mode 100644 index 0000000..b2839fc --- /dev/null +++ b/personal/api-docs/binaryninja.numbers.abstractmethod.html @@ -0,0 +1,292 @@ + + + + + + + + + + + binaryninja.numbers.abstractmethod — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.numbers.abstractmethod

+
+
+abstractmethod(funcobj)
+

A decorator indicating abstract methods.

+

Requires that the metaclass is ABCMeta or derived from it. A +class that has a metaclass derived from ABCMeta cannot be +instantiated unless all of its abstract methods are overridden. +The abstract methods can be called using any of the normal +‘super’ call mechanisms.

+

Usage:

+
+
+
class C:
+

__metaclass__ = ABCMeta +@abstractmethod +def my_abstract_method(self, …):

+
+
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.numbers.abstractproperty.html b/personal/api-docs/binaryninja.numbers.abstractproperty.html new file mode 100644 index 0000000..a461d28 --- /dev/null +++ b/personal/api-docs/binaryninja.numbers.abstractproperty.html @@ -0,0 +1,345 @@ + + + + + + + + + + + binaryninja.numbers.abstractproperty — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.numbers.abstractproperty

+
+
+class abstractproperty
+

A decorator indicating abstract properties.

+

Requires that the metaclass is ABCMeta or derived from it. A +class that has a metaclass derived from ABCMeta cannot be +instantiated unless all of its abstract properties are overridden. +The abstract properties can be called using any of the normal +‘super’ call mechanisms.

+

Usage:

+
+
+
class C:
+

__metaclass__ = ABCMeta +@abstractproperty +def my_abstract_property(self):

+
+
+
+
+
+

This defines a read-only property; you can also define a read-write +abstract property using the ‘long’ form of property declaration:

+
+
+
class C:
+
__metaclass__ = ABCMeta +def getx(self): … +def setx(self, value): … +x = abstractproperty(getx, setx)
+
+
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + +
deleterDescriptor to change the deleter on a property.
getterDescriptor to change the getter on a property.
setterDescriptor to change the setter on a property.
+

Attributes

+ ++++ + + + + + + + + + + + +
fdel
fget
fset
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.platform-module.html b/personal/api-docs/binaryninja.platform-module.html new file mode 100644 index 0000000..81505de --- /dev/null +++ b/personal/api-docs/binaryninja.platform-module.html @@ -0,0 +1,579 @@ + + + + + + + + + + + platform module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

platform module

+ ++++ + + + + + + + + + + + +
binaryninja.platform.Platform([arch, handle])class Platform contains all information related to the execution environment of the binary, mainly the calling conventions used.
binaryninja.platform.range(*args)A Python2 and Python3 Compatible Range Generator
binaryninja.platform.with_metaclass(meta, *bases)Create a base class with a metaclass.
+
+
+
+
+class Platform(arch=None, handle=None)[source]
+

Bases: object

+

class Platform contains all information related to the execution environment of the binary, mainly the +calling conventions used.

+
+ +
+ +
+
+generate_auto_platform_type_id(name)[source]
+
+ +
+
+generate_auto_platform_type_ref(type_class, name)[source]
+
+ +
+
+get_associated_platform_by_address(addr)[source]
+
+ +
+
+get_auto_platform_type_id_source()[source]
+
+ +
+
+get_function_by_name(name)[source]
+
+ +
+ +
+ +
+
+get_system_call_name(number)[source]
+
+ +
+
+get_system_call_type(number)[source]
+
+ +
+
+get_type_by_name(name)[source]
+
+ +
+
+get_variable_by_name(name)[source]
+
+ +
+
+parse_types_from_source(source, filename=None, include_dirs=[], auto_type_source=None)[source]
+

parse_types_from_source parses the source string and any needed headers searching for them in +the optional list of directories provided in include_dirs.

+ +++ + + + + + + + + + +
Parameters:
    +
  • source (str) – source string to be parsed
  • +
  • filename (str) – optional source filename
  • +
  • include_dirs (list(str)) – optional list of string filename include directories
  • +
  • auto_type_source (str) – optional source of types if used for automatically generated types
  • +
+
Returns:

TypeParserResult (a SyntaxError is thrown on parse error)

+
Return type:

TypeParserResult

+
Example:
>>> platform.parse_types_from_source('int foo;\nint bar(int x);\nstruct bas{int x,y;};\n')
+({types: {'bas': <type: struct bas>}, variables: {'foo': <type: int32_t>}, functions:{'bar':
+<type: int32_t(int32_t x)>}}, '')
+>>>
+
+
+
+
+ +
+
+parse_types_from_source_file(filename, include_dirs=[], auto_type_source=None)[source]
+

parse_types_from_source_file parses the source file filename and any needed headers searching for them in +the optional list of directories provided in include_dirs.

+ +++ + + + + + + + + + +
Parameters:
    +
  • filename (str) – filename of file to be parsed
  • +
  • include_dirs (list(str)) – optional list of string filename include directories
  • +
  • auto_type_source (str) – optional source of types if used for automatically generated types
  • +
+
Returns:

TypeParserResult (a SyntaxError is thrown on parse error)

+
Return type:

TypeParserResult

+
Example:
>>> file = "/Users/binja/tmp.c"
+>>> open(file).read()
+'int foo;\nint bar(int x);\nstruct bas{int x,y;};\n'
+>>> platform.parse_types_from_source_file(file)
+({types: {'bas': <type: struct bas>}, variables: {'foo': <type: int32_t>}, functions:
+{'bar': <type: int32_t(int32_t x)>}}, '')
+>>>
+
+
+
+
+ +
+
+register(os)[source]
+

register registers the platform for given OS name.

+ +++ + + + + + +
Parameters:os (str) – OS name to register
Return type:None
+
+ +
+
+register_calling_convention(cc)[source]
+

register_calling_convention register a new calling convention.

+ +++ + + + + + +
Parameters:cc (CallingConvention) – a CallingConvention object to register
Return type:None
+
+ +
+
+calling_conventions
+

List of platform CallingConvention objects (read-only)

+ +++ + + + + + +
Getter:returns the list of supported CallingConvention objects
Type:list(CallingConvention)
+
+ +
+
+cdecl_calling_convention
+

Cdecl calling convention.

+ +++ + + + +
Getter:returns a CallingConvention object for the cdecl calling convention.
+

:setter sets the cdecl calling convention +:type: CallingConvention

+
+ +
+
+default_calling_convention
+

Default calling convention.

+ +++ + + + + + + + +
Getter:returns a CallingConvention object for the default calling convention.
Setter:sets the default calling convention
Type:CallingConvention
+
+ +
+
+fastcall_calling_convention
+

Fastcall calling convention.

+ +++ + + + +
Getter:returns a CallingConvention object for the fastcall calling convention.
+

:setter sets the fastcall calling convention +:type: CallingConvention

+
+ +
+
+functions
+

List of platform-specific function definitions (read-only)

+
+ +
+
+list = []
+
+ +
+
+name = None
+
+ +
+
+stdcall_calling_convention
+

Stdcall calling convention.

+ +++ + + + +
Getter:returns a CallingConvention object for the stdcall calling convention.
+

:setter sets the stdcall calling convention +:type: CallingConvention

+
+ +
+
+system_call_convention
+

System call convention.

+ +++ + + + +
Getter:returns a CallingConvention object for the system call convention.
+

:setter sets the system call convention +:type: CallingConvention

+
+ +
+
+system_calls
+

List of system calls for this platform (read-only)

+
+ +
+
+types
+

List of platform-specific types (read-only)

+
+ +
+
+variables
+

List of platform-specific variable definitions (read-only)

+
+ +
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.platform.Platform.html b/personal/api-docs/binaryninja.platform.Platform.html new file mode 100644 index 0000000..cf92324 --- /dev/null +++ b/personal/api-docs/binaryninja.platform.Platform.html @@ -0,0 +1,379 @@ + + + + + + + + + + + binaryninja.platform.Platform — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.platform.Platform

+
+
+class Platform(arch=None, handle=None)[source]
+

class Platform contains all information related to the execution environment of the binary, mainly the +calling conventions used.

+
+
+__init__(arch=None, handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__([arch, handle])x.__init__(…) initializes x; see help(type(x)) for signature
add_related_platform(arch, platform)
generate_auto_platform_type_id(name)
generate_auto_platform_type_ref(type_class, name)
get_associated_platform_by_address(addr)
get_auto_platform_type_id_source()
get_function_by_name(name)
get_related_platform(arch)
get_system_call_name(number)
get_system_call_type(number)
get_type_by_name(name)
get_variable_by_name(name)
parse_types_from_source(source[, filename, …])parse_types_from_source parses the source string and any needed headers searching for them in the optional list of directories provided in include_dirs.
parse_types_from_source_file(filename[, …])parse_types_from_source_file parses the source file filename and any needed headers searching for them in the optional list of directories provided in include_dirs.
register(os)register registers the platform for given OS name.
register_calling_convention(cc)register_calling_convention register a new calling convention.
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
calling_conventionsList of platform CallingConvention objects (read-only)
cdecl_calling_conventionCdecl calling convention.
default_calling_conventionDefault calling convention.
fastcall_calling_conventionFastcall calling convention.
functionsList of platform-specific function definitions (read-only)
list
name
stdcall_calling_conventionStdcall calling convention.
system_call_conventionSystem call convention.
system_callsList of system calls for this platform (read-only)
typesList of platform-specific types (read-only)
variablesList of platform-specific variable definitions (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.platform.range.html b/personal/api-docs/binaryninja.platform.range.html new file mode 100644 index 0000000..264c193 --- /dev/null +++ b/personal/api-docs/binaryninja.platform.range.html @@ -0,0 +1,270 @@ + + + + + + + + + + + binaryninja.platform.range — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.platform.range

+
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.platform.with_metaclass.html b/personal/api-docs/binaryninja.platform.with_metaclass.html new file mode 100644 index 0000000..d011ffd --- /dev/null +++ b/personal/api-docs/binaryninja.platform.with_metaclass.html @@ -0,0 +1,270 @@ + + + + + + + + + + + binaryninja.platform.with_metaclass — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.platform.with_metaclass

+
+
+with_metaclass(meta, *bases)[source]
+

Create a base class with a metaclass.

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.plugin-module.html b/personal/api-docs/binaryninja.plugin-module.html new file mode 100644 index 0000000..8039a5d --- /dev/null +++ b/personal/api-docs/binaryninja.plugin-module.html @@ -0,0 +1,652 @@ + + + + + + + + + + + plugin module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

plugin module

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +
binaryninja.plugin.BackgroundTask([…])
binaryninja.plugin.BackgroundTaskThread([…])
binaryninja.plugin.MainThreadAction(handle)
binaryninja.plugin.MainThreadActionHandler()
binaryninja.plugin.PluginCommand(cmd)
binaryninja.plugin.PluginCommandContext(view)
binaryninja.plugin.range(*args)A Python2 and Python3 Compatible Range Generator
binaryninja.plugin.with_metaclass(meta, *bases)Create a base class with a metaclass.
+
+
+
+
+class BackgroundTask(initial_progress_text='', can_cancel=False, handle=None)[source]
+

Bases: object

+
+
+cancel()[source]
+
+ +
+
+finish()[source]
+
+ +
+
+can_cancel
+

Whether the task can be cancelled (read-only)

+
+ +
+
+cancelled
+

Whether the task has been cancelled

+
+ +
+
+finished
+

Whether the task has finished

+
+ +
+
+list = []
+
+ +
+
+progress
+

Text description of the progress of the background task (displayed in status bar of the UI)

+
+ +
+ +
+
+class BackgroundTaskThread(initial_progress_text='', can_cancel=False)[source]
+

Bases: binaryninja.plugin.BackgroundTask

+
+
+join()[source]
+
+ +
+
+run()[source]
+
+ +
+
+start()[source]
+
+ +
+ +
+
+class MainThreadAction(handle)[source]
+

Bases: object

+
+
+execute()[source]
+
+ +
+
+wait()[source]
+
+ +
+
+done
+
+ +
+ +
+
+class MainThreadActionHandler[source]
+

Bases: object

+
+
+add_action(action)[source]
+
+ +
+
+register()[source]
+
+ +
+ +
+
+class PluginCommand(cmd)[source]
+

Bases: object

+
+
+execute(context)[source]
+
+ +
+
+classmethod get_valid_list(context)[source]
+

Dict of registered plugins

+
+ +
+
+is_valid(context)[source]
+
+ +
+
+classmethod register(name, description, action, is_valid=None)[source]
+

register Register a plugin

+ +++ + + + + + +
Parameters:
    +
  • name (str) – name of the plugin
  • +
  • description (str) – description of the plugin
  • +
  • action – function to call with the BinaryView as an argument
  • +
  • is_valid – optional argument of a function passed a BinaryView to determine whether the plugin should be enabled for that view
  • +
+
Return type:

None

+
+
+

Warning

+

Calling register with the same function name will replace the existing function but will leak the memory of the original plugin.

+
+
+ +
+
+classmethod register_for_address(name, description, action, is_valid=None)[source]
+

register_for_address Register a plugin to be called with an address argument

+ +++ + + + + + +
Parameters:
    +
  • name (str) – name of the plugin
  • +
  • description (str) – description of the plugin
  • +
  • action – function to call with the BinaryView and address as arguments
  • +
  • is_valid – optional argument of a function passed a BinaryView to determine whether the plugin should be enabled for that view
  • +
+
Return type:

None

+
+
+

Warning

+

Calling register_for_address with the same function name will replace the existing function but will leak the memory of the original plugin.

+
+
+ +
+
+classmethod register_for_function(name, description, action, is_valid=None)[source]
+

register_for_function Register a plugin to be called with a function argument

+ +++ + + + + + +
Parameters:
    +
  • name (str) – name of the plugin
  • +
  • description (str) – description of the plugin
  • +
  • action – function to call with the BinaryView and a Function as arguments
  • +
  • is_valid – optional argument of a function passed a BinaryView to determine whether the plugin should be enabled for that view
  • +
+
Return type:

None

+
+
+

Warning

+

Calling register_for_function with the same function name will replace the existing function but will leak the memory of the original plugin.

+
+
+ +
+
+classmethod register_for_low_level_il_function(name, description, action, is_valid=None)[source]
+

register_for_low_level_il_function Register a plugin to be called with a low level IL function argument

+ +++ + + + + + +
Parameters:
    +
  • name (str) – name of the plugin
  • +
  • description (str) – description of the plugin
  • +
  • action – function to call with the BinaryView and a LowLevelILFunction as arguments
  • +
  • is_valid – optional argument of a function passed a BinaryView to determine whether the plugin should be enabled for that view
  • +
+
Return type:

None

+
+
+

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.

+
+
+ +
+
+classmethod register_for_low_level_il_instruction(name, description, action, is_valid=None)[source]
+

register_for_low_level_il_instruction Register a plugin to be called with a low level IL instruction argument

+ +++ + + + + + +
Parameters:
    +
  • name (str) – name of the plugin
  • +
  • description (str) – description of the plugin
  • +
  • action – function to call with the BinaryView and a LowLevelILInstruction as arguments
  • +
  • is_valid – optional argument of a function passed a BinaryView to determine whether the plugin should be enabled for that view
  • +
+
Return type:

None

+
+
+

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.

+
+
+ +
+
+classmethod register_for_medium_level_il_function(name, description, action, is_valid=None)[source]
+

register_for_medium_level_il_function Register a plugin to be called with a medium level IL function argument

+ +++ + + + + + +
Parameters:
    +
  • name (str) – name of the plugin
  • +
  • description (str) – description of the plugin
  • +
  • action – function to call with the BinaryView and a MediumLevelILFunction as arguments
  • +
  • is_valid – optional argument of a function passed a BinaryView to determine whether the plugin should be enabled for that view
  • +
+
Return type:

None

+
+
+

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.

+
+
+ +
+
+classmethod register_for_medium_level_il_instruction(name, description, action, is_valid=None)[source]
+

register_for_medium_level_il_instruction Register a plugin to be called with a medium level IL instruction argument

+ +++ + + + + + +
Parameters:
    +
  • name (str) – name of the plugin
  • +
  • description (str) – description of the plugin
  • +
  • action – function to call with the BinaryView and a MediumLevelILInstruction as arguments
  • +
  • is_valid – optional argument of a function passed a BinaryView to determine whether the plugin should be enabled for that view
  • +
+
Return type:

None

+
+
+

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.

+
+
+ +
+
+classmethod register_for_range(name, description, action, is_valid=None)[source]
+

register_for_range Register a plugin to be called with a range argument

+ +++ + + + + + +
Parameters:
    +
  • name (str) – name of the plugin
  • +
  • description (str) – description of the plugin
  • +
  • action – function to call with the BinaryView and AddressRange as arguments
  • +
  • is_valid – optional argument of a function passed a BinaryView to determine whether the plugin should be enabled for that view
  • +
+
Return type:

None

+
+
+

Warning

+

Calling register_for_range with the same function name will replace the existing function but will leak the memory of the original plugin.

+
+
+ +
+
+list = []
+
+ +
+ +
+
+class PluginCommandContext(view)[source]
+

Bases: object

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.plugin.BackgroundTask.html b/personal/api-docs/binaryninja.plugin.BackgroundTask.html new file mode 100644 index 0000000..ad43fdd --- /dev/null +++ b/personal/api-docs/binaryninja.plugin.BackgroundTask.html @@ -0,0 +1,322 @@ + + + + + + + + + + + binaryninja.plugin.BackgroundTask — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.plugin.BackgroundTask

+
+
+class BackgroundTask(initial_progress_text='', can_cancel=False, handle=None)[source]
+
+
+__init__(initial_progress_text='', can_cancel=False, handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + +
__init__([initial_progress_text, …])x.__init__(…) initializes x; see help(type(x)) for signature
cancel()
finish()
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + +
can_cancelWhether the task can be cancelled (read-only)
cancelledWhether the task has been cancelled
finishedWhether the task has finished
list
progressText description of the progress of the background task (displayed in status bar of the UI)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.plugin.BackgroundTaskThread.html b/personal/api-docs/binaryninja.plugin.BackgroundTaskThread.html new file mode 100644 index 0000000..0fc787e --- /dev/null +++ b/personal/api-docs/binaryninja.plugin.BackgroundTaskThread.html @@ -0,0 +1,331 @@ + + + + + + + + + + + binaryninja.plugin.BackgroundTaskThread — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.plugin.BackgroundTaskThread

+
+
+class BackgroundTaskThread(initial_progress_text='', can_cancel=False)[source]
+
+
+__init__(initial_progress_text='', can_cancel=False)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + +
__init__([initial_progress_text, can_cancel])x.__init__(…) initializes x; see help(type(x)) for signature
cancel()
finish()
join()
run()
start()
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + +
can_cancelWhether the task can be cancelled (read-only)
cancelledWhether the task has been cancelled
finishedWhether the task has finished
list
progressText description of the progress of the background task (displayed in status bar of the UI)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.plugin.MainThreadAction.html b/personal/api-docs/binaryninja.plugin.MainThreadAction.html new file mode 100644 index 0000000..b4ad113 --- /dev/null +++ b/personal/api-docs/binaryninja.plugin.MainThreadAction.html @@ -0,0 +1,310 @@ + + + + + + + + + + + binaryninja.plugin.MainThreadAction — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.plugin.MainThreadAction

+
+
+class MainThreadAction(handle)[source]
+
+
+__init__(handle)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + +
__init__(handle)x.__init__(…) initializes x; see help(type(x)) for signature
execute()
wait()
+

Attributes

+ ++++ + + + + + +
done
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.plugin.MainThreadActionHandler.html b/personal/api-docs/binaryninja.plugin.MainThreadActionHandler.html new file mode 100644 index 0000000..1a14868 --- /dev/null +++ b/personal/api-docs/binaryninja.plugin.MainThreadActionHandler.html @@ -0,0 +1,298 @@ + + + + + + + + + + + binaryninja.plugin.MainThreadActionHandler — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.plugin.MainThreadActionHandler

+
+
+class MainThreadActionHandler[source]
+
+
+__init__()[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + +
__init__()x.__init__(…) initializes x; see help(type(x)) for signature
add_action(action)
register()
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.plugin.PluginCommand.html b/personal/api-docs/binaryninja.plugin.PluginCommand.html new file mode 100644 index 0000000..9e8dc5e --- /dev/null +++ b/personal/api-docs/binaryninja.plugin.PluginCommand.html @@ -0,0 +1,337 @@ + + + + + + + + + + + binaryninja.plugin.PluginCommand — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.plugin.PluginCommand

+
+
+class PluginCommand(cmd)[source]
+
+
+__init__(cmd)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__(cmd)x.__init__(…) initializes x; see help(type(x)) for signature
execute(context)
get_valid_list(context)Dict of registered plugins
is_valid(context)
register(name, description, action[, is_valid])register Register a plugin
register_for_address(name, description, action)register_for_address Register a plugin to be called with an address argument
register_for_function(name, description, action)register_for_function Register a plugin to be called with a function argument
register_for_low_level_il_function(name, …)register_for_low_level_il_function Register a plugin to be called with a low level IL function argument
register_for_low_level_il_instruction(name, …)register_for_low_level_il_instruction Register a plugin to be called with a low level IL instruction argument
register_for_medium_level_il_function(name, …)register_for_medium_level_il_function Register a plugin to be called with a medium level IL function argument
register_for_medium_level_il_instruction(…)register_for_medium_level_il_instruction Register a plugin to be called with a medium level IL instruction argument
register_for_range(name, description, action)register_for_range Register a plugin to be called with a range argument
+

Attributes

+ ++++ + + + + + +
list
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.plugin.PluginCommandContext.html b/personal/api-docs/binaryninja.plugin.PluginCommandContext.html new file mode 100644 index 0000000..ff88370 --- /dev/null +++ b/personal/api-docs/binaryninja.plugin.PluginCommandContext.html @@ -0,0 +1,292 @@ + + + + + + + + + + + binaryninja.plugin.PluginCommandContext — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.plugin.PluginCommandContext

+
+
+class PluginCommandContext(view)[source]
+
+
+__init__(view)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(view)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.plugin.range.html b/personal/api-docs/binaryninja.plugin.range.html new file mode 100644 index 0000000..3f04847 --- /dev/null +++ b/personal/api-docs/binaryninja.plugin.range.html @@ -0,0 +1,275 @@ + + + + + + + + + + + binaryninja.plugin.range — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.plugin.range

+
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.plugin.with_metaclass.html b/personal/api-docs/binaryninja.plugin.with_metaclass.html new file mode 100644 index 0000000..d34735b --- /dev/null +++ b/personal/api-docs/binaryninja.plugin.with_metaclass.html @@ -0,0 +1,275 @@ + + + + + + + + + + + binaryninja.plugin.with_metaclass — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.plugin.with_metaclass

+
+
+with_metaclass(meta, *bases)[source]
+

Create a base class with a metaclass.

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.pluginmanager-module.html b/personal/api-docs/binaryninja.pluginmanager-module.html new file mode 100644 index 0000000..27b53b9 --- /dev/null +++ b/personal/api-docs/binaryninja.pluginmanager-module.html @@ -0,0 +1,697 @@ + + + + + + + + + + + pluginmanager module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

pluginmanager module

+ ++++ + + + + + + + + + + + + + + +
binaryninja.pluginmanager.RepoPlugin(handle)``RepoPlugin` is mostly read-only, however you can install/uninstall enable/disable plugins.RepoPlugins are created by parsing the plugins.json in a plugin repository..
binaryninja.pluginmanager.Repository(handle)Repository is a read-only class.
binaryninja.pluginmanager.RepositoryManager([…])RepositoryManager Keeps track of all the repositories and keeps the enabled_plugins.json file coherent with the plugins that are installed/uninstalled enabled/disabled
binaryninja.pluginmanager.range(*args)A Python2 and Python3 Compatible Range Generator
+
+
+
+
+class RepoPlugin(handle)[source]
+

Bases: object

+

``RepoPlugin` is mostly read-only, however you can install/uninstall enable/disable plugins. RepoPlugins are +created by parsing the plugins.json in a plugin repository.

+
+
+class PluginType
+

Bases: binaryninja.enum.IntEnum

+
+
+ArchitecturePluginType = <PluginType.ArchitecturePluginType: 2>
+
+ +
+
+BinaryViewPluginType = <PluginType.BinaryViewPluginType: 3>
+
+ +
+
+CorePluginType = <PluginType.CorePluginType: 0>
+
+ +
+
+UiPluginType = <PluginType.UiPluginType: 1>
+
+ +
+ +
+
+class PluginUpdateStatus
+

Bases: binaryninja.enum.IntEnum

+
+
+UpToDatePluginStatus = <PluginUpdateStatus.UpToDatePluginStatus: 0>
+
+ +
+
+UpdatesAvailablePluginStatus = <PluginUpdateStatus.UpdatesAvailablePluginStatus: 1>
+
+ +
+ +
+
+api
+

string indicating the API used by the plugin

+
+ +
+
+description
+

String short description of the plugin

+
+ +
+
+enabled
+

Boolean True if the plugin is currently enabled, False otherwise

+
+ +
+
+installed
+

Boolean True if the plugin is installed, False otherwise

+
+ +
+
+license
+

String short license description (ie MIT, BSD, GPLv2, etc)

+
+ +
+
+license_text
+

String complete license text for the given plugin

+
+ +
+
+long_description
+

String long description of the plugin

+
+ +
+
+minimum_version
+

String minimum version the plugin was tested on

+
+ +
+
+name
+

String name of the plugin

+
+ +
+
+path
+

Relative path from the base of the repository to the actual plugin

+
+ +
+
+plugin_types
+

List of PluginType enumeration objects indicating the plugin type(s)

+
+ +
+
+update_status
+

PluginUpdateStatus enumeration indicating if the plugin is up to date or not

+
+ +
+
+url
+

String URL of the plugin’s git repository

+
+ +
+
+version
+

String version of the plugin

+
+ +
+ +
+
+class Repository(handle)[source]
+

Bases: object

+

Repository is a read-only class. Use RepositoryManager to Enable/Disable/Install/Uninstall plugins.

+
+
+full_path
+

String full path the repository

+
+ +
+
+initialized
+

Boolean True when the repository has been initialized

+
+ +
+
+local_reference
+

String for the local git reference (ie ‘master’)

+
+ +
+
+path
+

String local path to store the given plugin repository

+
+ +
+
+plugins
+

List of RepoPlugin objects contained within this repository

+
+ +
+
+remote_reference
+

String for the remote git reference (ie ‘origin’)

+
+ +
+
+url
+

String URL of the git repository where the plugin repository’s are stored

+
+ +
+ +
+
+class RepositoryManager(handle=None)[source]
+

Bases: object

+

RepositoryManager Keeps track of all the repositories and keeps the enabled_plugins.json file coherent with +the plugins that are installed/uninstalled enabled/disabled

+
+
+add_repository(url=None, repopath=None, localreference='master', remotereference='origin')[source]
+

add_repository adds a new plugin repository for the manager to track.

+ +++ + + + + + + + + + +
Parameters:
    +
  • url (str) – URL to the git repository where the plugins are stored.
  • +
  • repopath (str) – path to where the repository will be stored on disk locally
  • +
  • localreference (str) – Optional reference to the local tracking branch typically “master”
  • +
  • remotereference (str) – Optional reference to the remote tracking branch typically “origin”
  • +
+
Returns:

Boolean value True if the repository was successfully added, False otherwise.

+
Return type:

Boolean

+
Example:
>>> mgr = RepositoryManager()
+>>> mgr.add_repository(url="https://github.com/vector35/community-plugins.git",
+                       repopath="myrepo",
+                       localreference="master", remotereference="origin")
+True
+>>>
+
+
+
+
+ +
+
+check_for_updates()[source]
+

Check for updates for all managed Repository objects

+
+ +
+
+disable_plugin(plugin, repo=None)[source]
+

disable_plugin Disable the specified plugin, pluginpath

+ +++ + + + + + + + + + +
Parameters:
    +
  • or str repo (Repository) – Repository containing the plugin to disable
  • +
  • or str plugin (RepoPlugin) – RepoPlugin to disable
  • +
+
Returns:

Boolean value True if the plugin was successfully disabled, False otherwise

+
Return type:

Boolean

+
Example:
>>> mgr = RepositoryManager()
+>>> mgr.disable_plugin('binaryninja-bookmarks')
+True
+>>>
+
+
+
+
+ +
+
+enable_plugin(plugin, install=True, repo=None)[source]
+

enable_plugin Enables the installed plugin ‘plugin’, optionally installing the plugin if install is set to +True (default), and optionally using the non-default repository.

+ +++ + + + + + + + + + +
Parameters:
    +
  • name (str) – Name of the plugin to enable
  • +
  • install (Boolean) – Optionally install the repo, defaults to True.
  • +
  • repo (str) – Optional, specify a repository other than the default repository.
  • +
+
Returns:

Boolean value True if the plugin was successfully enabled, False otherwise

+
Return type:

Boolean

+
Example:
>>> mgr = RepositoryManager()
+>>> mgr.enable_plugin('binaryninja-bookmarks')
+True
+>>>
+
+
+
+
+ +
+
+install_plugin(plugin, repo=None)[source]
+

install_plugin install the specified plugin, pluginpath

+ +++ + + + + + + + + + +
Parameters:
    +
  • or str repo (Repository) – Repository containing the plugin to install
  • +
  • or str plugin (RepoPlugin) – RepoPlugin to install
  • +
+
Returns:

Boolean value True if the plugin was successfully installed, False otherwise

+
Return type:

Boolean

+
Example:
>>> mgr = RepositoryManager()
+>>> mgr.install_plugin('binaryninja-bookmarks')
+True
+>>>
+
+
+
+
+ +
+
+uninstall_plugin(plugin, repo=None)[source]
+

uninstall_plugin uninstall the specified plugin, pluginpath

+ +++ + + + + + + + + + +
Parameters:
    +
  • or str repo (Repository) – Repository containing the plugin to uninstall
  • +
  • or str plugin (RepoPlugin) – RepoPlugin to uninstall
  • +
+
Returns:

Boolean value True if the plugin was successfully uninstalled, False otherwise

+
Return type:

Boolean

+
Example:
>>> mgr = RepositoryManager()
+>>> mgr.uninstall_plugin('binaryninja-bookmarks')
+True
+>>>
+
+
+
+
+ +
+
+update_plugin(plugin, repo=None)[source]
+

update_plugin update the specified plugin, pluginpath

+ +++ + + + + + + + + + +
Parameters:
    +
  • or str repo (Repository) – Repository containing the plugin to update
  • +
  • or str plugin (RepoPlugin) – RepoPlugin to update
  • +
+
Returns:

Boolean value True if the plugin was successfully updated, False otherwise

+
Return type:

Boolean

+
Example:
>>> mgr = RepositoryManager()
+>>> mgr.update_plugin('binaryninja-bookmarks')
+True
+>>>
+
+
+
+
+ +
+
+default_repository
+

Gets the default Repository

+
+ +
+
+plugins
+

List of all RepoPlugins in each repository

+
+ +
+
+repositories
+

List of Repository objects being managed

+
+ +
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.pluginmanager.RepoPlugin.html b/personal/api-docs/binaryninja.pluginmanager.RepoPlugin.html new file mode 100644 index 0000000..a5fc876 --- /dev/null +++ b/personal/api-docs/binaryninja.pluginmanager.RepoPlugin.html @@ -0,0 +1,341 @@ + + + + + + + + + + + binaryninja.pluginmanager.RepoPlugin — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.pluginmanager.RepoPlugin

+
+
+class RepoPlugin(handle)[source]
+

``RepoPlugin` is mostly read-only, however you can install/uninstall enable/disable plugins. RepoPlugins are +created by parsing the plugins.json in a plugin repository.

+
+
+__init__(handle)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(handle)x.__init__(…) initializes x; see help(type(x)) for signature
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
apistring indicating the API used by the plugin
descriptionString short description of the plugin
enabledBoolean True if the plugin is currently enabled, False otherwise
installedBoolean True if the plugin is installed, False otherwise
licenseString short license description (ie MIT, BSD, GPLv2, etc)
license_textString complete license text for the given plugin
long_descriptionString long description of the plugin
minimum_versionString minimum version the plugin was tested on
nameString name of the plugin
pathRelative path from the base of the repository to the actual plugin
plugin_typesList of PluginType enumeration objects indicating the plugin type(s)
update_statusPluginUpdateStatus enumeration indicating if the plugin is up to date or not
urlString URL of the plugin’s git repository
versionString version of the plugin
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.pluginmanager.Repository.html b/personal/api-docs/binaryninja.pluginmanager.Repository.html new file mode 100644 index 0000000..11ea7ef --- /dev/null +++ b/personal/api-docs/binaryninja.pluginmanager.Repository.html @@ -0,0 +1,319 @@ + + + + + + + + + + + binaryninja.pluginmanager.Repository — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.pluginmanager.Repository

+
+
+class Repository(handle)[source]
+

Repository is a read-only class. Use RepositoryManager to Enable/Disable/Install/Uninstall plugins.

+
+
+__init__(handle)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(handle)x.__init__(…) initializes x; see help(type(x)) for signature
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + +
full_pathString full path the repository
initializedBoolean True when the repository has been initialized
local_referenceString for the local git reference (ie ‘master’)
pathString local path to store the given plugin repository
pluginsList of RepoPlugin objects contained within this repository
remote_referenceString for the remote git reference (ie ‘origin’)
urlString URL of the git repository where the plugin repository’s are stored
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.pluginmanager.RepositoryManager.html b/personal/api-docs/binaryninja.pluginmanager.RepositoryManager.html new file mode 100644 index 0000000..ce82c1a --- /dev/null +++ b/personal/api-docs/binaryninja.pluginmanager.RepositoryManager.html @@ -0,0 +1,329 @@ + + + + + + + + + + + binaryninja.pluginmanager.RepositoryManager — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.pluginmanager.RepositoryManager

+
+
+class RepositoryManager(handle=None)[source]
+

RepositoryManager Keeps track of all the repositories and keeps the enabled_plugins.json file coherent with +the plugins that are installed/uninstalled enabled/disabled

+
+
+__init__(handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__([handle])x.__init__(…) initializes x; see help(type(x)) for signature
add_repository([url, repopath, …])add_repository adds a new plugin repository for the manager to track.
check_for_updates()Check for updates for all managed Repository objects
disable_plugin(plugin[, repo])disable_plugin Disable the specified plugin, pluginpath
enable_plugin(plugin[, install, repo])enable_plugin Enables the installed plugin ‘plugin’, optionally installing the plugin if install is set to True (default), and optionally using the non-default repository.
install_plugin(plugin[, repo])install_plugin install the specified plugin, pluginpath
uninstall_plugin(plugin[, repo])uninstall_plugin uninstall the specified plugin, pluginpath
update_plugin(plugin[, repo])update_plugin update the specified plugin, pluginpath
+

Attributes

+ ++++ + + + + + + + + + + + +
default_repositoryGets the default Repository
pluginsList of all RepoPlugins in each repository
repositoriesList of Repository objects being managed
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.pluginmanager.range.html b/personal/api-docs/binaryninja.pluginmanager.range.html new file mode 100644 index 0000000..6694225 --- /dev/null +++ b/personal/api-docs/binaryninja.pluginmanager.range.html @@ -0,0 +1,271 @@ + + + + + + + + + + + binaryninja.pluginmanager.range — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.pluginmanager.range

+
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.scriptingprovider-module.html b/personal/api-docs/binaryninja.scriptingprovider-module.html new file mode 100644 index 0000000..c8f3e4d --- /dev/null +++ b/personal/api-docs/binaryninja.scriptingprovider-module.html @@ -0,0 +1,572 @@ + + + + + + + + + + + scriptingprovider module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

scriptingprovider module

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +
binaryninja.scriptingprovider.PythonScriptingInstance(…)
binaryninja.scriptingprovider.PythonScriptingProvider([…])
binaryninja.scriptingprovider.ScriptingInstance(…)
binaryninja.scriptingprovider.ScriptingOutputListener
binaryninja.scriptingprovider.ScriptingProvider([…])
binaryninja.scriptingprovider.range(*args)A Python2 and Python3 Compatible Range Generator
binaryninja.scriptingprovider.redirect_stdio()
binaryninja.scriptingprovider.with_metaclass(…)Create a base class with a metaclass.
+
+
+
+
+class PythonScriptingInstance(provider)[source]
+

Bases: binaryninja.scriptingprovider.ScriptingInstance

+
+
+class InterpreterThread(instance)[source]
+

Bases: threading.Thread

+
+
+add_input(data)[source]
+
+ +
+
+end()[source]
+
+ +
+
+execute(code)[source]
+
+ +
+
+get_selected_data()[source]
+
+ +
+
+read(size)[source]
+
+ +
+
+run()[source]
+

Method representing the thread’s activity.

+

You may override this method in a subclass. The standard run() method +invokes the callable object passed to the object’s constructor as the +target argument, if any, with sequential and keyword arguments taken +from the args and kwargs arguments, respectively.

+
+ +
+
+write_at_cursor(data)[source]
+
+ +
+ +
+
+perform_cancel_script_input()[source]
+
+ +
+
+perform_destroy_instance()[source]
+
+ +
+
+perform_execute_script_input(text)[source]
+
+ +
+
+perform_set_current_address(addr)[source]
+
+ +
+
+perform_set_current_basic_block(block)[source]
+
+ +
+
+perform_set_current_binary_view(view)[source]
+
+ +
+
+perform_set_current_function(func)[source]
+
+ +
+
+perform_set_current_selection(begin, end)[source]
+
+ +
+ +
+
+class PythonScriptingProvider(handle=None)[source]
+

Bases: binaryninja.scriptingprovider.ScriptingProvider

+
+
+instance_class
+

alias of PythonScriptingInstance

+
+ +
+
+name = 'Python'
+
+ +
+ +
+
+class ScriptingInstance(provider, handle=None)[source]
+

Bases: object

+
+
+cancel_script_input(text)[source]
+
+ +
+
+error(text)[source]
+
+ +
+
+execute_script_input(text)[source]
+
+ +
+
+output(text)[source]
+
+ +
+
+perform_cancel_script_input()[source]
+
+ +
+
+perform_destroy_instance()[source]
+
+ +
+
+perform_execute_script_input(text)[source]
+
+ +
+
+perform_set_current_address(addr)[source]
+
+ +
+
+perform_set_current_basic_block(block)[source]
+
+ +
+
+perform_set_current_binary_view(view)[source]
+
+ +
+
+perform_set_current_function(func)[source]
+
+ +
+
+perform_set_current_selection(begin, end)[source]
+
+ +
+
+register_output_listener(listener)[source]
+
+ +
+
+set_current_address(addr)[source]
+
+ +
+
+set_current_basic_block(block)[source]
+
+ +
+
+set_current_binary_view(view)[source]
+
+ +
+
+set_current_function(func)[source]
+
+ +
+
+set_current_selection(begin, end)[source]
+
+ +
+
+unregister_output_listener(listener)[source]
+
+ +
+
+input_ready_state
+
+ +
+ +
+
+class ScriptingOutputListener[source]
+

Bases: object

+
+
+notify_error(text)[source]
+
+ +
+
+notify_input_ready_state_changed(state)[source]
+
+ +
+
+notify_output(text)[source]
+
+ +
+ +
+
+class ScriptingProvider(handle=None)[source]
+

Bases: object

+
+
+create_instance()[source]
+
+ +
+
+register()[source]
+
+ +
+
+instance_class = None
+
+ +
+
+list = [<binaryninja.scriptingprovider.ScriptingProvider object>]
+
+ +
+
+name = None
+
+ +
+ +
+
+redirect_stdio()[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.scriptingprovider.PythonScriptingInstance.html b/personal/api-docs/binaryninja.scriptingprovider.PythonScriptingInstance.html new file mode 100644 index 0000000..9ca9700 --- /dev/null +++ b/personal/api-docs/binaryninja.scriptingprovider.PythonScriptingInstance.html @@ -0,0 +1,355 @@ + + + + + + + + + + + binaryninja.scriptingprovider.PythonScriptingInstance — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.scriptingprovider.PythonScriptingInstance

+
+
+class PythonScriptingInstance(provider)[source]
+
+
+__init__(provider)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__(provider)x.__init__(…) initializes x; see help(type(x)) for signature
error(text)
execute_script_input(text)
output(text)
perform_destroy_instance()
perform_execute_script_input(text)
perform_set_current_address(addr)
perform_set_current_basic_block(block)
perform_set_current_binary_view(view)
perform_set_current_function(func)
perform_set_current_selection(begin, end)
register_output_listener(listener)
set_current_address(addr)
set_current_basic_block(block)
set_current_binary_view(view)
set_current_function(func)
set_current_selection(begin, end)
unregister_output_listener(listener)
+

Attributes

+ ++++ + + + + + +
input_ready_state
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.scriptingprovider.PythonScriptingProvider.html b/personal/api-docs/binaryninja.scriptingprovider.PythonScriptingProvider.html new file mode 100644 index 0000000..8eaa4cb --- /dev/null +++ b/personal/api-docs/binaryninja.scriptingprovider.PythonScriptingProvider.html @@ -0,0 +1,313 @@ + + + + + + + + + + + binaryninja.scriptingprovider.PythonScriptingProvider — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.scriptingprovider.PythonScriptingProvider

+
+
+class PythonScriptingProvider(handle=None)[source]
+
+
+__init__(handle=None)
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + +
__init__([handle])x.__init__(…) initializes x; see help(type(x)) for signature
create_instance()
register()
+

Attributes

+ ++++ + + + + + + + + +
list
name
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.scriptingprovider.ScriptingInstance.html b/personal/api-docs/binaryninja.scriptingprovider.ScriptingInstance.html new file mode 100644 index 0000000..8ec78e1 --- /dev/null +++ b/personal/api-docs/binaryninja.scriptingprovider.ScriptingInstance.html @@ -0,0 +1,355 @@ + + + + + + + + + + + binaryninja.scriptingprovider.ScriptingInstance — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.scriptingprovider.ScriptingInstance

+
+
+class ScriptingInstance(provider, handle=None)[source]
+
+
+__init__(provider, handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__(provider[, handle])x.__init__(…) initializes x; see help(type(x)) for signature
error(text)
execute_script_input(text)
output(text)
perform_destroy_instance()
perform_execute_script_input(text)
perform_set_current_address(addr)
perform_set_current_basic_block(block)
perform_set_current_binary_view(view)
perform_set_current_function(func)
perform_set_current_selection(begin, end)
register_output_listener(listener)
set_current_address(addr)
set_current_basic_block(block)
set_current_binary_view(view)
set_current_function(func)
set_current_selection(begin, end)
unregister_output_listener(listener)
+

Attributes

+ ++++ + + + + + +
input_ready_state
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.scriptingprovider.ScriptingOutputListener.html b/personal/api-docs/binaryninja.scriptingprovider.ScriptingOutputListener.html new file mode 100644 index 0000000..e76abf6 --- /dev/null +++ b/personal/api-docs/binaryninja.scriptingprovider.ScriptingOutputListener.html @@ -0,0 +1,298 @@ + + + + + + + + + + + binaryninja.scriptingprovider.ScriptingOutputListener — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.scriptingprovider.ScriptingOutputListener

+
+
+class ScriptingOutputListener[source]
+
+
+__init__()
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + +
notify_error(text)
notify_input_ready_state_changed(state)
notify_output(text)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.scriptingprovider.ScriptingProvider.html b/personal/api-docs/binaryninja.scriptingprovider.ScriptingProvider.html new file mode 100644 index 0000000..cc94476 --- /dev/null +++ b/personal/api-docs/binaryninja.scriptingprovider.ScriptingProvider.html @@ -0,0 +1,316 @@ + + + + + + + + + + + binaryninja.scriptingprovider.ScriptingProvider — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.scriptingprovider.ScriptingProvider

+
+
+class ScriptingProvider(handle=None)[source]
+
+
+__init__(handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + +
__init__([handle])x.__init__(…) initializes x; see help(type(x)) for signature
create_instance()
register()
+

Attributes

+ ++++ + + + + + + + + + + + +
instance_class
list
name
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.scriptingprovider.range.html b/personal/api-docs/binaryninja.scriptingprovider.range.html new file mode 100644 index 0000000..0ac7f09 --- /dev/null +++ b/personal/api-docs/binaryninja.scriptingprovider.range.html @@ -0,0 +1,275 @@ + + + + + + + + + + + binaryninja.scriptingprovider.range — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.scriptingprovider.range

+
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.scriptingprovider.redirect_stdio.html b/personal/api-docs/binaryninja.scriptingprovider.redirect_stdio.html new file mode 100644 index 0000000..da9c74e --- /dev/null +++ b/personal/api-docs/binaryninja.scriptingprovider.redirect_stdio.html @@ -0,0 +1,274 @@ + + + + + + + + + + + binaryninja.scriptingprovider.redirect_stdio — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.scriptingprovider.redirect_stdio

+
+
+redirect_stdio()[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.scriptingprovider.with_metaclass.html b/personal/api-docs/binaryninja.scriptingprovider.with_metaclass.html new file mode 100644 index 0000000..6d888be --- /dev/null +++ b/personal/api-docs/binaryninja.scriptingprovider.with_metaclass.html @@ -0,0 +1,275 @@ + + + + + + + + + + + binaryninja.scriptingprovider.with_metaclass — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.scriptingprovider.with_metaclass

+
+
+with_metaclass(meta, *bases)[source]
+

Create a base class with a metaclass.

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.settings-module.html b/personal/api-docs/binaryninja.settings-module.html new file mode 100644 index 0000000..df4fea9 --- /dev/null +++ b/personal/api-docs/binaryninja.settings-module.html @@ -0,0 +1,449 @@ + + + + + + + + + + + settings module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

settings module

+ ++++ + + + + + + + + + + + +
binaryninja.settings.Settings([registry_id])
binaryninja.settings.pyNativeStr(arg)
binaryninja.settings.range(*args)A Python2 and Python3 Compatible Range Generator
+
+
+
+
+class Settings(registry_id='default')[source]
+

Bases: object

+
+
+copy_value(dest_registry_id, id)[source]
+
+ +
+
+get_bool(id, view=None)[source]
+
+ +
+
+get_bool_with_scope(id, view=None, scope=<SettingsScope.SettingsAutoScope: 1>)[source]
+
+ +
+
+get_double(id, view=None)[source]
+
+ +
+
+get_double_with_scope(id, view=None, scope=<SettingsScope.SettingsAutoScope: 1>)[source]
+
+ +
+
+get_integer(id, view=None)[source]
+
+ +
+
+get_integer_with_scope(id, view=None, scope=<SettingsScope.SettingsAutoScope: 1>)[source]
+
+ +
+
+get_schema()[source]
+
+ +
+
+get_string(id, view=None)[source]
+
+ +
+
+get_string_list(id, view=None)[source]
+
+ +
+
+get_string_list_with_scope(id, view=None, scope=<SettingsScope.SettingsAutoScope: 1>)[source]
+
+ +
+
+get_string_with_scope(id, view=None, scope=<SettingsScope.SettingsAutoScope: 1>)[source]
+
+ +
+
+register_group(group, title)[source]
+

register_group registers a group for use with this Settings registry. Groups provide a simple way to organize settings.

+ +++ + + + + + + + + + +
Parameters:
    +
  • group (str) – a unique identifier
  • +
  • title (str) – a user friendly name appropriate for UI presentation
  • +
+
Returns:

True on success, False on failure.

+
Return type:

bool

+
Example:
>>> Settings().register_group("solver", "Solver")
+True
+>>>
+
+
+
+
+ +
+
+register_setting(id, properties)[source]
+

register_setting registers a new setting with this Settings registry.

+ +++ + + + + + + + + + +
Parameters:
    +
  • id (str) – a unique setting identifier in the form <group>.<id>
  • +
  • properties (str) – a JSON string describes the setting schema
  • +
+
Returns:

True on success, False on failure.

+
Return type:

bool

+
Example:
>>> Settings().register_group("solver", "Solver")
+True
+>>> Settings().register_setting("solver.basicBlockSlicing", '{"description" : "Enable the basic block slicing in the solver.", "title" : "Basic Block Slicing", "default" : true, "type" : "boolean", "id" : "basicBlockSlicing"}')
+True
+
+
+
+
+ +
+
+reset(id, view=None, scope=<SettingsScope.SettingsAutoScope: 1>)[source]
+
+ +
+
+reset_all(view=None, scope=<SettingsScope.SettingsAutoScope: 1>)[source]
+
+ +
+
+set_bool(id, value, view=None, scope=<SettingsScope.SettingsAutoScope: 1>)[source]
+
+ +
+
+set_double(id, value, view=None, scope=<SettingsScope.SettingsAutoScope: 1>)[source]
+
+ +
+
+set_integer(id, value, view=None, scope=<SettingsScope.SettingsAutoScope: 1>)[source]
+
+ +
+
+set_string(id, value, view=None, scope=<SettingsScope.SettingsAutoScope: 1>)[source]
+
+ +
+
+set_string_list(id, value, view=None, scope=<SettingsScope.SettingsAutoScope: 1>)[source]
+
+ +
+
+update_property(id, setting_property)[source]
+
+ +
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.settings.Settings.html b/personal/api-docs/binaryninja.settings.Settings.html new file mode 100644 index 0000000..cd12a8d --- /dev/null +++ b/personal/api-docs/binaryninja.settings.Settings.html @@ -0,0 +1,350 @@ + + + + + + + + + + + binaryninja.settings.Settings — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.settings.Settings

+
+
+class Settings(registry_id='default')[source]
+
+
+__init__(registry_id='default')[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__([registry_id])x.__init__(…) initializes x; see help(type(x)) for signature
get_bool(id[, view])
get_bool_with_scope(id[, view, scope])
get_double(id[, view])
get_double_with_scope(id[, view, scope])
get_integer(id[, view])
get_integer_with_scope(id[, view, scope])
get_schema()
get_string(id[, view])
get_string_list(id[, view])
get_string_list_with_scope(id[, view, scope])
get_string_with_scope(id[, view, scope])
register_group(group, title)register_group registers a group for use with this Settings registry.
register_setting(id, properties)register_setting registers a new setting with this Settings registry.
reset(id[, view, scope])
reset_all([view, scope])
set_bool(id, value[, view, scope])
set_double(id, value[, view, scope])
set_integer(id, value[, view, scope])
set_string(id, value[, view, scope])
set_string_list(id, value[, view, scope])
update_property(id, setting_property)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.settings.pyNativeStr.html b/personal/api-docs/binaryninja.settings.pyNativeStr.html new file mode 100644 index 0000000..15d2f77 --- /dev/null +++ b/personal/api-docs/binaryninja.settings.pyNativeStr.html @@ -0,0 +1,269 @@ + + + + + + + + + + + binaryninja.settings.pyNativeStr — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.settings.pyNativeStr

+
+
+pyNativeStr(arg)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.settings.range.html b/personal/api-docs/binaryninja.settings.range.html new file mode 100644 index 0000000..312bdfd --- /dev/null +++ b/personal/api-docs/binaryninja.settings.range.html @@ -0,0 +1,270 @@ + + + + + + + + + + + binaryninja.settings.range — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.settings.range

+
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.transform-module.html b/personal/api-docs/binaryninja.transform-module.html new file mode 100644 index 0000000..6cc0aea --- /dev/null +++ b/personal/api-docs/binaryninja.transform-module.html @@ -0,0 +1,346 @@ + + + + + + + + + + + transform module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

transform module

+ ++++ + + + + + + + + + + + + + + +
binaryninja.transform.Transform(handle)
binaryninja.transform.TransformParameter(name)
binaryninja.transform.range(*args)A Python2 and Python3 Compatible Range Generator
binaryninja.transform.with_metaclass(meta, …)Create a base class with a metaclass.
+
+
+
+
+class Transform(handle)[source]
+

Bases: object

+
+
+decode(input_buf, params={})[source]
+
+ +
+
+encode(input_buf, params={})[source]
+
+ +
+
+perform_decode(data, params)[source]
+
+ +
+
+perform_encode(data, params)[source]
+
+ +
+
+group = None
+
+ +
+
+list = [<transform: Zlib>, <transform: StringEscape>, <transform: RawHex>, <transform: HexDump>, <transform: Base64>, <transform: Reverse>, <transform: CArray08>, <transform: CArrayA16>, <transform: CArrayA32>, <transform: CArrayA64>, <transform: CArrayB16>, <transform: CArrayB32>, <transform: CArrayB64>, <transform: IntList08>, <transform: IntListA16>, <transform: IntListA32>, <transform: IntListA64>, <transform: IntListB16>, <transform: IntListB32>, <transform: IntListB64>]
+
+ +
+
+long_name = None
+
+ +
+
+name = None
+
+ +
+
+parameters = []
+
+ +
+
+transform_type = None
+
+ +
+ +
+
+class TransformParameter(name, long_name=None, fixed_length=0)[source]
+

Bases: object

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.transform.Transform.html b/personal/api-docs/binaryninja.transform.Transform.html new file mode 100644 index 0000000..08cd48b --- /dev/null +++ b/personal/api-docs/binaryninja.transform.Transform.html @@ -0,0 +1,327 @@ + + + + + + + + + + + binaryninja.transform.Transform — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.transform.Transform

+
+
+class Transform(handle)[source]
+
+
+__init__(handle)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + +
__init__(handle)x.__init__(…) initializes x; see help(type(x)) for signature
decode(input_buf[, params])
encode(input_buf[, params])
perform_decode(data, params)
perform_encode(data, params)
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + +
group
list
long_name
name
parameters
transform_type
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.transform.TransformParameter.html b/personal/api-docs/binaryninja.transform.TransformParameter.html new file mode 100644 index 0000000..7a9eaa6 --- /dev/null +++ b/personal/api-docs/binaryninja.transform.TransformParameter.html @@ -0,0 +1,288 @@ + + + + + + + + + + + binaryninja.transform.TransformParameter — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.transform.TransformParameter

+
+
+class TransformParameter(name, long_name=None, fixed_length=0)[source]
+
+
+__init__(name, long_name=None, fixed_length=0)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(name[, long_name, fixed_length])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.transform.range.html b/personal/api-docs/binaryninja.transform.range.html new file mode 100644 index 0000000..a15a747 --- /dev/null +++ b/personal/api-docs/binaryninja.transform.range.html @@ -0,0 +1,271 @@ + + + + + + + + + + + binaryninja.transform.range — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.transform.range

+
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.transform.with_metaclass.html b/personal/api-docs/binaryninja.transform.with_metaclass.html new file mode 100644 index 0000000..cb30c0e --- /dev/null +++ b/personal/api-docs/binaryninja.transform.with_metaclass.html @@ -0,0 +1,271 @@ + + + + + + + + + + + binaryninja.transform.with_metaclass — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.transform.with_metaclass

+
+
+with_metaclass(meta, *bases)[source]
+

Create a base class with a metaclass.

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.types-module.html b/personal/api-docs/binaryninja.types-module.html new file mode 100644 index 0000000..f6ce4de --- /dev/null +++ b/personal/api-docs/binaryninja.types-module.html @@ -0,0 +1,941 @@ + + + + + + + + + + + types module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

types module

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
binaryninja.types.BoolWithConfidence(value)
binaryninja.types.Enumeration([handle])
binaryninja.types.EnumerationMember(name, …)
binaryninja.types.FunctionParameter(param_type)
binaryninja.types.NameSpace([name])
binaryninja.types.NamedTypeReference([…])
binaryninja.types.QualifiedName([name])
binaryninja.types.ReferenceTypeWithConfidence(value)
binaryninja.types.RegisterSet(reg_list[, …])
binaryninja.types.RegisterStackAdjustmentWithConfidence(value)
binaryninja.types.SizeWithConfidence(value)
binaryninja.types.Structure([handle])
binaryninja.types.StructureMember(t, name, …)
binaryninja.types.Symbol(sym_type, addr, …)Symbols are defined as one of the following types:
binaryninja.types.Type(handle[, platform, …])
binaryninja.types.TypeParserResult(types, …)
binaryninja.types.preprocess_source(source)preprocess_source run the C preprocessor on the given source or source filename.
binaryninja.types.pyNativeStr(arg)
binaryninja.types.range(*args)A Python2 and Python3 Compatible Range Generator
+
+
+
+
+class BoolWithConfidence(value, confidence=255)[source]
+

Bases: object

+
+ +
+
+class Enumeration(handle=None)[source]
+

Bases: object

+
+
+append(name, value=None)[source]
+
+ +
+
+remove(i)[source]
+
+ +
+
+replace(i, name, value)[source]
+
+ +
+
+members
+

Enumeration member list (read-only)

+
+ +
+ +
+
+class EnumerationMember(name, value, default)[source]
+

Bases: object

+
+ +
+
+class FunctionParameter(param_type, name='', location=None)[source]
+

Bases: object

+
+ +
+
+class NameSpace(name=[])[source]
+

Bases: binaryninja.types.QualifiedName

+
+ +
+
+class NamedTypeReference(type_class=<NamedTypeReferenceClass.UnknownNamedTypeClass: 0>, type_id=None, name=None, handle=None)[source]
+

Bases: object

+
+
+classmethod generate_auto_demangled_type_ref(type_class, name)[source]
+
+ +
+
+classmethod generate_auto_type_ref(type_class, source, name)[source]
+
+ +
+
+name
+
+ +
+
+type_class
+
+ +
+
+type_id
+
+ +
+ +
+
+class QualifiedName(name=[])[source]
+

Bases: object

+
+ +
+
+class ReferenceTypeWithConfidence(value, confidence=255)[source]
+

Bases: object

+
+ +
+
+class RegisterSet(reg_list, confidence=255)[source]
+

Bases: object

+
+
+with_confidence(confidence)[source]
+
+ +
+ +
+
+class RegisterStackAdjustmentWithConfidence(value, confidence=255)[source]
+

Bases: object

+
+ +
+
+class SizeWithConfidence(value, confidence=255)[source]
+

Bases: object

+
+ +
+
+class Structure(handle=None)[source]
+

Bases: object

+
+
+append(t, name='')[source]
+
+ +
+
+insert(offset, t, name='')[source]
+
+ +
+
+remove(i)[source]
+
+ +
+
+replace(i, t, name='')[source]
+
+ +
+
+alignment
+

Structure alignment

+
+ +
+
+members
+

Structure member list (read-only)

+
+ +
+
+packed
+
+ +
+
+type
+
+ +
+
+union
+
+ +
+
+width
+

Structure width

+
+ +
+ +
+
+class StructureMember(t, name, offset)[source]
+

Bases: object

+
+ +
+
+class Symbol(sym_type, addr, short_name, full_name=None, raw_name=None, handle=None, binding=None, namespace=None)[source]
+

Bases: object

+

Symbols are defined as one of the following types:

+
+
++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
SymbolTypeDescription
FunctionSymbolSymbol for Function that exists in the current binary
ImportAddressSymbolSymbol defined in the Import Address Table
ImportedFunctionSymbolSymbol for Function that is not defined in the current binary
DataSymbolSymbol for Data in the current binary
ImportedDataSymbolSymbol for Data that is not defined in the current binary
ExternalSymbolSymbols for data and code that reside outside the BinaryView
+
+
+
+address
+

Symbol address (read-only)

+
+ +
+
+auto
+
+ +
+
+binding
+

Symbol binding (read-only)

+
+ +
+
+full_name
+

Symbol full name (read-only)

+
+ +
+
+name
+

Symbol name (read-only)

+
+ +
+
+namespace
+

Symbol namespace (read-only)

+
+ +
+
+raw_name
+

Symbol raw name (read-only)

+
+ +
+
+short_name
+

Symbol short name (read-only)

+
+ +
+
+type
+

Symbol type (read-only)

+
+ +
+ +
+
+class Type(handle, platform=None, confidence=255)[source]
+

Bases: object

+
+
+classmethod array(t, count)[source]
+
+ +
+
+classmethod bool()[source]
+
+ +
+
+classmethod char()[source]
+
+ +
+
+classmethod enumeration_type(arch, e, width=None, sign=False)[source]
+
+ +
+
+classmethod float(width, altname='')[source]
+

float class method for creating an floating point Types.

+ +++ + + + +
Parameters:
    +
  • width (int) – width of the floating point number in bytes
  • +
  • altname (string) – alternate name for type
  • +
+
+
+ +
+
+classmethod function(ret, params, calling_convention=None, variable_arguments=None, stack_adjust=None)[source]
+

function class method for creating an function Type.

+ +++ + + + +
Parameters:
    +
  • ret (Type) – width of the integer in bytes
  • +
  • params (list(Type)) – list of parameter Types
  • +
  • calling_convention (CallingConvention) – optional argument for function calling convention
  • +
  • variable_arguments (bool) – optional argument for functions that have a variable number of arguments
  • +
+
+
+ +
+
+classmethod generate_auto_demangled_type_id(name)[source]
+
+ +
+
+classmethod generate_auto_type_id(source, name)[source]
+
+ +
+
+classmethod get_auto_demangled_type_id_source()[source]
+
+ +
+
+get_string_after_name()[source]
+
+ +
+
+get_string_before_name()[source]
+
+ +
+
+get_tokens(base_confidence=255)[source]
+
+ +
+
+get_tokens_after_name(base_confidence=255)[source]
+
+ +
+
+get_tokens_before_name(base_confidence=255)[source]
+
+ +
+
+classmethod int(width, sign=None, altname='')[source]
+

int class method for creating an int Type.

+ +++ + + + +
Parameters:
    +
  • width (int) – width of the integer in bytes
  • +
  • sign (bool) – optional variable representing signedness
  • +
  • altname (string) – alternate name for type
  • +
+
+
+ +
+
+classmethod named_type(named_type, width=0, align=1)[source]
+
+ +
+
+classmethod named_type_from_registered_type(view, name)[source]
+
+ +
+
+classmethod named_type_from_type(name, t)[source]
+
+ +
+
+classmethod named_type_from_type_and_id(type_id, name, t)[source]
+
+ +
+
+classmethod pointer(arch, t, const=None, volatile=None, ref_type=None)[source]
+
+ +
+
+classmethod structure_type(structure_type)[source]
+
+ +
+
+classmethod void()[source]
+
+ +
+
+with_confidence(confidence)[source]
+
+ +
+
+alignment
+

Type alignment (read-only)

+
+ +
+
+calling_convention
+

Calling convention (read-only)

+
+ +
+
+can_return
+

Whether type can return (read-only)

+
+ +
+
+const
+

Whether type is const (read/write)

+
+ +
+
+count
+

Type count (read-only)

+
+ +
+
+element_type
+

Target (read-only)

+
+ +
+
+enumeration
+

Type enumeration (read-only)

+
+ +
+
+has_variable_arguments
+

Whether type has variable arguments (read-only)

+
+ +
+
+modified
+

Whether type is modified (read-only)

+
+ +
+
+named_type_reference
+

Reference to a named type (read-only)

+
+ +
+
+offset
+

Offset into structure (read-only)

+
+ +
+
+parameters
+

Type parameters list (read-only)

+
+ +
+
+return_value
+

Return value (read-only)

+
+ +
+
+signed
+

Wether type is signed (read-only)

+
+ +
+
+stack_adjustment
+

Stack adjustment for function (read-only)

+
+ +
+
+structure
+

Structure of the type (read-only)

+
+ +
+
+target
+

Target (read-only)

+
+ +
+
+tokens
+

Type string as a list of tokens (read-only)

+
+ +
+
+type_class
+

Type class (read-only)

+
+ +
+
+width
+

Type width (read-only)

+
+ +
+ +
+
+class TypeParserResult(types, variables, functions)[source]
+

Bases: object

+
+ +
+
+preprocess_source(source, filename=None, include_dirs=[])[source]
+

preprocess_source run the C preprocessor on the given source or source filename.

+ +++ + + + + + + + + + +
Parameters:
    +
  • source (str) – source to pre-process
  • +
  • filename (str) – optional filename to pre-process
  • +
  • include_dirs (list(str)) – list of string directories to use as include directories.
  • +
+
Returns:

returns a tuple of (preprocessed_source, error_string)

+
Return type:

tuple(str,str)

+
Example:
>>> source = "#define TEN 10\nint x[TEN];\n"
+>>> preprocess_source(source)
+('#line 1 "input"\n\n#line 2 "input"\n int x [ 10 ] ;\n', '')
+>>>
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.types.BoolWithConfidence.html b/personal/api-docs/binaryninja.types.BoolWithConfidence.html new file mode 100644 index 0000000..3958351 --- /dev/null +++ b/personal/api-docs/binaryninja.types.BoolWithConfidence.html @@ -0,0 +1,303 @@ + + + + + + + + + + + binaryninja.types.BoolWithConfidence — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.types.BoolWithConfidence

+
+
+class BoolWithConfidence(value, confidence=255)[source]
+
+
+__init__(value, confidence=255)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(value[, confidence])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.types.Enumeration.html b/personal/api-docs/binaryninja.types.Enumeration.html new file mode 100644 index 0000000..c73dbe9 --- /dev/null +++ b/personal/api-docs/binaryninja.types.Enumeration.html @@ -0,0 +1,324 @@ + + + + + + + + + + + binaryninja.types.Enumeration — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.types.Enumeration

+
+
+class Enumeration(handle=None)[source]
+
+
+__init__(handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + +
__init__([handle])x.__init__(…) initializes x; see help(type(x)) for signature
append(name[, value])
remove(i)
replace(i, name, value)
+

Attributes

+ ++++ + + + + + +
membersEnumeration member list (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.types.EnumerationMember.html b/personal/api-docs/binaryninja.types.EnumerationMember.html new file mode 100644 index 0000000..6e109df --- /dev/null +++ b/personal/api-docs/binaryninja.types.EnumerationMember.html @@ -0,0 +1,303 @@ + + + + + + + + + + + binaryninja.types.EnumerationMember — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.types.EnumerationMember

+
+
+class EnumerationMember(name, value, default)[source]
+
+
+__init__(name, value, default)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(name, value, default)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.types.FunctionParameter.html b/personal/api-docs/binaryninja.types.FunctionParameter.html new file mode 100644 index 0000000..3c618a0 --- /dev/null +++ b/personal/api-docs/binaryninja.types.FunctionParameter.html @@ -0,0 +1,303 @@ + + + + + + + + + + + binaryninja.types.FunctionParameter — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.types.FunctionParameter

+
+
+class FunctionParameter(param_type, name='', location=None)[source]
+
+
+__init__(param_type, name='', location=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(param_type[, name, location])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.types.NameSpace.html b/personal/api-docs/binaryninja.types.NameSpace.html new file mode 100644 index 0000000..7da1fa7 --- /dev/null +++ b/personal/api-docs/binaryninja.types.NameSpace.html @@ -0,0 +1,303 @@ + + + + + + + + + + + binaryninja.types.NameSpace — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.types.NameSpace

+
+
+class NameSpace(name=[])[source]
+
+
+__init__(name=[])
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__([name])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.types.NamedTypeReference.html b/personal/api-docs/binaryninja.types.NamedTypeReference.html new file mode 100644 index 0000000..c002749 --- /dev/null +++ b/personal/api-docs/binaryninja.types.NamedTypeReference.html @@ -0,0 +1,327 @@ + + + + + + + + + + + binaryninja.types.NamedTypeReference — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.types.NamedTypeReference

+
+
+class NamedTypeReference(type_class=<NamedTypeReferenceClass.UnknownNamedTypeClass: 0>, type_id=None, name=None, handle=None)[source]
+
+
+__init__(type_class=<NamedTypeReferenceClass.UnknownNamedTypeClass: 0>, type_id=None, name=None, handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + +
__init__([type_class, type_id, name, handle])x.__init__(…) initializes x; see help(type(x)) for signature
generate_auto_demangled_type_ref(type_class, …)
generate_auto_type_ref(type_class, source, name)
+

Attributes

+ ++++ + + + + + + + + + + + +
name
type_class
type_id
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.types.QualifiedName.html b/personal/api-docs/binaryninja.types.QualifiedName.html new file mode 100644 index 0000000..43bbe9a --- /dev/null +++ b/personal/api-docs/binaryninja.types.QualifiedName.html @@ -0,0 +1,303 @@ + + + + + + + + + + + binaryninja.types.QualifiedName — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.types.QualifiedName

+
+
+class QualifiedName(name=[])[source]
+
+
+__init__(name=[])[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__([name])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.types.ReferenceTypeWithConfidence.html b/personal/api-docs/binaryninja.types.ReferenceTypeWithConfidence.html new file mode 100644 index 0000000..38c270a --- /dev/null +++ b/personal/api-docs/binaryninja.types.ReferenceTypeWithConfidence.html @@ -0,0 +1,303 @@ + + + + + + + + + + + binaryninja.types.ReferenceTypeWithConfidence — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.types.ReferenceTypeWithConfidence

+
+
+class ReferenceTypeWithConfidence(value, confidence=255)[source]
+
+
+__init__(value, confidence=255)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(value[, confidence])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.types.RegisterSet.html b/personal/api-docs/binaryninja.types.RegisterSet.html new file mode 100644 index 0000000..534dc00 --- /dev/null +++ b/personal/api-docs/binaryninja.types.RegisterSet.html @@ -0,0 +1,306 @@ + + + + + + + + + + + binaryninja.types.RegisterSet — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.types.RegisterSet

+
+
+class RegisterSet(reg_list, confidence=255)[source]
+
+
+__init__(reg_list, confidence=255)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + +
__init__(reg_list[, confidence])x.__init__(…) initializes x; see help(type(x)) for signature
with_confidence(confidence)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.types.RegisterStackAdjustmentWithConfidence.html b/personal/api-docs/binaryninja.types.RegisterStackAdjustmentWithConfidence.html new file mode 100644 index 0000000..100abd9 --- /dev/null +++ b/personal/api-docs/binaryninja.types.RegisterStackAdjustmentWithConfidence.html @@ -0,0 +1,303 @@ + + + + + + + + + + + binaryninja.types.RegisterStackAdjustmentWithConfidence — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.types.RegisterStackAdjustmentWithConfidence

+
+
+class RegisterStackAdjustmentWithConfidence(value, confidence=255)[source]
+
+
+__init__(value, confidence=255)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(value[, confidence])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.types.SizeWithConfidence.html b/personal/api-docs/binaryninja.types.SizeWithConfidence.html new file mode 100644 index 0000000..7c8732e --- /dev/null +++ b/personal/api-docs/binaryninja.types.SizeWithConfidence.html @@ -0,0 +1,303 @@ + + + + + + + + + + + binaryninja.types.SizeWithConfidence — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.types.SizeWithConfidence

+
+
+class SizeWithConfidence(value, confidence=255)[source]
+
+
+__init__(value, confidence=255)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(value[, confidence])x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.types.Structure.html b/personal/api-docs/binaryninja.types.Structure.html new file mode 100644 index 0000000..f921ed7 --- /dev/null +++ b/personal/api-docs/binaryninja.types.Structure.html @@ -0,0 +1,342 @@ + + + + + + + + + + + binaryninja.types.Structure — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.types.Structure

+
+
+class Structure(handle=None)[source]
+
+
+__init__(handle=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + +
__init__([handle])x.__init__(…) initializes x; see help(type(x)) for signature
append(t[, name])
insert(offset, t[, name])
remove(i)
replace(i, t[, name])
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + +
alignmentStructure alignment
membersStructure member list (read-only)
packed
type
union
widthStructure width
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.types.StructureMember.html b/personal/api-docs/binaryninja.types.StructureMember.html new file mode 100644 index 0000000..9633c86 --- /dev/null +++ b/personal/api-docs/binaryninja.types.StructureMember.html @@ -0,0 +1,303 @@ + + + + + + + + + + + binaryninja.types.StructureMember — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.types.StructureMember

+
+
+class StructureMember(t, name, offset)[source]
+
+
+__init__(t, name, offset)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(t, name, offset)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.types.Symbol.html b/personal/api-docs/binaryninja.types.Symbol.html new file mode 100644 index 0000000..dbf23fa --- /dev/null +++ b/personal/api-docs/binaryninja.types.Symbol.html @@ -0,0 +1,373 @@ + + + + + + + + + + + binaryninja.types.Symbol — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.types.Symbol

+
+
+class Symbol(sym_type, addr, short_name, full_name=None, raw_name=None, handle=None, binding=None, namespace=None)[source]
+

Symbols are defined as one of the following types:

+
+
++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
SymbolTypeDescription
FunctionSymbolSymbol for Function that exists in the current binary
ImportAddressSymbolSymbol defined in the Import Address Table
ImportedFunctionSymbolSymbol for Function that is not defined in the current binary
DataSymbolSymbol for Data in the current binary
ImportedDataSymbolSymbol for Data that is not defined in the current binary
ExternalSymbolSymbols for data and code that reside outside the BinaryView
+
+
+
+__init__(sym_type, addr, short_name, full_name=None, raw_name=None, handle=None, binding=None, namespace=None)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(sym_type, addr, short_name[, …])x.__init__(…) initializes x; see help(type(x)) for signature
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addressSymbol address (read-only)
auto
bindingSymbol binding (read-only)
full_nameSymbol full name (read-only)
nameSymbol name (read-only)
namespaceSymbol namespace (read-only)
raw_nameSymbol raw name (read-only)
short_nameSymbol short name (read-only)
typeSymbol type (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.types.Type.html b/personal/api-docs/binaryninja.types.Type.html new file mode 100644 index 0000000..6ac4c9a --- /dev/null +++ b/personal/api-docs/binaryninja.types.Type.html @@ -0,0 +1,441 @@ + + + + + + + + + + + binaryninja.types.Type — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.types.Type

+
+
+class Type(handle, platform=None, confidence=255)[source]
+
+
+__init__(handle, platform=None, confidence=255)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__init__(handle[, platform, confidence])x.__init__(…) initializes x; see help(type(x)) for signature
array(t, count)
bool()
char()
enumeration_type(arch, e[, width, sign])
float(width[, altname])float class method for creating an floating point Types.
function(ret, params[, calling_convention, …])function class method for creating an function Type.
generate_auto_demangled_type_id(name)
generate_auto_type_id(source, name)
get_auto_demangled_type_id_source()
get_string_after_name()
get_string_before_name()
get_tokens([base_confidence])
get_tokens_after_name([base_confidence])
get_tokens_before_name([base_confidence])
int(width[, sign, altname])int class method for creating an int Type.
named_type(named_type[, width, align])
named_type_from_registered_type(view, name)
named_type_from_type(name, t)
named_type_from_type_and_id(type_id, name, t)
pointer(arch, t[, const, volatile, ref_type])
structure_type(structure_type)
void()
with_confidence(confidence)
+

Attributes

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
alignmentType alignment (read-only)
calling_conventionCalling convention (read-only)
can_returnWhether type can return (read-only)
constWhether type is const (read/write)
countType count (read-only)
element_typeTarget (read-only)
enumerationType enumeration (read-only)
has_variable_argumentsWhether type has variable arguments (read-only)
modifiedWhether type is modified (read-only)
named_type_referenceReference to a named type (read-only)
offsetOffset into structure (read-only)
parametersType parameters list (read-only)
return_valueReturn value (read-only)
signedWether type is signed (read-only)
stack_adjustmentStack adjustment for function (read-only)
structureStructure of the type (read-only)
targetTarget (read-only)
tokensType string as a list of tokens (read-only)
type_classType class (read-only)
widthType width (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.types.TypeParserResult.html b/personal/api-docs/binaryninja.types.TypeParserResult.html new file mode 100644 index 0000000..8a8fac0 --- /dev/null +++ b/personal/api-docs/binaryninja.types.TypeParserResult.html @@ -0,0 +1,303 @@ + + + + + + + + + + + binaryninja.types.TypeParserResult — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.types.TypeParserResult

+
+
+class TypeParserResult(types, variables, functions)[source]
+
+
+__init__(types, variables, functions)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + +
__init__(types, variables, functions)x.__init__(…) initializes x; see help(type(x)) for signature
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.types.preprocess_source.html b/personal/api-docs/binaryninja.types.preprocess_source.html new file mode 100644 index 0000000..78d5639 --- /dev/null +++ b/personal/api-docs/binaryninja.types.preprocess_source.html @@ -0,0 +1,313 @@ + + + + + + + + + + + binaryninja.types.preprocess_source — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.types.preprocess_source

+
+
+preprocess_source(source, filename=None, include_dirs=[])[source]
+

preprocess_source run the C preprocessor on the given source or source filename.

+ +++ + + + + + + + + + +
Parameters:
    +
  • source (str) – source to pre-process
  • +
  • filename (str) – optional filename to pre-process
  • +
  • include_dirs (list(str)) – list of string directories to use as include directories.
  • +
+
Returns:

returns a tuple of (preprocessed_source, error_string)

+
Return type:

tuple(str,str)

+
Example:
>>> source = "#define TEN 10\nint x[TEN];\n"
+>>> preprocess_source(source)
+('#line 1 "input"\n\n#line 2 "input"\n int x [ 10 ] ;\n', '')
+>>>
+
+
+
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.types.pyNativeStr.html b/personal/api-docs/binaryninja.types.pyNativeStr.html new file mode 100644 index 0000000..5c52a32 --- /dev/null +++ b/personal/api-docs/binaryninja.types.pyNativeStr.html @@ -0,0 +1,285 @@ + + + + + + + + + + + binaryninja.types.pyNativeStr — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.types.pyNativeStr

+
+
+pyNativeStr(arg)[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.types.range.html b/personal/api-docs/binaryninja.types.range.html new file mode 100644 index 0000000..399a5ef --- /dev/null +++ b/personal/api-docs/binaryninja.types.range.html @@ -0,0 +1,286 @@ + + + + + + + + + + + binaryninja.types.range — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.types.range

+
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.undoaction-module.html b/personal/api-docs/binaryninja.undoaction-module.html new file mode 100644 index 0000000..2598ca6 --- /dev/null +++ b/personal/api-docs/binaryninja.undoaction-module.html @@ -0,0 +1,293 @@ + + + + + + + + + + + undoaction module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

undoaction module

+ ++++ + + + + + +
binaryninja.undoaction.UndoAction(view)
+
+
+
+
+class UndoAction(view)[source]
+

Bases: object

+
+
+classmethod register()[source]
+
+ +
+
+action_type = None
+
+ +
+
+name = None
+
+ +
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.undoaction.UndoAction.html b/personal/api-docs/binaryninja.undoaction.UndoAction.html new file mode 100644 index 0000000..14ed15c --- /dev/null +++ b/personal/api-docs/binaryninja.undoaction.UndoAction.html @@ -0,0 +1,303 @@ + + + + + + + + + + + binaryninja.undoaction.UndoAction — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.undoaction.UndoAction

+
+
+class UndoAction(view)[source]
+
+
+__init__(view)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + +
__init__(view)x.__init__(…) initializes x; see help(type(x)) for signature
register()
+

Attributes

+ ++++ + + + + + + + + +
action_type
name
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.update-module.html b/personal/api-docs/binaryninja.update-module.html new file mode 100644 index 0000000..53231aa --- /dev/null +++ b/personal/api-docs/binaryninja.update-module.html @@ -0,0 +1,446 @@ + + + + + + + + + + + update module — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

update module

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
binaryninja.update.UpdateChannel(name, desc, ver)
binaryninja.update.UpdateProgressCallback(func)
binaryninja.update.UpdateVersion(channel, …)
binaryninja.update.are_auto_updates_enabled()are_auto_updates_enabled queries if auto updates are enabled.
binaryninja.update.get_time_since_last_update_check()get_time_since_last_update_check returns the time stamp for the last time updates were checked.
binaryninja.update.install_pending_update()install_pending_update installs any pending updates
binaryninja.update.is_update_installation_pending()is_update_installation_pending whether an update has been downloaded and is waiting installation
binaryninja.update.range(*args)A Python2 and Python3 Compatible Range Generator
binaryninja.update.set_auto_updates_enabled(enabled)set_auto_updates_enabled sets auto update enabled status.
binaryninja.update.updates_checked()
binaryninja.update.with_metaclass(meta, *bases)Create a base class with a metaclass.
+
+
+
+
+class UpdateChannel(name, desc, ver)[source]
+

Bases: object

+
+
+update_to_latest(progress=None)[source]
+
+ +
+
+latest_version
+

Latest version (read-only)

+
+ +
+
+updates_available
+

Whether updates are available (read-only)

+
+ +
+
+versions
+

List of versions (read-only)

+
+ +
+ +
+
+class UpdateProgressCallback(func)[source]
+

Bases: object

+
+
+callback(ctxt, progress, total)[source]
+
+ +
+ +
+
+class UpdateVersion(channel, ver, notes, t)[source]
+

Bases: object

+
+
+update(progress=None)[source]
+
+ +
+ +
+
+are_auto_updates_enabled()[source]
+

are_auto_updates_enabled queries if auto updates are enabled.

+ +++ + + + + + +
Returns:boolean True if auto updates are enabled. False if they are disabled.
Return type:bool
+
+ +
+
+get_time_since_last_update_check()[source]
+

get_time_since_last_update_check returns the time stamp for the last time updates were checked.

+ +++ + + + + + +
Returns:time stacmp for last update check
Return type:int
+
+ +
+
+install_pending_update()[source]
+

install_pending_update installs any pending updates

+ +++ + + + +
Return type:None
+
+ +
+
+is_update_installation_pending()[source]
+

is_update_installation_pending whether an update has been downloaded and is waiting installation

+ +++ + + + + + +
Returns:boolean True if an update is pending, false if no update is pending
Return type:bool
+
+ +
+
+set_auto_updates_enabled(enabled)[source]
+

set_auto_updates_enabled sets auto update enabled status.

+ +++ + + + + + +
Parameters:enabled (bool) – True to enable update, False to disable updates.
Return type:None
+
+ +
+
+updates_checked()[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.update.UpdateChannel.html b/personal/api-docs/binaryninja.update.UpdateChannel.html new file mode 100644 index 0000000..30850a4 --- /dev/null +++ b/personal/api-docs/binaryninja.update.UpdateChannel.html @@ -0,0 +1,316 @@ + + + + + + + + + + + binaryninja.update.UpdateChannel — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.update.UpdateChannel

+
+
+class UpdateChannel(name, desc, ver)[source]
+
+
+__init__(name, desc, ver)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + +
__init__(name, desc, ver)x.__init__(…) initializes x; see help(type(x)) for signature
update_to_latest([progress])
+

Attributes

+ ++++ + + + + + + + + + + + +
latest_versionLatest version (read-only)
updates_availableWhether updates are available (read-only)
versionsList of versions (read-only)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.update.UpdateProgressCallback.html b/personal/api-docs/binaryninja.update.UpdateProgressCallback.html new file mode 100644 index 0000000..698e02d --- /dev/null +++ b/personal/api-docs/binaryninja.update.UpdateProgressCallback.html @@ -0,0 +1,298 @@ + + + + + + + + + + + binaryninja.update.UpdateProgressCallback — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.update.UpdateProgressCallback

+
+
+class UpdateProgressCallback(func)[source]
+
+
+__init__(func)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + +
__init__(func)x.__init__(…) initializes x; see help(type(x)) for signature
callback(ctxt, progress, total)
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.update.UpdateVersion.html b/personal/api-docs/binaryninja.update.UpdateVersion.html new file mode 100644 index 0000000..8737ae8 --- /dev/null +++ b/personal/api-docs/binaryninja.update.UpdateVersion.html @@ -0,0 +1,298 @@ + + + + + + + + + + + binaryninja.update.UpdateVersion — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.update.UpdateVersion

+
+
+class UpdateVersion(channel, ver, notes, t)[source]
+
+
+__init__(channel, ver, notes, t)[source]
+

x.__init__(…) initializes x; see help(type(x)) for signature

+
+ +

Methods

+ ++++ + + + + + + + + +
__init__(channel, ver, notes, t)x.__init__(…) initializes x; see help(type(x)) for signature
update([progress])
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.update.are_auto_updates_enabled.html b/personal/api-docs/binaryninja.update.are_auto_updates_enabled.html new file mode 100644 index 0000000..1edc2ac --- /dev/null +++ b/personal/api-docs/binaryninja.update.are_auto_updates_enabled.html @@ -0,0 +1,288 @@ + + + + + + + + + + + binaryninja.update.are_auto_updates_enabled — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.update.are_auto_updates_enabled

+
+
+are_auto_updates_enabled()[source]
+

are_auto_updates_enabled queries if auto updates are enabled.

+ +++ + + + + + +
Returns:boolean True if auto updates are enabled. False if they are disabled.
Return type:bool
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.update.get_time_since_last_update_check.html b/personal/api-docs/binaryninja.update.get_time_since_last_update_check.html new file mode 100644 index 0000000..a3ade95 --- /dev/null +++ b/personal/api-docs/binaryninja.update.get_time_since_last_update_check.html @@ -0,0 +1,288 @@ + + + + + + + + + + + binaryninja.update.get_time_since_last_update_check — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.update.get_time_since_last_update_check

+
+
+get_time_since_last_update_check()[source]
+

get_time_since_last_update_check returns the time stamp for the last time updates were checked.

+ +++ + + + + + +
Returns:time stacmp for last update check
Return type:int
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.update.install_pending_update.html b/personal/api-docs/binaryninja.update.install_pending_update.html new file mode 100644 index 0000000..f4f6f9a --- /dev/null +++ b/personal/api-docs/binaryninja.update.install_pending_update.html @@ -0,0 +1,286 @@ + + + + + + + + + + + binaryninja.update.install_pending_update — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.update.install_pending_update

+
+
+install_pending_update()[source]
+

install_pending_update installs any pending updates

+ +++ + + + +
Return type:None
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.update.is_update_installation_pending.html b/personal/api-docs/binaryninja.update.is_update_installation_pending.html new file mode 100644 index 0000000..de89c46 --- /dev/null +++ b/personal/api-docs/binaryninja.update.is_update_installation_pending.html @@ -0,0 +1,288 @@ + + + + + + + + + + + binaryninja.update.is_update_installation_pending — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.update.is_update_installation_pending

+
+
+is_update_installation_pending()[source]
+

is_update_installation_pending whether an update has been downloaded and is waiting installation

+ +++ + + + + + +
Returns:boolean True if an update is pending, false if no update is pending
Return type:bool
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.update.range.html b/personal/api-docs/binaryninja.update.range.html new file mode 100644 index 0000000..7bd875f --- /dev/null +++ b/personal/api-docs/binaryninja.update.range.html @@ -0,0 +1,278 @@ + + + + + + + + + + + binaryninja.update.range — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.update.range

+
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.update.set_auto_updates_enabled.html b/personal/api-docs/binaryninja.update.set_auto_updates_enabled.html new file mode 100644 index 0000000..ee2cf9e --- /dev/null +++ b/personal/api-docs/binaryninja.update.set_auto_updates_enabled.html @@ -0,0 +1,288 @@ + + + + + + + + + + + binaryninja.update.set_auto_updates_enabled — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.update.set_auto_updates_enabled

+
+
+set_auto_updates_enabled(enabled)[source]
+

set_auto_updates_enabled sets auto update enabled status.

+ +++ + + + + + +
Parameters:enabled (bool) – True to enable update, False to disable updates.
Return type:None
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.update.updates_checked.html b/personal/api-docs/binaryninja.update.updates_checked.html new file mode 100644 index 0000000..65b6ea5 --- /dev/null +++ b/personal/api-docs/binaryninja.update.updates_checked.html @@ -0,0 +1,277 @@ + + + + + + + + + + + binaryninja.update.updates_checked — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.update.updates_checked

+
+
+updates_checked()[source]
+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/binaryninja.update.with_metaclass.html b/personal/api-docs/binaryninja.update.with_metaclass.html new file mode 100644 index 0000000..156c706 --- /dev/null +++ b/personal/api-docs/binaryninja.update.with_metaclass.html @@ -0,0 +1,275 @@ + + + + + + + + + + + binaryninja.update.with_metaclass — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

binaryninja.update.with_metaclass

+
+
+with_metaclass(meta, *bases)[source]
+

Create a base class with a metaclass.

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/c++.html b/personal/api-docs/c++.html new file mode 100644 index 0000000..dfe24de --- /dev/null +++ b/personal/api-docs/c++.html @@ -0,0 +1,262 @@ + + + + + + + + + + + Binary Ninja C++ API Documentation — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

Binary Ninja C++ API Documentation

+ +
+ + +
+
+
+ + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/c.html b/personal/api-docs/c.html new file mode 100644 index 0000000..ffe799e --- /dev/null +++ b/personal/api-docs/c.html @@ -0,0 +1,245 @@ + + + + + + + + + + + Binary Ninja C API Documentation — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

Binary Ninja C API Documentation

+
+ + +
+
+
+ + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/genindex.html b/personal/api-docs/genindex.html new file mode 100644 index 0000000..21283eb --- /dev/null +++ b/personal/api-docs/genindex.html @@ -0,0 +1,5836 @@ + + + + + + + + + + + + Index — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+
    + +
  • Docs »
  • + +
  • Index
  • + + +
  • + + + +
  • + +
+
+
+
+
+ + +

Index

+ +
+ _ + | A + | B + | C + | D + | E + | F + | G + | H + | I + | J + | K + | L + | M + | N + | O + | P + | Q + | R + | S + | T + | U + | V + | W + | X + | Y + | Z + +
+

_

+ + +
+ +

A

+ + + +
+ +

B

+ + + +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + + +
+ +

F

+ + + +
+ +

G

+ + + +
+ +

H

+ + + +
+ +

I

+ + + +
+ +

J

+ + + +
+ +

K

+ + + +
+ +

L

+ + + +
+ +

M

+ + + +
+ +

N

+ + + +
+ +

O

+ + + +
+ +

P

+ + + +
+ +

Q

+ + + +
+ +

R

+ + + +
+ +

S

+ + + +
+ +

T

+ + + +
+ +

U

+ + + +
+ +

V

+ + + +
+ +

W

+ + + +
+ +

X

+ + + +
+ +

Y

+ + + +
+ +

Z

+ + + +
+ + + +
+
+
+ + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/index.html b/personal/api-docs/index.html new file mode 100644 index 0000000..78a5eeb --- /dev/null +++ b/personal/api-docs/index.html @@ -0,0 +1,820 @@ + + + + + + + + + + + Binary Ninja Python API Documentation — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+

Binary Ninja Python API Documentation

+
+ +
+
+
+class PluginManagerLoadPluginCallback[source]
+

Bases: object

+

Callback for BNLoadPluginForApi(“python2”, …), dynamically loads python plugins.

+
+ +
+
+bundled_plugin_path()[source]
+

bundled_plugin_path returns a string containing the current plugin path inside the install path

+ +++ + + + + + +
Returns:current bundled plugin path
Return type:str, or None on failure
+
+ +
+
+core_build_id()[source]
+

core_build_id returns a string containing the current build id

+ +++ + + + + + +
Returns:current build id
Return type:str, or None on failure
+
+ +
+
+core_expires()[source]
+

License Expiration

+
+ +
+
+core_license_count()[source]
+

License count from the license file

+
+ +
+
+core_product()[source]
+

Product string from the license file

+
+ +
+
+core_product_type()[source]
+

Product type from the license file

+
+ +
+
+core_serial()[source]
+

core_serial returns a string containing the current serial number

+ +++ + + + + + +
Returns:current serial
Return type:str, or None on failure
+
+ +
+
+core_ui_enabled()[source]
+

Indicates that a UI exists and the UI has invoked BNInitUI

+
+ +
+
+core_version()[source]
+

core_version returns a string containing the current version

+ +++ + + + + + +
Returns:current version
Return type:str, or None on failure
+
+ +
+
+cstr(arg)[source]
+
+ +
+
+get_install_directory()[source]
+

get_install_directory returns a string pointing to the installed binary currently running

+

..warning:: ONLY for use within the Binary Ninja UI, behavior is undefined and unreliable if run headlessly

+
+ +
+
+get_unique_identifier()[source]
+
+ +
+
+pyNativeStr(arg)[source]
+
+ +
+
+range(*args)[source]
+

A Python2 and Python3 Compatible Range Generator

+
+ +
+
+shutdown()[source]
+

shutdown cleanly shuts down the core, stopping all workers and closing all log files.

+
+ +
+
+user_plugin_path()[source]
+

user_plugin_path returns a string containing the current plugin path inside the user directory

+ +++ + + + + + +
Returns:current user plugin path
Return type:str, or None on failure
+
+ +
+
+with_metaclass(meta, *bases)[source]
+

Create a base class with a metaclass.

+
+ +
+ + +
+
+
+ + + + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/objects.inv b/personal/api-docs/objects.inv new file mode 100644 index 0000000..7af036d Binary files /dev/null and b/personal/api-docs/objects.inv differ diff --git a/personal/api-docs/py-modindex.html b/personal/api-docs/py-modindex.html new file mode 100644 index 0000000..6d6593d --- /dev/null +++ b/personal/api-docs/py-modindex.html @@ -0,0 +1,426 @@ + + + + + + + + + + + Python Module Index — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+
    + +
  • Docs »
  • + +
  • Python Module Index
  • + + +
  • + + + +
  • + +
+
+
+
+
+ + +

Python Module Index

+ +
+ b +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ b
+ binaryninja +
    + binaryninja.architecture +
    + binaryninja.atexit +
    + binaryninja.basicblock +
    + binaryninja.binaryview +
    + binaryninja.callingconvention +
    + binaryninja.databuffer +
    + binaryninja.datarender +
    + binaryninja.demangle +
    + binaryninja.downloadprovider +
    + binaryninja.enums +
    + binaryninja.fileaccessor +
    + binaryninja.filemetadata +
    + binaryninja.flowgraph +
    + binaryninja.function +
    + binaryninja.functionrecognizer +
    + binaryninja.highlight +
    + binaryninja.interaction +
    + binaryninja.lineardisassembly +
    + binaryninja.log +
    + binaryninja.lowlevelil +
    + binaryninja.mainthread +
    + binaryninja.mediumlevelil +
    + binaryninja.metadata +
    + binaryninja.numbers +
    + binaryninja.platform +
    + binaryninja.plugin +
    + binaryninja.pluginmanager +
    + binaryninja.scriptingprovider +
    + binaryninja.settings +
    + binaryninja.transform +
    + binaryninja.types +
    + binaryninja.undoaction +
    + binaryninja.update +
+ + +
+
+
+ + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/search.html b/personal/api-docs/search.html new file mode 100644 index 0000000..927dd6f --- /dev/null +++ b/personal/api-docs/search.html @@ -0,0 +1,258 @@ + + + + + + + + + + + Search — Binary Ninja API Documentation v1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+
    + +
  • Docs »
  • + +
  • Search
  • + + +
  • + +
  • + +
+
+
+
+
+ + + + +
+ +
+ +
+
+
+ + +
+ +
+

+ © Copyright 2015-2019, Vector 35 Inc. + +

+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/api-docs/searchindex.js b/personal/api-docs/searchindex.js new file mode 100644 index 0000000..495a832 --- /dev/null +++ b/personal/api-docs/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["Architecture_c++","BinaryView_c++","ConsoleLogging_c++","Platform_c++","binaryninja.architecture-module","binaryninja.architecture.Architecture","binaryninja.architecture.ArchitectureHook","binaryninja.architecture.CoreArchitecture","binaryninja.architecture.ReferenceSource","binaryninja.architecture.long","binaryninja.architecture.range","binaryninja.architecture.with_metaclass","binaryninja.atexit-module","binaryninja.atexit.register","binaryninja.basicblock-module","binaryninja.basicblock.BasicBlock","binaryninja.basicblock.BasicBlockEdge","binaryninja.basicblock.range","binaryninja.binaryview-module","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","binaryninja.callingconvention-module","binaryninja.callingconvention.CallingConvention","binaryninja.callingconvention.range","binaryninja.databuffer-module","binaryninja.databuffer.DataBuffer","binaryninja.databuffer.escape_string","binaryninja.databuffer.long","binaryninja.databuffer.pyNativeStr","binaryninja.databuffer.unescape_string","binaryninja.datarender-module","binaryninja.datarender.BinaryView","binaryninja.datarender.DataRenderer","binaryninja.datarender.DisassemblyTextLine","binaryninja.datarender.FileMetadata","binaryninja.datarender.InstructionTextToken","binaryninja.datarender.Type","binaryninja.datarender.log_error","binaryninja.demangle-module","binaryninja.demangle.demangle_gnu3","binaryninja.demangle.demangle_ms","binaryninja.demangle.get_qualified_name","binaryninja.demangle.pyNativeStr","binaryninja.demangle.range","binaryninja.downloadprovider-module","binaryninja.downloadprovider.DownloadInstance","binaryninja.downloadprovider.DownloadProvider","binaryninja.downloadprovider.ProxyHandler","binaryninja.downloadprovider.PythonDownloadInstance","binaryninja.downloadprovider.PythonDownloadProvider","binaryninja.downloadprovider.Settings","binaryninja.downloadprovider.URLError","binaryninja.downloadprovider.build_opener","binaryninja.downloadprovider.install_opener","binaryninja.downloadprovider.pyNativeStr","binaryninja.downloadprovider.range","binaryninja.downloadprovider.urlopen","binaryninja.downloadprovider.with_metaclass","binaryninja.enums-module","binaryninja.enums.ActionType","binaryninja.enums.AnalysisSkipReason","binaryninja.enums.AnalysisState","binaryninja.enums.BranchType","binaryninja.enums.CallingConventionName","binaryninja.enums.DisassemblyOption","binaryninja.enums.Endianness","binaryninja.enums.FindFlag","binaryninja.enums.FlagRole","binaryninja.enums.FormInputFieldType","binaryninja.enums.FunctionAnalysisSkipOverride","binaryninja.enums.FunctionGraphType","binaryninja.enums.HighlightColorStyle","binaryninja.enums.HighlightStandardColor","binaryninja.enums.ILBranchDependence","binaryninja.enums.ImplicitRegisterExtend","binaryninja.enums.InstructionTextTokenContext","binaryninja.enums.InstructionTextTokenType","binaryninja.enums.IntegerDisplayType","binaryninja.enums.LinearDisassemblyLineType","binaryninja.enums.LogLevel","binaryninja.enums.LowLevelILFlagCondition","binaryninja.enums.LowLevelILOperation","binaryninja.enums.MediumLevelILOperation","binaryninja.enums.MemberAccess","binaryninja.enums.MemberScope","binaryninja.enums.MessageBoxButtonResult","binaryninja.enums.MessageBoxButtonSet","binaryninja.enums.MessageBoxIcon","binaryninja.enums.MetadataType","binaryninja.enums.ModificationStatus","binaryninja.enums.NameType","binaryninja.enums.NamedTypeReferenceClass","binaryninja.enums.PluginCommandType","binaryninja.enums.PluginLoadOrder","binaryninja.enums.PluginOrigin","binaryninja.enums.PluginType","binaryninja.enums.PluginUpdateStatus","binaryninja.enums.PointerSuffix","binaryninja.enums.ReferenceType","binaryninja.enums.RegisterValueType","binaryninja.enums.RelocationType","binaryninja.enums.ReportType","binaryninja.enums.ScriptingProviderExecuteResult","binaryninja.enums.ScriptingProviderInputReadyState","binaryninja.enums.SectionSemantics","binaryninja.enums.SegmentFlag","binaryninja.enums.SettingsScope","binaryninja.enums.StringType","binaryninja.enums.StructureType","binaryninja.enums.SymbolBinding","binaryninja.enums.SymbolType","binaryninja.enums.TransformType","binaryninja.enums.TypeClass","binaryninja.enums.UpdateResult","binaryninja.enums.VariableSourceType","binaryninja.fileaccessor-module","binaryninja.fileaccessor.CoreFileAccessor","binaryninja.fileaccessor.FileAccessor","binaryninja.filemetadata-module","binaryninja.filemetadata.FileMetadata","binaryninja.filemetadata.NavigationHandler","binaryninja.flowgraph-module","binaryninja.flowgraph.CoreFlowGraph","binaryninja.flowgraph.FlowGraph","binaryninja.flowgraph.FlowGraphEdge","binaryninja.flowgraph.FlowGraphLayoutRequest","binaryninja.flowgraph.FlowGraphNode","binaryninja.flowgraph.range","binaryninja.function-module","binaryninja.function.AdvancedFunctionAnalysisDataRequestor","binaryninja.function.ConstantReference","binaryninja.function.DisassemblySettings","binaryninja.function.DisassemblyTextLine","binaryninja.function.DisassemblyTextRenderer","binaryninja.function.Function","binaryninja.function.IndirectBranchInfo","binaryninja.function.InstructionBranch","binaryninja.function.InstructionInfo","binaryninja.function.InstructionTextToken","binaryninja.function.IntrinsicInfo","binaryninja.function.IntrinsicInput","binaryninja.function.LookupTableEntry","binaryninja.function.ParameterVariables","binaryninja.function.PossibleValueSet","binaryninja.function.RegisterInfo","binaryninja.function.RegisterStackInfo","binaryninja.function.RegisterValue","binaryninja.function.StackVariableReference","binaryninja.function.ValueRange","binaryninja.function.Variable","binaryninja.function.range","binaryninja.functionrecognizer-module","binaryninja.functionrecognizer.FunctionRecognizer","binaryninja.functionrecognizer.log","binaryninja.highlight-module","binaryninja.highlight.HighlightColor","binaryninja.interaction-module","binaryninja.interaction.AddressField","binaryninja.interaction.ChoiceField","binaryninja.interaction.DirectoryNameField","binaryninja.interaction.FlowGraphReport","binaryninja.interaction.HTMLReport","binaryninja.interaction.IntegerField","binaryninja.interaction.InteractionHandler","binaryninja.interaction.LabelField","binaryninja.interaction.MarkdownReport","binaryninja.interaction.MultilineTextField","binaryninja.interaction.OpenFileNameField","binaryninja.interaction.PlainTextReport","binaryninja.interaction.ReportCollection","binaryninja.interaction.SaveFileNameField","binaryninja.interaction.SeparatorField","binaryninja.interaction.TextLineField","binaryninja.interaction.get_address_input","binaryninja.interaction.get_choice_input","binaryninja.interaction.get_directory_name_input","binaryninja.interaction.get_form_input","binaryninja.interaction.get_int_input","binaryninja.interaction.get_open_filename_input","binaryninja.interaction.get_save_filename_input","binaryninja.interaction.get_text_line_input","binaryninja.interaction.markdown_to_html","binaryninja.interaction.range","binaryninja.interaction.show_graph_report","binaryninja.interaction.show_html_report","binaryninja.interaction.show_markdown_report","binaryninja.interaction.show_message_box","binaryninja.interaction.show_plain_text_report","binaryninja.interaction.show_report_collection","binaryninja.lineardisassembly-module","binaryninja.lineardisassembly.LinearDisassemblyLine","binaryninja.lineardisassembly.LinearDisassemblyPosition","binaryninja.log-module","binaryninja.log.close_logs","binaryninja.log.is_output_redirected_to_log","binaryninja.log.log","binaryninja.log.log_alert","binaryninja.log.log_debug","binaryninja.log.log_error","binaryninja.log.log_info","binaryninja.log.log_to_file","binaryninja.log.log_to_stderr","binaryninja.log.log_to_stdout","binaryninja.log.log_warn","binaryninja.log.redirect_output_to_log","binaryninja.lowlevelil-module","binaryninja.lowlevelil.ILFlag","binaryninja.lowlevelil.ILIntrinsic","binaryninja.lowlevelil.ILRegister","binaryninja.lowlevelil.ILRegisterStack","binaryninja.lowlevelil.ILSemanticFlagClass","binaryninja.lowlevelil.ILSemanticFlagGroup","binaryninja.lowlevelil.LLIL_GET_TEMP_REG_INDEX","binaryninja.lowlevelil.LLIL_REG_IS_TEMP","binaryninja.lowlevelil.LLIL_TEMP","binaryninja.lowlevelil.LowLevelILBasicBlock","binaryninja.lowlevelil.LowLevelILExpr","binaryninja.lowlevelil.LowLevelILFunction","binaryninja.lowlevelil.LowLevelILInstruction","binaryninja.lowlevelil.LowLevelILLabel","binaryninja.lowlevelil.LowLevelILOperationAndSize","binaryninja.lowlevelil.SSAFlag","binaryninja.lowlevelil.SSARegister","binaryninja.lowlevelil.SSARegisterOrFlag","binaryninja.lowlevelil.SSARegisterStack","binaryninja.lowlevelil.range","binaryninja.mainthread-module","binaryninja.mainthread.execute_on_main_thread","binaryninja.mainthread.execute_on_main_thread_and_wait","binaryninja.mainthread.get_worker_thread_count","binaryninja.mainthread.set_worker_thread_count","binaryninja.mainthread.worker_enqueue","binaryninja.mainthread.worker_interactive_enqueue","binaryninja.mainthread.worker_priority_enqueue","binaryninja.mediumlevelil-module","binaryninja.mediumlevelil.MediumLevelILBasicBlock","binaryninja.mediumlevelil.MediumLevelILExpr","binaryninja.mediumlevelil.MediumLevelILFunction","binaryninja.mediumlevelil.MediumLevelILInstruction","binaryninja.mediumlevelil.MediumLevelILLabel","binaryninja.mediumlevelil.MediumLevelILOperationAndSize","binaryninja.mediumlevelil.SSAVariable","binaryninja.mediumlevelil.range","binaryninja.metadata-module","binaryninja.metadata.Metadata","binaryninja.metadata.pyNativeStr","binaryninja.metadata.range","binaryninja.numbers-module","binaryninja.numbers.ABCMeta","binaryninja.numbers.Complex","binaryninja.numbers.Integral","binaryninja.numbers.Number","binaryninja.numbers.Rational","binaryninja.numbers.Real","binaryninja.numbers.abstractmethod","binaryninja.numbers.abstractproperty","binaryninja.platform-module","binaryninja.platform.Platform","binaryninja.platform.range","binaryninja.platform.with_metaclass","binaryninja.plugin-module","binaryninja.plugin.BackgroundTask","binaryninja.plugin.BackgroundTaskThread","binaryninja.plugin.MainThreadAction","binaryninja.plugin.MainThreadActionHandler","binaryninja.plugin.PluginCommand","binaryninja.plugin.PluginCommandContext","binaryninja.plugin.range","binaryninja.plugin.with_metaclass","binaryninja.pluginmanager-module","binaryninja.pluginmanager.RepoPlugin","binaryninja.pluginmanager.Repository","binaryninja.pluginmanager.RepositoryManager","binaryninja.pluginmanager.range","binaryninja.scriptingprovider-module","binaryninja.scriptingprovider.PythonScriptingInstance","binaryninja.scriptingprovider.PythonScriptingProvider","binaryninja.scriptingprovider.ScriptingInstance","binaryninja.scriptingprovider.ScriptingOutputListener","binaryninja.scriptingprovider.ScriptingProvider","binaryninja.scriptingprovider.range","binaryninja.scriptingprovider.redirect_stdio","binaryninja.scriptingprovider.with_metaclass","binaryninja.settings-module","binaryninja.settings.Settings","binaryninja.settings.pyNativeStr","binaryninja.settings.range","binaryninja.transform-module","binaryninja.transform.Transform","binaryninja.transform.TransformParameter","binaryninja.transform.range","binaryninja.transform.with_metaclass","binaryninja.types-module","binaryninja.types.BoolWithConfidence","binaryninja.types.Enumeration","binaryninja.types.EnumerationMember","binaryninja.types.FunctionParameter","binaryninja.types.NameSpace","binaryninja.types.NamedTypeReference","binaryninja.types.QualifiedName","binaryninja.types.ReferenceTypeWithConfidence","binaryninja.types.RegisterSet","binaryninja.types.RegisterStackAdjustmentWithConfidence","binaryninja.types.SizeWithConfidence","binaryninja.types.Structure","binaryninja.types.StructureMember","binaryninja.types.Symbol","binaryninja.types.Type","binaryninja.types.TypeParserResult","binaryninja.types.preprocess_source","binaryninja.types.pyNativeStr","binaryninja.types.range","binaryninja.undoaction-module","binaryninja.undoaction.UndoAction","binaryninja.update-module","binaryninja.update.UpdateChannel","binaryninja.update.UpdateProgressCallback","binaryninja.update.UpdateVersion","binaryninja.update.are_auto_updates_enabled","binaryninja.update.get_time_since_last_update_check","binaryninja.update.install_pending_update","binaryninja.update.is_update_installation_pending","binaryninja.update.range","binaryninja.update.set_auto_updates_enabled","binaryninja.update.updates_checked","binaryninja.update.with_metaclass","c","c++","index"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,"sphinx.ext.viewcode":1,sphinx:54},filenames:["Architecture_c++.rst","BinaryView_c++.rst","ConsoleLogging_c++.rst","Platform_c++.rst","binaryninja.architecture-module.rst","binaryninja.architecture.Architecture.rst","binaryninja.architecture.ArchitectureHook.rst","binaryninja.architecture.CoreArchitecture.rst","binaryninja.architecture.ReferenceSource.rst","binaryninja.architecture.long.rst","binaryninja.architecture.range.rst","binaryninja.architecture.with_metaclass.rst","binaryninja.atexit-module.rst","binaryninja.atexit.register.rst","binaryninja.basicblock-module.rst","binaryninja.basicblock.BasicBlock.rst","binaryninja.basicblock.BasicBlockEdge.rst","binaryninja.basicblock.range.rst","binaryninja.binaryview-module.rst","binaryninja.binaryview.ActiveAnalysisInfo.rst","binaryninja.binaryview.AddressRange.rst","binaryninja.binaryview.AnalysisCompletionEvent.rst","binaryninja.binaryview.AnalysisInfo.rst","binaryninja.binaryview.AnalysisProgress.rst","binaryninja.binaryview.BinaryDataNotification.rst","binaryninja.binaryview.BinaryDataNotificationCallbacks.rst","binaryninja.binaryview.BinaryReader.rst","binaryninja.binaryview.BinaryView.rst","binaryninja.binaryview.BinaryViewType.rst","binaryninja.binaryview.BinaryWriter.rst","binaryninja.binaryview.DataVariable.rst","binaryninja.binaryview.OrderedDict.rst","binaryninja.binaryview.Section.rst","binaryninja.binaryview.Segment.rst","binaryninja.binaryview.StringReference.rst","binaryninja.binaryview.StructuredDataValue.rst","binaryninja.binaryview.StructuredDataView.rst","binaryninja.binaryview.range.rst","binaryninja.binaryview.with_metaclass.rst","binaryninja.callingconvention-module.rst","binaryninja.callingconvention.CallingConvention.rst","binaryninja.callingconvention.range.rst","binaryninja.databuffer-module.rst","binaryninja.databuffer.DataBuffer.rst","binaryninja.databuffer.escape_string.rst","binaryninja.databuffer.long.rst","binaryninja.databuffer.pyNativeStr.rst","binaryninja.databuffer.unescape_string.rst","binaryninja.datarender-module.rst","binaryninja.datarender.BinaryView.rst","binaryninja.datarender.DataRenderer.rst","binaryninja.datarender.DisassemblyTextLine.rst","binaryninja.datarender.FileMetadata.rst","binaryninja.datarender.InstructionTextToken.rst","binaryninja.datarender.Type.rst","binaryninja.datarender.log_error.rst","binaryninja.demangle-module.rst","binaryninja.demangle.demangle_gnu3.rst","binaryninja.demangle.demangle_ms.rst","binaryninja.demangle.get_qualified_name.rst","binaryninja.demangle.pyNativeStr.rst","binaryninja.demangle.range.rst","binaryninja.downloadprovider-module.rst","binaryninja.downloadprovider.DownloadInstance.rst","binaryninja.downloadprovider.DownloadProvider.rst","binaryninja.downloadprovider.ProxyHandler.rst","binaryninja.downloadprovider.PythonDownloadInstance.rst","binaryninja.downloadprovider.PythonDownloadProvider.rst","binaryninja.downloadprovider.Settings.rst","binaryninja.downloadprovider.URLError.rst","binaryninja.downloadprovider.build_opener.rst","binaryninja.downloadprovider.install_opener.rst","binaryninja.downloadprovider.pyNativeStr.rst","binaryninja.downloadprovider.range.rst","binaryninja.downloadprovider.urlopen.rst","binaryninja.downloadprovider.with_metaclass.rst","binaryninja.enums-module.rst","binaryninja.enums.ActionType.rst","binaryninja.enums.AnalysisSkipReason.rst","binaryninja.enums.AnalysisState.rst","binaryninja.enums.BranchType.rst","binaryninja.enums.CallingConventionName.rst","binaryninja.enums.DisassemblyOption.rst","binaryninja.enums.Endianness.rst","binaryninja.enums.FindFlag.rst","binaryninja.enums.FlagRole.rst","binaryninja.enums.FormInputFieldType.rst","binaryninja.enums.FunctionAnalysisSkipOverride.rst","binaryninja.enums.FunctionGraphType.rst","binaryninja.enums.HighlightColorStyle.rst","binaryninja.enums.HighlightStandardColor.rst","binaryninja.enums.ILBranchDependence.rst","binaryninja.enums.ImplicitRegisterExtend.rst","binaryninja.enums.InstructionTextTokenContext.rst","binaryninja.enums.InstructionTextTokenType.rst","binaryninja.enums.IntegerDisplayType.rst","binaryninja.enums.LinearDisassemblyLineType.rst","binaryninja.enums.LogLevel.rst","binaryninja.enums.LowLevelILFlagCondition.rst","binaryninja.enums.LowLevelILOperation.rst","binaryninja.enums.MediumLevelILOperation.rst","binaryninja.enums.MemberAccess.rst","binaryninja.enums.MemberScope.rst","binaryninja.enums.MessageBoxButtonResult.rst","binaryninja.enums.MessageBoxButtonSet.rst","binaryninja.enums.MessageBoxIcon.rst","binaryninja.enums.MetadataType.rst","binaryninja.enums.ModificationStatus.rst","binaryninja.enums.NameType.rst","binaryninja.enums.NamedTypeReferenceClass.rst","binaryninja.enums.PluginCommandType.rst","binaryninja.enums.PluginLoadOrder.rst","binaryninja.enums.PluginOrigin.rst","binaryninja.enums.PluginType.rst","binaryninja.enums.PluginUpdateStatus.rst","binaryninja.enums.PointerSuffix.rst","binaryninja.enums.ReferenceType.rst","binaryninja.enums.RegisterValueType.rst","binaryninja.enums.RelocationType.rst","binaryninja.enums.ReportType.rst","binaryninja.enums.ScriptingProviderExecuteResult.rst","binaryninja.enums.ScriptingProviderInputReadyState.rst","binaryninja.enums.SectionSemantics.rst","binaryninja.enums.SegmentFlag.rst","binaryninja.enums.SettingsScope.rst","binaryninja.enums.StringType.rst","binaryninja.enums.StructureType.rst","binaryninja.enums.SymbolBinding.rst","binaryninja.enums.SymbolType.rst","binaryninja.enums.TransformType.rst","binaryninja.enums.TypeClass.rst","binaryninja.enums.UpdateResult.rst","binaryninja.enums.VariableSourceType.rst","binaryninja.fileaccessor-module.rst","binaryninja.fileaccessor.CoreFileAccessor.rst","binaryninja.fileaccessor.FileAccessor.rst","binaryninja.filemetadata-module.rst","binaryninja.filemetadata.FileMetadata.rst","binaryninja.filemetadata.NavigationHandler.rst","binaryninja.flowgraph-module.rst","binaryninja.flowgraph.CoreFlowGraph.rst","binaryninja.flowgraph.FlowGraph.rst","binaryninja.flowgraph.FlowGraphEdge.rst","binaryninja.flowgraph.FlowGraphLayoutRequest.rst","binaryninja.flowgraph.FlowGraphNode.rst","binaryninja.flowgraph.range.rst","binaryninja.function-module.rst","binaryninja.function.AdvancedFunctionAnalysisDataRequestor.rst","binaryninja.function.ConstantReference.rst","binaryninja.function.DisassemblySettings.rst","binaryninja.function.DisassemblyTextLine.rst","binaryninja.function.DisassemblyTextRenderer.rst","binaryninja.function.Function.rst","binaryninja.function.IndirectBranchInfo.rst","binaryninja.function.InstructionBranch.rst","binaryninja.function.InstructionInfo.rst","binaryninja.function.InstructionTextToken.rst","binaryninja.function.IntrinsicInfo.rst","binaryninja.function.IntrinsicInput.rst","binaryninja.function.LookupTableEntry.rst","binaryninja.function.ParameterVariables.rst","binaryninja.function.PossibleValueSet.rst","binaryninja.function.RegisterInfo.rst","binaryninja.function.RegisterStackInfo.rst","binaryninja.function.RegisterValue.rst","binaryninja.function.StackVariableReference.rst","binaryninja.function.ValueRange.rst","binaryninja.function.Variable.rst","binaryninja.function.range.rst","binaryninja.functionrecognizer-module.rst","binaryninja.functionrecognizer.FunctionRecognizer.rst","binaryninja.functionrecognizer.log.rst","binaryninja.highlight-module.rst","binaryninja.highlight.HighlightColor.rst","binaryninja.interaction-module.rst","binaryninja.interaction.AddressField.rst","binaryninja.interaction.ChoiceField.rst","binaryninja.interaction.DirectoryNameField.rst","binaryninja.interaction.FlowGraphReport.rst","binaryninja.interaction.HTMLReport.rst","binaryninja.interaction.IntegerField.rst","binaryninja.interaction.InteractionHandler.rst","binaryninja.interaction.LabelField.rst","binaryninja.interaction.MarkdownReport.rst","binaryninja.interaction.MultilineTextField.rst","binaryninja.interaction.OpenFileNameField.rst","binaryninja.interaction.PlainTextReport.rst","binaryninja.interaction.ReportCollection.rst","binaryninja.interaction.SaveFileNameField.rst","binaryninja.interaction.SeparatorField.rst","binaryninja.interaction.TextLineField.rst","binaryninja.interaction.get_address_input.rst","binaryninja.interaction.get_choice_input.rst","binaryninja.interaction.get_directory_name_input.rst","binaryninja.interaction.get_form_input.rst","binaryninja.interaction.get_int_input.rst","binaryninja.interaction.get_open_filename_input.rst","binaryninja.interaction.get_save_filename_input.rst","binaryninja.interaction.get_text_line_input.rst","binaryninja.interaction.markdown_to_html.rst","binaryninja.interaction.range.rst","binaryninja.interaction.show_graph_report.rst","binaryninja.interaction.show_html_report.rst","binaryninja.interaction.show_markdown_report.rst","binaryninja.interaction.show_message_box.rst","binaryninja.interaction.show_plain_text_report.rst","binaryninja.interaction.show_report_collection.rst","binaryninja.lineardisassembly-module.rst","binaryninja.lineardisassembly.LinearDisassemblyLine.rst","binaryninja.lineardisassembly.LinearDisassemblyPosition.rst","binaryninja.log-module.rst","binaryninja.log.close_logs.rst","binaryninja.log.is_output_redirected_to_log.rst","binaryninja.log.log.rst","binaryninja.log.log_alert.rst","binaryninja.log.log_debug.rst","binaryninja.log.log_error.rst","binaryninja.log.log_info.rst","binaryninja.log.log_to_file.rst","binaryninja.log.log_to_stderr.rst","binaryninja.log.log_to_stdout.rst","binaryninja.log.log_warn.rst","binaryninja.log.redirect_output_to_log.rst","binaryninja.lowlevelil-module.rst","binaryninja.lowlevelil.ILFlag.rst","binaryninja.lowlevelil.ILIntrinsic.rst","binaryninja.lowlevelil.ILRegister.rst","binaryninja.lowlevelil.ILRegisterStack.rst","binaryninja.lowlevelil.ILSemanticFlagClass.rst","binaryninja.lowlevelil.ILSemanticFlagGroup.rst","binaryninja.lowlevelil.LLIL_GET_TEMP_REG_INDEX.rst","binaryninja.lowlevelil.LLIL_REG_IS_TEMP.rst","binaryninja.lowlevelil.LLIL_TEMP.rst","binaryninja.lowlevelil.LowLevelILBasicBlock.rst","binaryninja.lowlevelil.LowLevelILExpr.rst","binaryninja.lowlevelil.LowLevelILFunction.rst","binaryninja.lowlevelil.LowLevelILInstruction.rst","binaryninja.lowlevelil.LowLevelILLabel.rst","binaryninja.lowlevelil.LowLevelILOperationAndSize.rst","binaryninja.lowlevelil.SSAFlag.rst","binaryninja.lowlevelil.SSARegister.rst","binaryninja.lowlevelil.SSARegisterOrFlag.rst","binaryninja.lowlevelil.SSARegisterStack.rst","binaryninja.lowlevelil.range.rst","binaryninja.mainthread-module.rst","binaryninja.mainthread.execute_on_main_thread.rst","binaryninja.mainthread.execute_on_main_thread_and_wait.rst","binaryninja.mainthread.get_worker_thread_count.rst","binaryninja.mainthread.set_worker_thread_count.rst","binaryninja.mainthread.worker_enqueue.rst","binaryninja.mainthread.worker_interactive_enqueue.rst","binaryninja.mainthread.worker_priority_enqueue.rst","binaryninja.mediumlevelil-module.rst","binaryninja.mediumlevelil.MediumLevelILBasicBlock.rst","binaryninja.mediumlevelil.MediumLevelILExpr.rst","binaryninja.mediumlevelil.MediumLevelILFunction.rst","binaryninja.mediumlevelil.MediumLevelILInstruction.rst","binaryninja.mediumlevelil.MediumLevelILLabel.rst","binaryninja.mediumlevelil.MediumLevelILOperationAndSize.rst","binaryninja.mediumlevelil.SSAVariable.rst","binaryninja.mediumlevelil.range.rst","binaryninja.metadata-module.rst","binaryninja.metadata.Metadata.rst","binaryninja.metadata.pyNativeStr.rst","binaryninja.metadata.range.rst","binaryninja.numbers-module.rst","binaryninja.numbers.ABCMeta.rst","binaryninja.numbers.Complex.rst","binaryninja.numbers.Integral.rst","binaryninja.numbers.Number.rst","binaryninja.numbers.Rational.rst","binaryninja.numbers.Real.rst","binaryninja.numbers.abstractmethod.rst","binaryninja.numbers.abstractproperty.rst","binaryninja.platform-module.rst","binaryninja.platform.Platform.rst","binaryninja.platform.range.rst","binaryninja.platform.with_metaclass.rst","binaryninja.plugin-module.rst","binaryninja.plugin.BackgroundTask.rst","binaryninja.plugin.BackgroundTaskThread.rst","binaryninja.plugin.MainThreadAction.rst","binaryninja.plugin.MainThreadActionHandler.rst","binaryninja.plugin.PluginCommand.rst","binaryninja.plugin.PluginCommandContext.rst","binaryninja.plugin.range.rst","binaryninja.plugin.with_metaclass.rst","binaryninja.pluginmanager-module.rst","binaryninja.pluginmanager.RepoPlugin.rst","binaryninja.pluginmanager.Repository.rst","binaryninja.pluginmanager.RepositoryManager.rst","binaryninja.pluginmanager.range.rst","binaryninja.scriptingprovider-module.rst","binaryninja.scriptingprovider.PythonScriptingInstance.rst","binaryninja.scriptingprovider.PythonScriptingProvider.rst","binaryninja.scriptingprovider.ScriptingInstance.rst","binaryninja.scriptingprovider.ScriptingOutputListener.rst","binaryninja.scriptingprovider.ScriptingProvider.rst","binaryninja.scriptingprovider.range.rst","binaryninja.scriptingprovider.redirect_stdio.rst","binaryninja.scriptingprovider.with_metaclass.rst","binaryninja.settings-module.rst","binaryninja.settings.Settings.rst","binaryninja.settings.pyNativeStr.rst","binaryninja.settings.range.rst","binaryninja.transform-module.rst","binaryninja.transform.Transform.rst","binaryninja.transform.TransformParameter.rst","binaryninja.transform.range.rst","binaryninja.transform.with_metaclass.rst","binaryninja.types-module.rst","binaryninja.types.BoolWithConfidence.rst","binaryninja.types.Enumeration.rst","binaryninja.types.EnumerationMember.rst","binaryninja.types.FunctionParameter.rst","binaryninja.types.NameSpace.rst","binaryninja.types.NamedTypeReference.rst","binaryninja.types.QualifiedName.rst","binaryninja.types.ReferenceTypeWithConfidence.rst","binaryninja.types.RegisterSet.rst","binaryninja.types.RegisterStackAdjustmentWithConfidence.rst","binaryninja.types.SizeWithConfidence.rst","binaryninja.types.Structure.rst","binaryninja.types.StructureMember.rst","binaryninja.types.Symbol.rst","binaryninja.types.Type.rst","binaryninja.types.TypeParserResult.rst","binaryninja.types.preprocess_source.rst","binaryninja.types.pyNativeStr.rst","binaryninja.types.range.rst","binaryninja.undoaction-module.rst","binaryninja.undoaction.UndoAction.rst","binaryninja.update-module.rst","binaryninja.update.UpdateChannel.rst","binaryninja.update.UpdateProgressCallback.rst","binaryninja.update.UpdateVersion.rst","binaryninja.update.are_auto_updates_enabled.rst","binaryninja.update.get_time_since_last_update_check.rst","binaryninja.update.install_pending_update.rst","binaryninja.update.is_update_installation_pending.rst","binaryninja.update.range.rst","binaryninja.update.set_auto_updates_enabled.rst","binaryninja.update.updates_checked.rst","binaryninja.update.with_metaclass.rst","c.rst","c++.rst","index.rst"],objects:{"":{binaryninja:[346,0,0,"-"]},"binaryninja.architecture":{"long":[9,1,1,""],Architecture:[5,1,1,""],ArchitectureHook:[6,1,1,""],CoreArchitecture:[7,1,1,""],ReferenceSource:[8,1,1,""],range:[10,4,1,""],with_metaclass:[11,4,1,""]},"binaryninja.architecture.Architecture":{__init__:[5,2,1,""],address_size:[4,3,1,""],always_branch:[4,2,1,""],assemble:[4,2,1,""],calling_conventions:[4,3,1,""],convert_to_nop:[4,2,1,""],default_int_size:[4,3,1,""],endianness:[4,3,1,""],flag_conditions_for_semantic_flag_group:[4,3,1,""],flag_roles:[4,3,1,""],flag_write_types:[4,3,1,""],flags:[4,3,1,""],flags_required_for_flag_condition:[4,3,1,""],flags_required_for_semantic_flag_group:[4,3,1,""],flags_written_by_flag_write_type:[4,3,1,""],full_width_regs:[4,3,1,""],get_associated_arch_by_address:[4,2,1,""],get_default_flag_condition_low_level_il:[4,2,1,""],get_default_flag_write_low_level_il:[4,2,1,""],get_flag_by_name:[4,2,1,""],get_flag_condition_low_level_il:[4,2,1,""],get_flag_index:[4,2,1,""],get_flag_name:[4,2,1,""],get_flag_role:[4,2,1,""],get_flag_write_low_level_il:[4,2,1,""],get_flag_write_type_by_name:[4,2,1,""],get_flag_write_type_name:[4,2,1,""],get_flags_required_for_flag_condition:[4,2,1,""],get_instruction_info:[4,2,1,""],get_instruction_low_level_il:[4,2,1,""],get_instruction_low_level_il_instruction:[4,2,1,""],get_instruction_text:[4,2,1,""],get_intrinsic_index:[4,2,1,""],get_intrinsic_name:[4,2,1,""],get_low_level_il_from_bytes:[4,2,1,""],get_modified_regs_on_write:[4,2,1,""],get_reg_index:[4,2,1,""],get_reg_name:[4,2,1,""],get_reg_stack_for_reg:[4,2,1,""],get_reg_stack_index:[4,2,1,""],get_reg_stack_name:[4,2,1,""],get_semantic_flag_class_by_name:[4,2,1,""],get_semantic_flag_class_index:[4,2,1,""],get_semantic_flag_class_name:[4,2,1,""],get_semantic_flag_group_by_name:[4,2,1,""],get_semantic_flag_group_index:[4,2,1,""],get_semantic_flag_group_low_level_il:[4,2,1,""],get_semantic_flag_group_name:[4,2,1,""],get_view_type_constant:[4,2,1,""],global_regs:[4,3,1,""],instr_alignment:[4,3,1,""],intrinsics:[4,3,1,""],invert_branch:[4,2,1,""],is_always_branch_patch_available:[4,2,1,""],is_invert_branch_patch_available:[4,2,1,""],is_never_branch_patch_available:[4,2,1,""],is_skip_and_return_value_patch_available:[4,2,1,""],is_skip_and_return_zero_patch_available:[4,2,1,""],is_view_type_constant_defined:[4,2,1,""],link_reg:[4,3,1,""],list:[4,3,1,""],max_instr_length:[4,3,1,""],name:[4,3,1,""],next_address:[4,3,1,""],opcode_display_length:[4,3,1,""],perform_always_branch:[4,2,1,""],perform_assemble:[4,2,1,""],perform_convert_to_nop:[4,2,1,""],perform_get_associated_arch_by_address:[4,2,1,""],perform_get_flag_condition_low_level_il:[4,2,1,""],perform_get_flag_role:[4,2,1,""],perform_get_flag_write_low_level_il:[4,2,1,""],perform_get_flags_required_for_flag_condition:[4,2,1,""],perform_get_instruction_info:[4,2,1,""],perform_get_instruction_low_level_il:[4,2,1,""],perform_get_instruction_text:[4,2,1,""],perform_get_semantic_flag_group_low_level_il:[4,2,1,""],perform_invert_branch:[4,2,1,""],perform_is_always_branch_patch_available:[4,2,1,""],perform_is_invert_branch_patch_available:[4,2,1,""],perform_is_never_branch_patch_available:[4,2,1,""],perform_is_skip_and_return_value_patch_available:[4,2,1,""],perform_is_skip_and_return_zero_patch_available:[4,2,1,""],perform_skip_and_return_value:[4,2,1,""],reg_stacks:[4,3,1,""],register_calling_convention:[4,2,1,""],regs:[4,3,1,""],semantic_class_for_flag_write_type:[4,3,1,""],semantic_flag_classes:[4,3,1,""],semantic_flag_groups:[4,3,1,""],set_view_type_constant:[4,2,1,""],skip_and_return_value:[4,2,1,""],stack_pointer:[4,3,1,""],standalone_platform:[4,3,1,""]},"binaryninja.architecture.ArchitectureHook":{__init__:[6,2,1,""],register:[4,2,1,""]},"binaryninja.architecture.CoreArchitecture":{__init__:[7,2,1,""],always_branch:[4,2,1,""],assemble:[4,2,1,""],convert_to_nop:[4,2,1,""],get_associated_arch_by_address:[4,2,1,""],get_flag_condition_low_level_il:[4,2,1,""],get_flag_role:[4,2,1,""],get_flag_write_low_level_il:[4,2,1,""],get_flags_required_for_flag_condition:[4,2,1,""],get_instruction_info:[4,2,1,""],get_instruction_low_level_il:[4,2,1,""],get_instruction_text:[4,2,1,""],get_semantic_flag_group_low_level_il:[4,2,1,""],invert_branch:[4,2,1,""],is_always_branch_patch_available:[4,2,1,""],is_invert_branch_patch_available:[4,2,1,""],is_never_branch_patch_available:[4,2,1,""],is_skip_and_return_value_patch_available:[4,2,1,""],is_skip_and_return_zero_patch_available:[4,2,1,""],skip_and_return_value:[4,2,1,""]},"binaryninja.architecture.ReferenceSource":{__init__:[8,2,1,""]},"binaryninja.architecture.long":{__init__:[9,2,1,""]},"binaryninja.atexit":{register:[13,4,1,""]},"binaryninja.basicblock":{BasicBlock:[15,1,1,""],BasicBlockEdge:[16,1,1,""],range:[17,4,1,""]},"binaryninja.basicblock.BasicBlock":{"function":[14,3,1,""],__init__:[15,2,1,""],annotations:[14,3,1,""],arch:[14,3,1,""],can_exit:[14,3,1,""],disassembly_text:[14,3,1,""],dominance_frontier:[14,3,1,""],dominator_tree_children:[14,3,1,""],dominators:[14,3,1,""],end:[14,3,1,""],get_disassembly_text:[14,2,1,""],get_iterated_dominance_frontier:[14,5,1,""],has_undetermined_outgoing_edges:[14,3,1,""],highlight:[14,3,1,""],immediate_dominator:[14,3,1,""],incoming_edges:[14,3,1,""],index:[14,3,1,""],instruction_count:[14,3,1,""],is_il:[14,3,1,""],is_low_level_il:[14,3,1,""],is_medium_level_il:[14,3,1,""],length:[14,3,1,""],mark_recent_use:[14,2,1,""],outgoing_edges:[14,3,1,""],set_auto_highlight:[14,2,1,""],set_user_highlight:[14,2,1,""],source_block:[14,3,1,""],start:[14,3,1,""],strict_dominators:[14,3,1,""],view:[14,3,1,""]},"binaryninja.basicblock.BasicBlockEdge":{__init__:[16,2,1,""]},"binaryninja.binaryview":{ActiveAnalysisInfo:[19,1,1,""],AddressRange:[20,1,1,""],AnalysisCompletionEvent:[21,1,1,""],AnalysisInfo:[22,1,1,""],AnalysisProgress:[23,1,1,""],BinaryDataNotification:[24,1,1,""],BinaryDataNotificationCallbacks:[25,1,1,""],BinaryReader:[26,1,1,""],BinaryView:[27,1,1,""],BinaryViewType:[28,1,1,""],BinaryWriter:[29,1,1,""],DataVariable:[30,1,1,""],OrderedDict:[31,1,1,""],Section:[32,1,1,""],Segment:[33,1,1,""],StringReference:[34,1,1,""],StructuredDataValue:[35,1,1,""],StructuredDataView:[36,1,1,""],range:[37,4,1,""],with_metaclass:[38,4,1,""]},"binaryninja.binaryview.ActiveAnalysisInfo":{__init__:[19,2,1,""]},"binaryninja.binaryview.AddressRange":{__init__:[20,2,1,""],length:[18,3,1,""]},"binaryninja.binaryview.AnalysisCompletionEvent":{__init__:[21,2,1,""],cancel:[18,2,1,""]},"binaryninja.binaryview.AnalysisInfo":{__init__:[22,2,1,""]},"binaryninja.binaryview.AnalysisProgress":{__init__:[23,2,1,""]},"binaryninja.binaryview.BinaryDataNotification":{__init__:[24,2,1,""],data_inserted:[18,2,1,""],data_removed:[18,2,1,""],data_var_added:[18,2,1,""],data_var_removed:[18,2,1,""],data_var_updated:[18,2,1,""],data_written:[18,2,1,""],function_added:[18,2,1,""],function_removed:[18,2,1,""],function_update_requested:[18,2,1,""],function_updated:[18,2,1,""],string_found:[18,2,1,""],string_removed:[18,2,1,""],type_defined:[18,2,1,""],type_undefined:[18,2,1,""]},"binaryninja.binaryview.BinaryDataNotificationCallbacks":{__init__:[25,2,1,""]},"binaryninja.binaryview.BinaryReader":{__init__:[26,2,1,""],endianness:[18,3,1,""],eof:[18,3,1,""],offset:[18,3,1,""],read16:[18,2,1,""],read16be:[18,2,1,""],read16le:[18,2,1,""],read32:[18,2,1,""],read32be:[18,2,1,""],read32le:[18,2,1,""],read64:[18,2,1,""],read64be:[18,2,1,""],read64le:[18,2,1,""],read8:[18,2,1,""],read:[18,2,1,""],seek:[18,2,1,""],seek_relative:[18,2,1,""]},"binaryninja.binaryview.BinaryView":{"new":[18,5,1,""],__init__:[27,2,1,""],abort_analysis:[18,2,1,""],add_analysis_completion_event:[18,2,1,""],add_analysis_option:[18,2,1,""],add_auto_section:[18,2,1,""],add_auto_segment:[18,2,1,""],add_entry_point:[18,2,1,""],add_function:[18,2,1,""],add_undo_action:[18,2,1,""],add_user_section:[18,2,1,""],add_user_segment:[18,2,1,""],address_size:[18,3,1,""],allocated_ranges:[18,3,1,""],always_branch:[18,2,1,""],analysis_changed:[18,3,1,""],analysis_info:[18,3,1,""],analysis_progress:[18,3,1,""],arch:[18,3,1,""],available_view_types:[18,3,1,""],basic_blocks:[18,3,1,""],begin_undo_actions:[18,2,1,""],commit_undo_actions:[18,2,1,""],convert_to_nop:[18,2,1,""],create_database:[18,2,1,""],create_user_function:[18,2,1,""],data_vars:[18,3,1,""],define_auto_symbol:[18,2,1,""],define_auto_symbol_and_var_or_function:[18,2,1,""],define_data_var:[18,2,1,""],define_imported_function:[18,2,1,""],define_type:[18,2,1,""],define_user_data_var:[18,2,1,""],define_user_symbol:[18,2,1,""],define_user_type:[18,2,1,""],end:[18,3,1,""],endianness:[18,3,1,""],entry_function:[18,3,1,""],entry_point:[18,3,1,""],eval:[18,2,1,""],executable:[18,3,1,""],external_namespace:[18,5,1,""],find_next_constant:[18,2,1,""],find_next_data:[18,2,1,""],find_next_text:[18,2,1,""],functions:[18,3,1,""],get_address_for_data_offset:[18,2,1,""],get_address_input:[18,2,1,""],get_basic_blocks_at:[18,2,1,""],get_basic_blocks_starting_at:[18,2,1,""],get_code_refs:[18,2,1,""],get_data_refs:[18,2,1,""],get_data_refs_from:[18,2,1,""],get_data_var_at:[18,2,1,""],get_disassembly:[18,2,1,""],get_entropy:[18,2,1,""],get_function_at:[18,2,1,""],get_functions_at:[18,2,1,""],get_functions_containing:[18,2,1,""],get_instruction_length:[18,2,1,""],get_linear_disassembly:[18,2,1,""],get_linear_disassembly_position_at:[18,2,1,""],get_modification:[18,2,1,""],get_next_basic_block_start_after:[18,2,1,""],get_next_data_after:[18,2,1,""],get_next_data_var_after:[18,2,1,""],get_next_disassembly:[18,2,1,""],get_next_function_start_after:[18,2,1,""],get_next_linear_disassembly_lines:[18,2,1,""],get_previous_basic_block_end_before:[18,2,1,""],get_previous_basic_block_start_before:[18,2,1,""],get_previous_data_before:[18,2,1,""],get_previous_data_var_before:[18,2,1,""],get_previous_function_start_before:[18,2,1,""],get_previous_linear_disassembly_lines:[18,2,1,""],get_recent_basic_block_at:[18,2,1,""],get_recent_function_at:[18,2,1,""],get_section_by_name:[18,2,1,""],get_sections_at:[18,2,1,""],get_segment_at:[18,2,1,""],get_strings:[18,2,1,""],get_symbol_at:[18,2,1,""],get_symbol_by_raw_name:[18,2,1,""],get_symbols:[18,2,1,""],get_symbols_by_name:[18,2,1,""],get_symbols_of_type:[18,2,1,""],get_type_by_id:[18,2,1,""],get_type_by_name:[18,2,1,""],get_type_id:[18,2,1,""],get_type_name_by_id:[18,2,1,""],get_unique_section_names:[18,2,1,""],get_view_of_type:[18,2,1,""],global_pointer_value:[18,3,1,""],has_database:[18,3,1,""],has_functions:[18,3,1,""],init:[18,2,1,""],insert:[18,2,1,""],instructions:[18,3,1,""],internal_namespace:[18,5,1,""],invert_branch:[18,2,1,""],is_always_branch_patch_available:[18,2,1,""],is_invert_branch_patch_available:[18,2,1,""],is_never_branch_patch_available:[18,2,1,""],is_offset_code_semantics:[18,2,1,""],is_offset_executable:[18,2,1,""],is_offset_extern_semantics:[18,2,1,""],is_offset_readable:[18,2,1,""],is_offset_writable:[18,2,1,""],is_offset_writable_semantics:[18,2,1,""],is_skip_and_return_value_patch_available:[18,2,1,""],is_skip_and_return_zero_patch_available:[18,2,1,""],is_type_auto_defined:[18,2,1,""],is_valid_offset:[18,2,1,""],linear_disassembly:[18,3,1,""],llil_basic_blocks:[18,3,1,""],llil_instructions:[18,3,1,""],long_name:[18,3,1,""],max_function_size_for_analysis:[18,3,1,""],mlil_basic_blocks:[18,3,1,""],mlil_instructions:[18,3,1,""],modified:[18,3,1,""],name:[18,3,1,""],namespaces:[18,3,1,""],navigate:[18,2,1,""],never_branch:[18,2,1,""],new_auto_function_analysis_suppressed:[18,3,1,""],next_address:[18,3,1,""],notify_data_inserted:[18,2,1,""],notify_data_removed:[18,2,1,""],notify_data_written:[18,2,1,""],offset:[18,3,1,""],open:[18,5,1,""],parameters_for_analysis:[18,3,1,""],parent_view:[18,3,1,""],parse_expression:[18,2,1,""],parse_type_string:[18,2,1,""],perform_get_address_size:[18,2,1,""],perform_get_default_endianness:[18,2,1,""],perform_get_entry_point:[18,2,1,""],perform_get_length:[18,2,1,""],perform_get_modification:[18,2,1,""],perform_get_next_valid_offset:[18,2,1,""],perform_get_start:[18,2,1,""],perform_insert:[18,2,1,""],perform_is_executable:[18,2,1,""],perform_is_offset_executable:[18,2,1,""],perform_is_offset_readable:[18,2,1,""],perform_is_offset_writable:[18,2,1,""],perform_is_relocatable:[18,2,1,""],perform_is_valid_offset:[18,2,1,""],perform_read:[18,2,1,""],perform_remove:[18,2,1,""],perform_save:[18,2,1,""],perform_write:[18,2,1,""],platform:[18,3,1,""],query_metadata:[18,2,1,""],read:[18,2,1,""],reanalyze:[18,2,1,""],redo:[18,2,1,""],register:[18,5,1,""],register_notification:[18,2,1,""],register_platform_types:[18,2,1,""],registered_view_type:[18,3,1,""],relocatable:[18,3,1,""],relocation_ranges:[18,3,1,""],relocation_ranges_at:[18,2,1,""],remove:[18,2,1,""],remove_auto_section:[18,2,1,""],remove_auto_segment:[18,2,1,""],remove_function:[18,2,1,""],remove_metadata:[18,2,1,""],remove_user_function:[18,2,1,""],remove_user_section:[18,2,1,""],remove_user_segment:[18,2,1,""],rename_type:[18,2,1,""],save:[18,2,1,""],save_auto_snapshot:[18,2,1,""],saved:[18,3,1,""],sections:[18,3,1,""],segments:[18,3,1,""],session_data:[18,3,1,""],set_default_session_data:[18,5,1,""],show_graph_report:[18,2,1,""],show_html_report:[18,2,1,""],show_markdown_report:[18,2,1,""],show_plain_text_report:[18,2,1,""],skip_and_return_value:[18,2,1,""],start:[18,3,1,""],store_metadata:[18,2,1,""],strings:[18,3,1,""],symbols:[18,3,1,""],types:[18,3,1,""],undefine_auto_symbol:[18,2,1,""],undefine_data_var:[18,2,1,""],undefine_type:[18,2,1,""],undefine_user_data_var:[18,2,1,""],undefine_user_symbol:[18,2,1,""],undefine_user_type:[18,2,1,""],undo:[18,2,1,""],unregister_notification:[18,2,1,""],update_analysis:[18,2,1,""],update_analysis_and_wait:[18,2,1,""],view:[18,3,1,""],view_type:[18,3,1,""],write:[18,2,1,""]},"binaryninja.binaryview.BinaryViewType":{__init__:[28,2,1,""],create:[18,2,1,""],get_arch:[18,2,1,""],get_platform:[18,2,1,""],get_view_of_file:[18,5,1,""],is_valid_for_data:[18,2,1,""],list:[18,3,1,""],long_name:[18,3,1,""],name:[18,3,1,""],open:[18,2,1,""],register_arch:[18,2,1,""],register_default_platform:[18,2,1,""],register_platform:[18,2,1,""]},"binaryninja.binaryview.BinaryWriter":{__init__:[29,2,1,""],endianness:[18,3,1,""],offset:[18,3,1,""],seek:[18,2,1,""],seek_relative:[18,2,1,""],write16:[18,2,1,""],write16be:[18,2,1,""],write16le:[18,2,1,""],write32:[18,2,1,""],write32be:[18,2,1,""],write32le:[18,2,1,""],write64:[18,2,1,""],write64be:[18,2,1,""],write64le:[18,2,1,""],write8:[18,2,1,""],write:[18,2,1,""]},"binaryninja.binaryview.DataVariable":{__init__:[30,2,1,""],code_refs:[18,3,1,""],data_refs:[18,3,1,""],data_refs_from:[18,3,1,""]},"binaryninja.binaryview.OrderedDict":{__init__:[31,2,1,""]},"binaryninja.binaryview.Section":{__init__:[32,2,1,""],align:[18,3,1,""],auto_defined:[18,3,1,""],end:[18,3,1,""],entry_size:[18,3,1,""],info_data:[18,3,1,""],info_section:[18,3,1,""],linked_section:[18,3,1,""],name:[18,3,1,""],semantics:[18,3,1,""],start:[18,3,1,""],type:[18,3,1,""]},"binaryninja.binaryview.Segment":{__init__:[33,2,1,""],data_end:[18,3,1,""],data_length:[18,3,1,""],data_offset:[18,3,1,""],end:[18,3,1,""],executable:[18,3,1,""],readable:[18,3,1,""],relocation_count:[18,3,1,""],relocation_ranges:[18,3,1,""],relocation_ranges_at:[18,2,1,""],start:[18,3,1,""],writable:[18,3,1,""]},"binaryninja.binaryview.StringReference":{__init__:[34,2,1,""],value:[18,3,1,""]},"binaryninja.binaryview.StructuredDataValue":{"int":[18,3,1,""],__init__:[35,2,1,""],address:[18,3,1,""],str:[18,3,1,""],type:[18,3,1,""],value:[18,3,1,""],width:[18,3,1,""]},"binaryninja.binaryview.StructuredDataView":{__init__:[36,2,1,""]},"binaryninja.callingconvention":{CallingConvention:[40,1,1,""],range:[41,4,1,""]},"binaryninja.callingconvention.CallingConvention":{__init__:[40,2,1,""],arg_regs_share_index:[39,3,1,""],callee_saved_regs:[39,3,1,""],caller_saved_regs:[39,3,1,""],float_arg_regs:[39,3,1,""],float_return_reg:[39,3,1,""],get_incoming_flag_value:[39,2,1,""],get_incoming_reg_value:[39,2,1,""],get_incoming_var_for_parameter_var:[39,2,1,""],get_parameter_var_for_incoming_var:[39,2,1,""],global_pointer_reg:[39,3,1,""],high_int_return_reg:[39,3,1,""],implicitly_defined_regs:[39,3,1,""],int_arg_regs:[39,3,1,""],int_return_reg:[39,3,1,""],name:[39,3,1,""],perform_get_incoming_flag_value:[39,2,1,""],perform_get_incoming_reg_value:[39,2,1,""],perform_get_incoming_var_for_parameter_var:[39,2,1,""],perform_get_parameter_var_for_incoming_var:[39,2,1,""],stack_adjusted_on_return:[39,3,1,""],stack_reserved_for_arg_regs:[39,3,1,""],with_confidence:[39,2,1,""]},"binaryninja.databuffer":{"long":[45,1,1,""],DataBuffer:[43,1,1,""],escape_string:[44,4,1,""],pyNativeStr:[46,4,1,""],unescape_string:[47,4,1,""]},"binaryninja.databuffer.DataBuffer":{__init__:[43,2,1,""],base64_decode:[42,2,1,""],base64_encode:[42,2,1,""],escape:[42,2,1,""],unescape:[42,2,1,""],zlib_compress:[42,2,1,""],zlib_decompress:[42,2,1,""]},"binaryninja.databuffer.long":{__init__:[45,2,1,""]},"binaryninja.datarender":{BinaryView:[49,1,1,""],DataRenderer:[50,1,1,""],DisassemblyTextLine:[51,1,1,""],FileMetadata:[52,1,1,""],InstructionTextToken:[53,1,1,""],Type:[54,1,1,""],log_error:[55,4,1,""]},"binaryninja.datarender.BinaryView":{__init__:[49,2,1,""]},"binaryninja.datarender.DataRenderer":{__init__:[50,2,1,""],is_type_of_struct_name:[48,5,1,""],perform_free_object:[48,2,1,""],perform_get_lines_for_data:[48,2,1,""],perform_is_valid_for_data:[48,2,1,""],register_generic:[48,2,1,""],register_type_specific:[48,2,1,""]},"binaryninja.datarender.DisassemblyTextLine":{__init__:[51,2,1,""]},"binaryninja.datarender.FileMetadata":{__init__:[52,2,1,""]},"binaryninja.datarender.InstructionTextToken":{__init__:[53,2,1,""]},"binaryninja.datarender.Type":{__init__:[54,2,1,""]},"binaryninja.demangle":{demangle_gnu3:[57,4,1,""],demangle_ms:[58,4,1,""],get_qualified_name:[59,4,1,""],pyNativeStr:[60,4,1,""],range:[61,4,1,""]},"binaryninja.downloadprovider":{DownloadInstance:[63,1,1,""],DownloadProvider:[64,1,1,""],ProxyHandler:[65,1,1,""],PythonDownloadInstance:[66,1,1,""],PythonDownloadProvider:[67,1,1,""],Settings:[68,1,1,""],URLError:[69,6,1,""],build_opener:[70,4,1,""],install_opener:[71,4,1,""],pyNativeStr:[72,4,1,""],range:[73,4,1,""],urlopen:[74,4,1,""],with_metaclass:[75,4,1,""]},"binaryninja.downloadprovider.DownloadInstance":{__init__:[63,2,1,""],perform_destroy_instance:[62,2,1,""],perform_request:[62,2,1,""]},"binaryninja.downloadprovider.DownloadProvider":{__init__:[64,2,1,""],create_instance:[62,2,1,""],instance_class:[62,3,1,""],name:[62,3,1,""],register:[62,2,1,""]},"binaryninja.downloadprovider.ProxyHandler":{__init__:[65,2,1,""]},"binaryninja.downloadprovider.PythonDownloadInstance":{__init__:[66,2,1,""],perform_destroy_instance:[62,2,1,""],perform_request:[62,2,1,""]},"binaryninja.downloadprovider.PythonDownloadProvider":{__init__:[67,2,1,""],instance_class:[62,3,1,""],name:[62,3,1,""]},"binaryninja.downloadprovider.Settings":{__init__:[68,2,1,""]},"binaryninja.enums":{ActionType:[77,1,1,""],AnalysisSkipReason:[78,1,1,""],AnalysisState:[79,1,1,""],BranchType:[80,1,1,""],CallingConventionName:[81,1,1,""],DisassemblyOption:[82,1,1,""],Endianness:[83,1,1,""],FindFlag:[84,1,1,""],FlagRole:[85,1,1,""],FormInputFieldType:[86,1,1,""],FunctionAnalysisSkipOverride:[87,1,1,""],FunctionGraphType:[88,1,1,""],HighlightColorStyle:[89,1,1,""],HighlightStandardColor:[90,1,1,""],ILBranchDependence:[91,1,1,""],ImplicitRegisterExtend:[92,1,1,""],InstructionTextTokenContext:[93,1,1,""],InstructionTextTokenType:[94,1,1,""],IntegerDisplayType:[95,1,1,""],LinearDisassemblyLineType:[96,1,1,""],LogLevel:[97,1,1,""],LowLevelILFlagCondition:[98,1,1,""],LowLevelILOperation:[99,1,1,""],MediumLevelILOperation:[100,1,1,""],MemberAccess:[101,1,1,""],MemberScope:[102,1,1,""],MessageBoxButtonResult:[103,1,1,""],MessageBoxButtonSet:[104,1,1,""],MessageBoxIcon:[105,1,1,""],MetadataType:[106,1,1,""],ModificationStatus:[107,1,1,""],NameType:[108,1,1,""],NamedTypeReferenceClass:[109,1,1,""],PluginCommandType:[110,1,1,""],PluginLoadOrder:[111,1,1,""],PluginOrigin:[112,1,1,""],PluginType:[113,1,1,""],PluginUpdateStatus:[114,1,1,""],PointerSuffix:[115,1,1,""],ReferenceType:[116,1,1,""],RegisterValueType:[117,1,1,""],RelocationType:[118,1,1,""],ReportType:[119,1,1,""],ScriptingProviderExecuteResult:[120,1,1,""],ScriptingProviderInputReadyState:[121,1,1,""],SectionSemantics:[122,1,1,""],SegmentFlag:[123,1,1,""],SettingsScope:[124,1,1,""],StringType:[125,1,1,""],StructureType:[126,1,1,""],SymbolBinding:[127,1,1,""],SymbolType:[128,1,1,""],TransformType:[129,1,1,""],TypeClass:[130,1,1,""],UpdateResult:[131,1,1,""],VariableSourceType:[132,1,1,""]},"binaryninja.enums.ActionType":{AnalysisAction:[76,3,1,""],DataModificationAction:[76,3,1,""],DataModificationAndAnalysisAction:[76,3,1,""],TemporaryAction:[76,3,1,""],__init__:[77,2,1,""]},"binaryninja.enums.AnalysisSkipReason":{AlwaysSkipReason:[76,3,1,""],ExceedFunctionAnalysisTimeSkipReason:[76,3,1,""],ExceedFunctionSizeSkipReason:[76,3,1,""],ExceedFunctionUpdateCountSkipReason:[76,3,1,""],NewAutoFunctionAnalysisSuppressedReason:[76,3,1,""],NoSkipReason:[76,3,1,""],__init__:[78,2,1,""]},"binaryninja.enums.AnalysisState":{AnalyzeState:[76,3,1,""],DisassembleState:[76,3,1,""],ExtendedAnalyzeState:[76,3,1,""],IdleState:[76,3,1,""],__init__:[79,2,1,""]},"binaryninja.enums.BranchType":{CallDestination:[76,3,1,""],FalseBranch:[76,3,1,""],FunctionReturn:[76,3,1,""],IndirectBranch:[76,3,1,""],SystemCall:[76,3,1,""],TrueBranch:[76,3,1,""],UnconditionalBranch:[76,3,1,""],UnresolvedBranch:[76,3,1,""],__init__:[80,2,1,""]},"binaryninja.enums.CallingConventionName":{CLRCallCallingConvention:[76,3,1,""],CdeclCallingConvention:[76,3,1,""],EabiCallCallingConvention:[76,3,1,""],FastcallCallingConvention:[76,3,1,""],NoCallingConvention:[76,3,1,""],PascalCallingConvention:[76,3,1,""],STDCallCallingConvention:[76,3,1,""],ThisCallCallingConvention:[76,3,1,""],VectorCallCallingConvention:[76,3,1,""],__init__:[81,2,1,""]},"binaryninja.enums.DisassemblyOption":{ExpandLongOpcode:[76,3,1,""],GroupLinearDisassemblyFunctions:[76,3,1,""],ShowAddress:[76,3,1,""],ShowCallParameterNames:[76,3,1,""],ShowDefaultRegisterTypes:[76,3,1,""],ShowFlagUsage:[76,3,1,""],ShowOpcode:[76,3,1,""],ShowRegisterHighlight:[76,3,1,""],ShowVariableTypesWhenAssigned:[76,3,1,""],ShowVariablesAtTopOfGraph:[76,3,1,""],__init__:[82,2,1,""]},"binaryninja.enums.Endianness":{BigEndian:[76,3,1,""],LittleEndian:[76,3,1,""],__init__:[83,2,1,""]},"binaryninja.enums.FindFlag":{FindCaseInsensitive:[76,3,1,""],FindCaseSensitive:[76,3,1,""],__init__:[84,2,1,""]},"binaryninja.enums.FlagRole":{CarryFlagRole:[76,3,1,""],EvenParityFlagRole:[76,3,1,""],HalfCarryFlagRole:[76,3,1,""],NegativeSignFlagRole:[76,3,1,""],OddParityFlagRole:[76,3,1,""],OrderedFlagRole:[76,3,1,""],OverflowFlagRole:[76,3,1,""],PositiveSignFlagRole:[76,3,1,""],SpecialFlagRole:[76,3,1,""],UnorderedFlagRole:[76,3,1,""],ZeroFlagRole:[76,3,1,""],__init__:[85,2,1,""]},"binaryninja.enums.FormInputFieldType":{AddressFormField:[76,3,1,""],ChoiceFormField:[76,3,1,""],DirectoryNameFormField:[76,3,1,""],IntegerFormField:[76,3,1,""],LabelFormField:[76,3,1,""],MultilineTextFormField:[76,3,1,""],OpenFileNameFormField:[76,3,1,""],SaveFileNameFormField:[76,3,1,""],SeparatorFormField:[76,3,1,""],TextLineFormField:[76,3,1,""],__init__:[86,2,1,""]},"binaryninja.enums.FunctionAnalysisSkipOverride":{AlwaysSkipFunctionAnalysis:[76,3,1,""],DefaultFunctionAnalysisSkip:[76,3,1,""],NeverSkipFunctionAnalysis:[76,3,1,""],__init__:[87,2,1,""]},"binaryninja.enums.FunctionGraphType":{LiftedILFunctionGraph:[76,3,1,""],LowLevelILFunctionGraph:[76,3,1,""],LowLevelILSSAFormFunctionGraph:[76,3,1,""],MappedMediumLevelILFunctionGraph:[76,3,1,""],MappedMediumLevelILSSAFormFunctionGraph:[76,3,1,""],MediumLevelILFunctionGraph:[76,3,1,""],MediumLevelILSSAFormFunctionGraph:[76,3,1,""],NormalFunctionGraph:[76,3,1,""],__init__:[88,2,1,""]},"binaryninja.enums.HighlightColorStyle":{CustomHighlightColor:[76,3,1,""],MixedHighlightColor:[76,3,1,""],StandardHighlightColor:[76,3,1,""],__init__:[89,2,1,""]},"binaryninja.enums.HighlightStandardColor":{BlackHighlightColor:[76,3,1,""],BlueHighlightColor:[76,3,1,""],CyanHighlightColor:[76,3,1,""],GreenHighlightColor:[76,3,1,""],MagentaHighlightColor:[76,3,1,""],NoHighlightColor:[76,3,1,""],OrangeHighlightColor:[76,3,1,""],RedHighlightColor:[76,3,1,""],WhiteHighlightColor:[76,3,1,""],YellowHighlightColor:[76,3,1,""],__init__:[90,2,1,""]},"binaryninja.enums.ILBranchDependence":{FalseBranchDependent:[76,3,1,""],NotBranchDependent:[76,3,1,""],TrueBranchDependent:[76,3,1,""],__init__:[91,2,1,""]},"binaryninja.enums.ImplicitRegisterExtend":{NoExtend:[76,3,1,""],SignExtendToFullWidth:[76,3,1,""],ZeroExtendToFullWidth:[76,3,1,""],__init__:[92,2,1,""]},"binaryninja.enums.InstructionTextTokenContext":{DataVariableTokenContext:[76,3,1,""],FunctionReturnTokenContext:[76,3,1,""],LocalVariableTokenContext:[76,3,1,""],NoTokenContext:[76,3,1,""],__init__:[93,2,1,""]},"binaryninja.enums.InstructionTextTokenType":{AddressDisplayToken:[76,3,1,""],AnnotationToken:[76,3,1,""],ArgumentNameToken:[76,3,1,""],BeginMemoryOperandToken:[76,3,1,""],CharacterConstantToken:[76,3,1,""],CodeRelativeAddressToken:[76,3,1,""],CodeSymbolToken:[76,3,1,""],DataSymbolToken:[76,3,1,""],EndMemoryOperandToken:[76,3,1,""],ExternalSymbolToken:[76,3,1,""],FieldNameToken:[76,3,1,""],FloatingPointToken:[76,3,1,""],HexDumpByteValueToken:[76,3,1,""],HexDumpInvalidByteToken:[76,3,1,""],HexDumpSkippedByteToken:[76,3,1,""],HexDumpTextToken:[76,3,1,""],ImportToken:[76,3,1,""],IndirectImportToken:[76,3,1,""],InstructionToken:[76,3,1,""],IntegerToken:[76,3,1,""],KeywordToken:[76,3,1,""],LocalVariableToken:[76,3,1,""],NameSpaceSeparatorToken:[76,3,1,""],NameSpaceToken:[76,3,1,""],OpcodeToken:[76,3,1,""],OperandSeparatorToken:[76,3,1,""],PossibleAddressToken:[76,3,1,""],RegisterToken:[76,3,1,""],StringToken:[76,3,1,""],TextToken:[76,3,1,""],TypeNameToken:[76,3,1,""],__init__:[94,2,1,""]},"binaryninja.enums.IntegerDisplayType":{BinaryDisplayType:[76,3,1,""],CharacterConstantDisplayType:[76,3,1,""],DefaultIntegerDisplayType:[76,3,1,""],PointerDisplayType:[76,3,1,""],SignedDecimalDisplayType:[76,3,1,""],SignedHexadecimalDisplayType:[76,3,1,""],SignedOctalDisplayType:[76,3,1,""],UnsignedDecimalDisplayType:[76,3,1,""],UnsignedHexadecimalDisplayType:[76,3,1,""],UnsignedOctalDisplayType:[76,3,1,""],__init__:[95,2,1,""]},"binaryninja.enums.LinearDisassemblyLineType":{BlankLineType:[76,3,1,""],CodeDisassemblyLineType:[76,3,1,""],DataVariableLineType:[76,3,1,""],FunctionContinuationLineType:[76,3,1,""],FunctionEndLineType:[76,3,1,""],FunctionHeaderEndLineType:[76,3,1,""],FunctionHeaderLineType:[76,3,1,""],FunctionHeaderStartLineType:[76,3,1,""],HexDumpLineType:[76,3,1,""],LocalVariableLineType:[76,3,1,""],LocalVariableListEndLineType:[76,3,1,""],NonContiguousSeparatorLineType:[76,3,1,""],NoteEndLineType:[76,3,1,""],NoteLineType:[76,3,1,""],NoteStartLineType:[76,3,1,""],SectionEndLineType:[76,3,1,""],SectionSeparatorLineType:[76,3,1,""],SectionStartLineType:[76,3,1,""],__init__:[96,2,1,""]},"binaryninja.enums.LogLevel":{AlertLog:[76,3,1,""],DebugLog:[76,3,1,""],ErrorLog:[76,3,1,""],InfoLog:[76,3,1,""],WarningLog:[76,3,1,""],__init__:[97,2,1,""]},"binaryninja.enums.LowLevelILFlagCondition":{LLFC_E:[76,3,1,""],LLFC_FE:[76,3,1,""],LLFC_FGE:[76,3,1,""],LLFC_FGT:[76,3,1,""],LLFC_FLE:[76,3,1,""],LLFC_FLT:[76,3,1,""],LLFC_FNE:[76,3,1,""],LLFC_FO:[76,3,1,""],LLFC_FUO:[76,3,1,""],LLFC_NE:[76,3,1,""],LLFC_NEG:[76,3,1,""],LLFC_NO:[76,3,1,""],LLFC_O:[76,3,1,""],LLFC_POS:[76,3,1,""],LLFC_SGE:[76,3,1,""],LLFC_SGT:[76,3,1,""],LLFC_SLE:[76,3,1,""],LLFC_SLT:[76,3,1,""],LLFC_UGE:[76,3,1,""],LLFC_UGT:[76,3,1,""],LLFC_ULE:[76,3,1,""],LLFC_ULT:[76,3,1,""],__init__:[98,2,1,""]},"binaryninja.enums.LowLevelILOperation":{LLIL_ADC:[76,3,1,""],LLIL_ADD:[76,3,1,""],LLIL_ADD_OVERFLOW:[76,3,1,""],LLIL_AND:[76,3,1,""],LLIL_ASR:[76,3,1,""],LLIL_BOOL_TO_INT:[76,3,1,""],LLIL_BP:[76,3,1,""],LLIL_CALL:[76,3,1,""],LLIL_CALL_OUTPUT_SSA:[76,3,1,""],LLIL_CALL_PARAM:[76,3,1,""],LLIL_CALL_SSA:[76,3,1,""],LLIL_CALL_STACK_ADJUST:[76,3,1,""],LLIL_CALL_STACK_SSA:[76,3,1,""],LLIL_CEIL:[76,3,1,""],LLIL_CMP_E:[76,3,1,""],LLIL_CMP_NE:[76,3,1,""],LLIL_CMP_SGE:[76,3,1,""],LLIL_CMP_SGT:[76,3,1,""],LLIL_CMP_SLE:[76,3,1,""],LLIL_CMP_SLT:[76,3,1,""],LLIL_CMP_UGE:[76,3,1,""],LLIL_CMP_UGT:[76,3,1,""],LLIL_CMP_ULE:[76,3,1,""],LLIL_CMP_ULT:[76,3,1,""],LLIL_CONST:[76,3,1,""],LLIL_CONST_PTR:[76,3,1,""],LLIL_DIVS:[76,3,1,""],LLIL_DIVS_DP:[76,3,1,""],LLIL_DIVU:[76,3,1,""],LLIL_DIVU_DP:[76,3,1,""],LLIL_EXTERN_PTR:[76,3,1,""],LLIL_FABS:[76,3,1,""],LLIL_FADD:[76,3,1,""],LLIL_FCMP_E:[76,3,1,""],LLIL_FCMP_GE:[76,3,1,""],LLIL_FCMP_GT:[76,3,1,""],LLIL_FCMP_LE:[76,3,1,""],LLIL_FCMP_LT:[76,3,1,""],LLIL_FCMP_NE:[76,3,1,""],LLIL_FCMP_O:[76,3,1,""],LLIL_FCMP_UO:[76,3,1,""],LLIL_FDIV:[76,3,1,""],LLIL_FLAG:[76,3,1,""],LLIL_FLAG_BIT:[76,3,1,""],LLIL_FLAG_BIT_SSA:[76,3,1,""],LLIL_FLAG_COND:[76,3,1,""],LLIL_FLAG_GROUP:[76,3,1,""],LLIL_FLAG_PHI:[76,3,1,""],LLIL_FLAG_SSA:[76,3,1,""],LLIL_FLOAT_CONST:[76,3,1,""],LLIL_FLOAT_CONV:[76,3,1,""],LLIL_FLOAT_TO_INT:[76,3,1,""],LLIL_FLOOR:[76,3,1,""],LLIL_FMUL:[76,3,1,""],LLIL_FNEG:[76,3,1,""],LLIL_FSQRT:[76,3,1,""],LLIL_FSUB:[76,3,1,""],LLIL_FTRUNC:[76,3,1,""],LLIL_GOTO:[76,3,1,""],LLIL_IF:[76,3,1,""],LLIL_INTRINSIC:[76,3,1,""],LLIL_INTRINSIC_SSA:[76,3,1,""],LLIL_INT_TO_FLOAT:[76,3,1,""],LLIL_JUMP:[76,3,1,""],LLIL_JUMP_TO:[76,3,1,""],LLIL_LOAD:[76,3,1,""],LLIL_LOAD_SSA:[76,3,1,""],LLIL_LOW_PART:[76,3,1,""],LLIL_LSL:[76,3,1,""],LLIL_LSR:[76,3,1,""],LLIL_MEM_PHI:[76,3,1,""],LLIL_MODS:[76,3,1,""],LLIL_MODS_DP:[76,3,1,""],LLIL_MODU:[76,3,1,""],LLIL_MODU_DP:[76,3,1,""],LLIL_MUL:[76,3,1,""],LLIL_MULS_DP:[76,3,1,""],LLIL_MULU_DP:[76,3,1,""],LLIL_NEG:[76,3,1,""],LLIL_NOP:[76,3,1,""],LLIL_NORET:[76,3,1,""],LLIL_NOT:[76,3,1,""],LLIL_OR:[76,3,1,""],LLIL_POP:[76,3,1,""],LLIL_PUSH:[76,3,1,""],LLIL_REG:[76,3,1,""],LLIL_REG_PHI:[76,3,1,""],LLIL_REG_SPLIT:[76,3,1,""],LLIL_REG_SPLIT_DEST_SSA:[76,3,1,""],LLIL_REG_SPLIT_SSA:[76,3,1,""],LLIL_REG_SSA:[76,3,1,""],LLIL_REG_SSA_PARTIAL:[76,3,1,""],LLIL_REG_STACK_ABS_SSA:[76,3,1,""],LLIL_REG_STACK_DEST_SSA:[76,3,1,""],LLIL_REG_STACK_FREE_ABS_SSA:[76,3,1,""],LLIL_REG_STACK_FREE_REG:[76,3,1,""],LLIL_REG_STACK_FREE_REL:[76,3,1,""],LLIL_REG_STACK_FREE_REL_SSA:[76,3,1,""],LLIL_REG_STACK_PHI:[76,3,1,""],LLIL_REG_STACK_POP:[76,3,1,""],LLIL_REG_STACK_PUSH:[76,3,1,""],LLIL_REG_STACK_REL:[76,3,1,""],LLIL_REG_STACK_REL_SSA:[76,3,1,""],LLIL_RET:[76,3,1,""],LLIL_RLC:[76,3,1,""],LLIL_ROL:[76,3,1,""],LLIL_ROR:[76,3,1,""],LLIL_ROUND_TO_INT:[76,3,1,""],LLIL_RRC:[76,3,1,""],LLIL_SBB:[76,3,1,""],LLIL_SET_FLAG:[76,3,1,""],LLIL_SET_FLAG_SSA:[76,3,1,""],LLIL_SET_REG:[76,3,1,""],LLIL_SET_REG_SPLIT:[76,3,1,""],LLIL_SET_REG_SPLIT_SSA:[76,3,1,""],LLIL_SET_REG_SSA:[76,3,1,""],LLIL_SET_REG_SSA_PARTIAL:[76,3,1,""],LLIL_SET_REG_STACK_ABS_SSA:[76,3,1,""],LLIL_SET_REG_STACK_REL:[76,3,1,""],LLIL_SET_REG_STACK_REL_SSA:[76,3,1,""],LLIL_STORE:[76,3,1,""],LLIL_STORE_SSA:[76,3,1,""],LLIL_SUB:[76,3,1,""],LLIL_SX:[76,3,1,""],LLIL_SYSCALL:[76,3,1,""],LLIL_SYSCALL_SSA:[76,3,1,""],LLIL_TAILCALL:[76,3,1,""],LLIL_TAILCALL_SSA:[76,3,1,""],LLIL_TEST_BIT:[76,3,1,""],LLIL_TRAP:[76,3,1,""],LLIL_UNDEF:[76,3,1,""],LLIL_UNIMPL:[76,3,1,""],LLIL_UNIMPL_MEM:[76,3,1,""],LLIL_XOR:[76,3,1,""],LLIL_ZX:[76,3,1,""],__init__:[99,2,1,""]},"binaryninja.enums.MediumLevelILOperation":{MLIL_ADC:[76,3,1,""],MLIL_ADD:[76,3,1,""],MLIL_ADDRESS_OF:[76,3,1,""],MLIL_ADDRESS_OF_FIELD:[76,3,1,""],MLIL_ADD_OVERFLOW:[76,3,1,""],MLIL_AND:[76,3,1,""],MLIL_ASR:[76,3,1,""],MLIL_BOOL_TO_INT:[76,3,1,""],MLIL_BP:[76,3,1,""],MLIL_CALL:[76,3,1,""],MLIL_CALL_OUTPUT:[76,3,1,""],MLIL_CALL_OUTPUT_SSA:[76,3,1,""],MLIL_CALL_PARAM:[76,3,1,""],MLIL_CALL_PARAM_SSA:[76,3,1,""],MLIL_CALL_SSA:[76,3,1,""],MLIL_CALL_UNTYPED:[76,3,1,""],MLIL_CALL_UNTYPED_SSA:[76,3,1,""],MLIL_CEIL:[76,3,1,""],MLIL_CMP_E:[76,3,1,""],MLIL_CMP_NE:[76,3,1,""],MLIL_CMP_SGE:[76,3,1,""],MLIL_CMP_SGT:[76,3,1,""],MLIL_CMP_SLE:[76,3,1,""],MLIL_CMP_SLT:[76,3,1,""],MLIL_CMP_UGE:[76,3,1,""],MLIL_CMP_UGT:[76,3,1,""],MLIL_CMP_ULE:[76,3,1,""],MLIL_CMP_ULT:[76,3,1,""],MLIL_CONST:[76,3,1,""],MLIL_CONST_PTR:[76,3,1,""],MLIL_DIVS:[76,3,1,""],MLIL_DIVS_DP:[76,3,1,""],MLIL_DIVU:[76,3,1,""],MLIL_DIVU_DP:[76,3,1,""],MLIL_EXTERN_PTR:[76,3,1,""],MLIL_FABS:[76,3,1,""],MLIL_FADD:[76,3,1,""],MLIL_FCMP_E:[76,3,1,""],MLIL_FCMP_GE:[76,3,1,""],MLIL_FCMP_GT:[76,3,1,""],MLIL_FCMP_LE:[76,3,1,""],MLIL_FCMP_LT:[76,3,1,""],MLIL_FCMP_NE:[76,3,1,""],MLIL_FCMP_O:[76,3,1,""],MLIL_FCMP_UO:[76,3,1,""],MLIL_FDIV:[76,3,1,""],MLIL_FLOAT_CONST:[76,3,1,""],MLIL_FLOAT_CONV:[76,3,1,""],MLIL_FLOAT_TO_INT:[76,3,1,""],MLIL_FLOOR:[76,3,1,""],MLIL_FMUL:[76,3,1,""],MLIL_FNEG:[76,3,1,""],MLIL_FREE_VAR_SLOT:[76,3,1,""],MLIL_FREE_VAR_SLOT_SSA:[76,3,1,""],MLIL_FSQRT:[76,3,1,""],MLIL_FSUB:[76,3,1,""],MLIL_FTRUNC:[76,3,1,""],MLIL_GOTO:[76,3,1,""],MLIL_IF:[76,3,1,""],MLIL_IMPORT:[76,3,1,""],MLIL_INTRINSIC:[76,3,1,""],MLIL_INTRINSIC_SSA:[76,3,1,""],MLIL_INT_TO_FLOAT:[76,3,1,""],MLIL_JUMP:[76,3,1,""],MLIL_JUMP_TO:[76,3,1,""],MLIL_LOAD:[76,3,1,""],MLIL_LOAD_SSA:[76,3,1,""],MLIL_LOAD_STRUCT:[76,3,1,""],MLIL_LOAD_STRUCT_SSA:[76,3,1,""],MLIL_LOW_PART:[76,3,1,""],MLIL_LSL:[76,3,1,""],MLIL_LSR:[76,3,1,""],MLIL_MEM_PHI:[76,3,1,""],MLIL_MODS:[76,3,1,""],MLIL_MODS_DP:[76,3,1,""],MLIL_MODU:[76,3,1,""],MLIL_MODU_DP:[76,3,1,""],MLIL_MUL:[76,3,1,""],MLIL_MULS_DP:[76,3,1,""],MLIL_MULU_DP:[76,3,1,""],MLIL_NEG:[76,3,1,""],MLIL_NOP:[76,3,1,""],MLIL_NORET:[76,3,1,""],MLIL_NOT:[76,3,1,""],MLIL_OR:[76,3,1,""],MLIL_RET:[76,3,1,""],MLIL_RET_HINT:[76,3,1,""],MLIL_RLC:[76,3,1,""],MLIL_ROL:[76,3,1,""],MLIL_ROR:[76,3,1,""],MLIL_ROUND_TO_INT:[76,3,1,""],MLIL_RRC:[76,3,1,""],MLIL_SBB:[76,3,1,""],MLIL_SET_VAR:[76,3,1,""],MLIL_SET_VAR_ALIASED:[76,3,1,""],MLIL_SET_VAR_ALIASED_FIELD:[76,3,1,""],MLIL_SET_VAR_FIELD:[76,3,1,""],MLIL_SET_VAR_SPLIT:[76,3,1,""],MLIL_SET_VAR_SPLIT_SSA:[76,3,1,""],MLIL_SET_VAR_SSA:[76,3,1,""],MLIL_SET_VAR_SSA_FIELD:[76,3,1,""],MLIL_STORE:[76,3,1,""],MLIL_STORE_SSA:[76,3,1,""],MLIL_STORE_STRUCT:[76,3,1,""],MLIL_STORE_STRUCT_SSA:[76,3,1,""],MLIL_SUB:[76,3,1,""],MLIL_SX:[76,3,1,""],MLIL_SYSCALL:[76,3,1,""],MLIL_SYSCALL_SSA:[76,3,1,""],MLIL_SYSCALL_UNTYPED:[76,3,1,""],MLIL_SYSCALL_UNTYPED_SSA:[76,3,1,""],MLIL_TAILCALL:[76,3,1,""],MLIL_TAILCALL_SSA:[76,3,1,""],MLIL_TAILCALL_UNTYPED:[76,3,1,""],MLIL_TAILCALL_UNTYPED_SSA:[76,3,1,""],MLIL_TEST_BIT:[76,3,1,""],MLIL_TRAP:[76,3,1,""],MLIL_UNDEF:[76,3,1,""],MLIL_UNIMPL:[76,3,1,""],MLIL_UNIMPL_MEM:[76,3,1,""],MLIL_VAR:[76,3,1,""],MLIL_VAR_ALIASED:[76,3,1,""],MLIL_VAR_ALIASED_FIELD:[76,3,1,""],MLIL_VAR_FIELD:[76,3,1,""],MLIL_VAR_PHI:[76,3,1,""],MLIL_VAR_SPLIT:[76,3,1,""],MLIL_VAR_SPLIT_SSA:[76,3,1,""],MLIL_VAR_SSA:[76,3,1,""],MLIL_VAR_SSA_FIELD:[76,3,1,""],MLIL_XOR:[76,3,1,""],MLIL_ZX:[76,3,1,""],__init__:[100,2,1,""]},"binaryninja.enums.MemberAccess":{NoAccess:[76,3,1,""],PrivateAccess:[76,3,1,""],ProtectedAccess:[76,3,1,""],PublicAccess:[76,3,1,""],__init__:[101,2,1,""]},"binaryninja.enums.MemberScope":{FriendScope:[76,3,1,""],NoScope:[76,3,1,""],StaticScope:[76,3,1,""],ThunkScope:[76,3,1,""],VirtualScope:[76,3,1,""],__init__:[102,2,1,""]},"binaryninja.enums.MessageBoxButtonResult":{CancelButton:[76,3,1,""],NoButton:[76,3,1,""],OKButton:[76,3,1,""],YesButton:[76,3,1,""],__init__:[103,2,1,""]},"binaryninja.enums.MessageBoxButtonSet":{OKButtonSet:[76,3,1,""],YesNoButtonSet:[76,3,1,""],YesNoCancelButtonSet:[76,3,1,""],__init__:[104,2,1,""]},"binaryninja.enums.MessageBoxIcon":{ErrorIcon:[76,3,1,""],InformationIcon:[76,3,1,""],QuestionIcon:[76,3,1,""],WarningIcon:[76,3,1,""],__init__:[105,2,1,""]},"binaryninja.enums.MetadataType":{ArrayDataType:[76,3,1,""],BooleanDataType:[76,3,1,""],DoubleDataType:[76,3,1,""],InvalidDataType:[76,3,1,""],KeyValueDataType:[76,3,1,""],RawDataType:[76,3,1,""],SignedIntegerDataType:[76,3,1,""],StringDataType:[76,3,1,""],UnsignedIntegerDataType:[76,3,1,""],__init__:[106,2,1,""]},"binaryninja.enums.ModificationStatus":{Changed:[76,3,1,""],Inserted:[76,3,1,""],Original:[76,3,1,""],__init__:[107,2,1,""]},"binaryninja.enums.NameType":{ConstructorNameType:[76,3,1,""],CopyConstructorClosureNameType:[76,3,1,""],DefaultConstructorClosureNameType:[76,3,1,""],DestructorNameType:[76,3,1,""],EHVectorConstructorIteratorNameType:[76,3,1,""],EHVectorDestructorIteratorNameType:[76,3,1,""],EHVectorVBaseConstructorIteratorNameType:[76,3,1,""],LocalStaticGuardNameType:[76,3,1,""],LocalVFTableConstructorClosureNameType:[76,3,1,""],LocalVFTableNameType:[76,3,1,""],NoNameType:[76,3,1,""],OperatorAndEqualNameType:[76,3,1,""],OperatorArrayNameType:[76,3,1,""],OperatorArrowNameType:[76,3,1,""],OperatorArrowStarNameType:[76,3,1,""],OperatorAssignNameType:[76,3,1,""],OperatorBitAndNameType:[76,3,1,""],OperatorBitOrNameType:[76,3,1,""],OperatorCommaNameType:[76,3,1,""],OperatorDecrementNameType:[76,3,1,""],OperatorDeleteArrayNameType:[76,3,1,""],OperatorDeleteNameType:[76,3,1,""],OperatorDivideEqualNameType:[76,3,1,""],OperatorDivideNameType:[76,3,1,""],OperatorEqualNameType:[76,3,1,""],OperatorGreaterThanEqualNameType:[76,3,1,""],OperatorGreaterThanNameType:[76,3,1,""],OperatorIncrementNameType:[76,3,1,""],OperatorLeftShiftEqualNameType:[76,3,1,""],OperatorLeftShiftNameType:[76,3,1,""],OperatorLessThanEqualNameType:[76,3,1,""],OperatorLessThanNameType:[76,3,1,""],OperatorLogicalAndNameType:[76,3,1,""],OperatorLogicalOrNameType:[76,3,1,""],OperatorMinusEqualNameType:[76,3,1,""],OperatorMinusNameType:[76,3,1,""],OperatorModulusEqualNameType:[76,3,1,""],OperatorModulusNameType:[76,3,1,""],OperatorNewArrayNameType:[76,3,1,""],OperatorNewNameType:[76,3,1,""],OperatorNotEqualNameType:[76,3,1,""],OperatorNotNameType:[76,3,1,""],OperatorOrEqualNameType:[76,3,1,""],OperatorParenthesesNameType:[76,3,1,""],OperatorPlusEqualNameType:[76,3,1,""],OperatorPlusNameType:[76,3,1,""],OperatorReturnTypeNameType:[76,3,1,""],OperatorRightShiftEqualNameType:[76,3,1,""],OperatorRightShiftNameType:[76,3,1,""],OperatorStarEqualNameType:[76,3,1,""],OperatorStarNameType:[76,3,1,""],OperatorTildeNameType:[76,3,1,""],OperatorUnaryBitAndNameType:[76,3,1,""],OperatorUnaryMinusNameType:[76,3,1,""],OperatorUnaryPlusNameType:[76,3,1,""],OperatorUnaryStarNameType:[76,3,1,""],OperatorXorEqualNameType:[76,3,1,""],OperatorXorNameType:[76,3,1,""],PlacementDeleteClosureArrayNameType:[76,3,1,""],PlacementDeleteClosureNameType:[76,3,1,""],RttiBaseClassArray:[76,3,1,""],RttiBaseClassDescriptor:[76,3,1,""],RttiClassHeirarchyDescriptor:[76,3,1,""],RttiCompleteObjectLocator:[76,3,1,""],RttiTypeDescriptor:[76,3,1,""],ScalarDeletingDestructorNameType:[76,3,1,""],StringNameType:[76,3,1,""],TypeofNameType:[76,3,1,""],UDTReturningNameType:[76,3,1,""],VBTableNameType:[76,3,1,""],VBaseDestructorNameType:[76,3,1,""],VCallNameType:[76,3,1,""],VFTableNameType:[76,3,1,""],VectorConstructorIteratorNameType:[76,3,1,""],VectorDeletingDestructorNameType:[76,3,1,""],VectorDestructorIteratorNameType:[76,3,1,""],VectorVBaseConstructorIteratoreNameType:[76,3,1,""],VirtualDisplacementMapNameType:[76,3,1,""],__init__:[108,2,1,""]},"binaryninja.enums.NamedTypeReferenceClass":{ClassNamedTypeClass:[76,3,1,""],EnumNamedTypeClass:[76,3,1,""],StructNamedTypeClass:[76,3,1,""],TypedefNamedTypeClass:[76,3,1,""],UnionNamedTypeClass:[76,3,1,""],UnknownNamedTypeClass:[76,3,1,""],__init__:[109,2,1,""]},"binaryninja.enums.PluginCommandType":{AddressPluginCommand:[76,3,1,""],DefaultPluginCommand:[76,3,1,""],FunctionPluginCommand:[76,3,1,""],LowLevelILFunctionPluginCommand:[76,3,1,""],LowLevelILInstructionPluginCommand:[76,3,1,""],MediumLevelILFunctionPluginCommand:[76,3,1,""],MediumLevelILInstructionPluginCommand:[76,3,1,""],RangePluginCommand:[76,3,1,""],__init__:[110,2,1,""]},"binaryninja.enums.PluginLoadOrder":{EarlyPluginLoadOrder:[76,3,1,""],LatePluginLoadOrder:[76,3,1,""],NormalPluginLoadOrder:[76,3,1,""],__init__:[111,2,1,""]},"binaryninja.enums.PluginOrigin":{CommunityPluginOrigin:[76,3,1,""],OfficialPluginOrigin:[76,3,1,""],OtherPluginOrigin:[76,3,1,""],__init__:[112,2,1,""]},"binaryninja.enums.PluginType":{ArchitecturePluginType:[76,3,1,""],BinaryViewPluginType:[76,3,1,""],CorePluginType:[76,3,1,""],UiPluginType:[76,3,1,""],__init__:[113,2,1,""]},"binaryninja.enums.PluginUpdateStatus":{UpToDatePluginStatus:[76,3,1,""],UpdatesAvailablePluginStatus:[76,3,1,""],__init__:[114,2,1,""]},"binaryninja.enums.PointerSuffix":{LvalueSuffix:[76,3,1,""],Ptr64Suffix:[76,3,1,""],ReferenceSuffix:[76,3,1,""],RestrictSuffix:[76,3,1,""],UnalignedSuffix:[76,3,1,""],__init__:[115,2,1,""]},"binaryninja.enums.ReferenceType":{NoReference:[76,3,1,""],PointerReferenceType:[76,3,1,""],RValueReferenceType:[76,3,1,""],ReferenceReferenceType:[76,3,1,""],__init__:[116,2,1,""]},"binaryninja.enums.RegisterValueType":{ConstantPointerValue:[76,3,1,""],ConstantValue:[76,3,1,""],EntryValue:[76,3,1,""],ExternalPointerValue:[76,3,1,""],ImportedAddressValue:[76,3,1,""],InSetOfValues:[76,3,1,""],LookupTableValue:[76,3,1,""],NotInSetOfValues:[76,3,1,""],ReturnAddressValue:[76,3,1,""],SignedRangeValue:[76,3,1,""],StackFrameOffset:[76,3,1,""],UndeterminedValue:[76,3,1,""],UnsignedRangeValue:[76,3,1,""],__init__:[117,2,1,""]},"binaryninja.enums.RelocationType":{ELFCopyRelocationType:[76,3,1,""],ELFGlobalRelocationType:[76,3,1,""],ELFJumpSlotRelocationType:[76,3,1,""],IgnoredRelocation:[76,3,1,""],StandardRelocationType:[76,3,1,""],__init__:[118,2,1,""]},"binaryninja.enums.ReportType":{FlowGraphReportType:[76,3,1,""],HTMLReportType:[76,3,1,""],MarkdownReportType:[76,3,1,""],PlainTextReportType:[76,3,1,""],__init__:[119,2,1,""]},"binaryninja.enums.ScriptingProviderExecuteResult":{IncompleteScriptInput:[76,3,1,""],InvalidScriptInput:[76,3,1,""],ScriptExecutionCancelled:[76,3,1,""],SuccessfulScriptExecution:[76,3,1,""],__init__:[120,2,1,""]},"binaryninja.enums.ScriptingProviderInputReadyState":{NotReadyForInput:[76,3,1,""],ReadyForScriptExecution:[76,3,1,""],ReadyForScriptProgramInput:[76,3,1,""],__init__:[121,2,1,""]},"binaryninja.enums.SectionSemantics":{DefaultSectionSemantics:[76,3,1,""],ExternalSectionSemantics:[76,3,1,""],ReadOnlyCodeSectionSemantics:[76,3,1,""],ReadOnlyDataSectionSemantics:[76,3,1,""],ReadWriteDataSectionSemantics:[76,3,1,""],__init__:[122,2,1,""]},"binaryninja.enums.SegmentFlag":{SegmentContainsCode:[76,3,1,""],SegmentContainsData:[76,3,1,""],SegmentDenyExecute:[76,3,1,""],SegmentDenyWrite:[76,3,1,""],SegmentExecutable:[76,3,1,""],SegmentReadable:[76,3,1,""],SegmentWritable:[76,3,1,""],__init__:[123,2,1,""]},"binaryninja.enums.SettingsScope":{SettingsAutoScope:[76,3,1,""],SettingsContextScope:[76,3,1,""],SettingsDefaultScope:[76,3,1,""],SettingsInvalidScope:[76,3,1,""],SettingsUserScope:[76,3,1,""],SettingsWorkspaceScope:[76,3,1,""],__init__:[124,2,1,""]},"binaryninja.enums.StringType":{AsciiString:[76,3,1,""],Utf16String:[76,3,1,""],Utf32String:[76,3,1,""],Utf8String:[76,3,1,""],__init__:[125,2,1,""]},"binaryninja.enums.StructureType":{ClassStructureType:[76,3,1,""],StructStructureType:[76,3,1,""],UnionStructureType:[76,3,1,""],__init__:[126,2,1,""]},"binaryninja.enums.SymbolBinding":{GlobalBinding:[76,3,1,""],LocalBinding:[76,3,1,""],NoBinding:[76,3,1,""],WeakBinding:[76,3,1,""],__init__:[127,2,1,""]},"binaryninja.enums.SymbolType":{DataSymbol:[76,3,1,""],ExternalSymbol:[76,3,1,""],FunctionSymbol:[76,3,1,""],ImportAddressSymbol:[76,3,1,""],ImportedDataSymbol:[76,3,1,""],ImportedFunctionSymbol:[76,3,1,""],__init__:[128,2,1,""]},"binaryninja.enums.TransformType":{BinaryCodecTransform:[76,3,1,""],BinaryEncodeTransform:[76,3,1,""],DecodeTransform:[76,3,1,""],EncryptTransform:[76,3,1,""],HashTransform:[76,3,1,""],InvertingTransform:[76,3,1,""],TextCodecTransform:[76,3,1,""],TextEncodeTransform:[76,3,1,""],UnicodeCodecTransform:[76,3,1,""],__init__:[129,2,1,""]},"binaryninja.enums.TypeClass":{ArrayTypeClass:[76,3,1,""],BoolTypeClass:[76,3,1,""],EnumerationTypeClass:[76,3,1,""],FloatTypeClass:[76,3,1,""],FunctionTypeClass:[76,3,1,""],IntegerTypeClass:[76,3,1,""],NamedTypeReferenceClass:[76,3,1,""],PointerTypeClass:[76,3,1,""],StructureTypeClass:[76,3,1,""],ValueTypeClass:[76,3,1,""],VarArgsTypeClass:[76,3,1,""],VoidTypeClass:[76,3,1,""],WideCharTypeClass:[76,3,1,""],__init__:[130,2,1,""]},"binaryninja.enums.UpdateResult":{AlreadyUpToDate:[76,3,1,""],UpdateAvailable:[76,3,1,""],UpdateFailed:[76,3,1,""],UpdateSuccess:[76,3,1,""],__init__:[131,2,1,""]},"binaryninja.enums.VariableSourceType":{FlagVariableSourceType:[76,3,1,""],RegisterVariableSourceType:[76,3,1,""],StackVariableSourceType:[76,3,1,""],__init__:[132,2,1,""]},"binaryninja.fileaccessor":{CoreFileAccessor:[134,1,1,""],FileAccessor:[135,1,1,""]},"binaryninja.fileaccessor.CoreFileAccessor":{__init__:[134,2,1,""],get_length:[133,2,1,""],read:[133,2,1,""],write:[133,2,1,""]},"binaryninja.fileaccessor.FileAccessor":{__init__:[135,2,1,""]},"binaryninja.filemetadata":{FileMetadata:[137,1,1,""],NavigationHandler:[138,1,1,""]},"binaryninja.filemetadata.FileMetadata":{__init__:[137,2,1,""],analysis_changed:[136,3,1,""],begin_undo_actions:[136,2,1,""],close:[136,2,1,""],commit_undo_actions:[136,2,1,""],create_database:[136,2,1,""],filename:[136,3,1,""],get_view_of_type:[136,2,1,""],has_database:[136,3,1,""],modified:[136,3,1,""],navigate:[136,2,1,""],navigation:[136,3,1,""],offset:[136,3,1,""],open_existing_database:[136,2,1,""],original_filename:[136,3,1,""],raw:[136,3,1,""],redo:[136,2,1,""],save_auto_snapshot:[136,2,1,""],saved:[136,3,1,""],session_data:[136,3,1,""],set_default_session_data:[136,5,1,""],undo:[136,2,1,""],view:[136,3,1,""]},"binaryninja.filemetadata.NavigationHandler":{__init__:[138,2,1,""]},"binaryninja.flowgraph":{CoreFlowGraph:[140,1,1,""],FlowGraph:[141,1,1,""],FlowGraphEdge:[142,1,1,""],FlowGraphLayoutRequest:[143,1,1,""],FlowGraphNode:[144,1,1,""],range:[145,4,1,""]},"binaryninja.flowgraph.CoreFlowGraph":{__init__:[140,2,1,""],update:[139,2,1,""]},"binaryninja.flowgraph.FlowGraph":{"function":[139,3,1,""],__init__:[141,2,1,""],append:[139,2,1,""],complete:[139,3,1,""],complete_layout:[139,2,1,""],finish_prepare_for_layout:[139,2,1,""],get_nodes_in_region:[139,2,1,""],has_nodes:[139,3,1,""],height:[139,3,1,""],horizontal_block_margin:[139,3,1,""],il_function:[139,3,1,""],is_il:[139,3,1,""],is_low_level_il:[139,3,1,""],is_medium_level_il:[139,3,1,""],layout:[139,2,1,""],layout_and_wait:[139,2,1,""],nodes:[139,3,1,""],populate_nodes:[139,2,1,""],prepare_for_layout:[139,2,1,""],show:[139,2,1,""],update:[139,2,1,""],vertical_block_margin:[139,3,1,""],width:[139,3,1,""]},"binaryninja.flowgraph.FlowGraphEdge":{__init__:[142,2,1,""]},"binaryninja.flowgraph.FlowGraphLayoutRequest":{__init__:[143,2,1,""],abort:[139,2,1,""],complete:[139,3,1,""],graph:[139,3,1,""]},"binaryninja.flowgraph.FlowGraphNode":{__init__:[144,2,1,""],add_outgoing_edge:[139,2,1,""],basic_block:[139,3,1,""],height:[139,3,1,""],highlight:[139,3,1,""],lines:[139,3,1,""],outgoing_edges:[139,3,1,""],width:[139,3,1,""],x:[139,3,1,""],y:[139,3,1,""]},"binaryninja.function":{AdvancedFunctionAnalysisDataRequestor:[147,1,1,""],ConstantReference:[148,1,1,""],DisassemblySettings:[149,1,1,""],DisassemblyTextLine:[150,1,1,""],DisassemblyTextRenderer:[151,1,1,""],Function:[152,1,1,""],IndirectBranchInfo:[153,1,1,""],InstructionBranch:[154,1,1,""],InstructionInfo:[155,1,1,""],InstructionTextToken:[156,1,1,""],IntrinsicInfo:[157,1,1,""],IntrinsicInput:[158,1,1,""],LookupTableEntry:[159,1,1,""],ParameterVariables:[160,1,1,""],PossibleValueSet:[161,1,1,""],RegisterInfo:[162,1,1,""],RegisterStackInfo:[163,1,1,""],RegisterValue:[164,1,1,""],StackVariableReference:[165,1,1,""],ValueRange:[166,1,1,""],Variable:[167,1,1,""],range:[168,4,1,""]},"binaryninja.function.AdvancedFunctionAnalysisDataRequestor":{"function":[146,3,1,""],__init__:[147,2,1,""],close:[146,2,1,""]},"binaryninja.function.ConstantReference":{__init__:[148,2,1,""]},"binaryninja.function.DisassemblySettings":{__init__:[149,2,1,""],is_option_set:[146,2,1,""],max_symbol_width:[146,3,1,""],set_option:[146,2,1,""],width:[146,3,1,""]},"binaryninja.function.DisassemblyTextLine":{__init__:[150,2,1,""]},"binaryninja.function.DisassemblyTextRenderer":{"function":[146,3,1,""],__init__:[151,2,1,""],add_integer_token:[146,2,1,""],add_stack_var_reference_tokens:[146,2,1,""],add_symbol_token:[146,2,1,""],arch:[146,3,1,""],basic_block:[146,3,1,""],get_disassembly_text:[146,2,1,""],get_instruction_annotations:[146,2,1,""],get_instruction_text:[146,2,1,""],has_data_flow:[146,3,1,""],il:[146,3,1,""],il_function:[146,3,1,""],is_integer_token:[146,5,1,""],reset_deduplicated_comments:[146,2,1,""],settings:[146,3,1,""],wrap_comment:[146,2,1,""]},"binaryninja.function.Function":{__init__:[152,2,1,""],analysis_performance_info:[146,3,1,""],analysis_skip_override:[146,3,1,""],analysis_skip_reason:[146,3,1,""],analysis_skipped:[146,3,1,""],apply_auto_discovered_type:[146,2,1,""],apply_imported_types:[146,2,1,""],arch:[146,3,1,""],auto:[146,3,1,""],basic_blocks:[146,3,1,""],calling_convention:[146,3,1,""],can_return:[146,3,1,""],clobbered_regs:[146,3,1,""],comment:[146,3,1,""],comments:[146,3,1,""],create_auto_stack_var:[146,2,1,""],create_auto_var:[146,2,1,""],create_graph:[146,2,1,""],create_user_stack_var:[146,2,1,""],create_user_var:[146,2,1,""],delete_auto_stack_var:[146,2,1,""],delete_auto_var:[146,2,1,""],delete_user_stack_var:[146,2,1,""],delete_user_var:[146,2,1,""],explicitly_defined_type:[146,3,1,""],function_type:[146,3,1,""],get_basic_block_at:[146,2,1,""],get_block_annotations:[146,2,1,""],get_call_reg_stack_adjustment:[146,2,1,""],get_call_reg_stack_adjustment_for_reg_stack:[146,2,1,""],get_call_stack_adjustment:[146,2,1,""],get_comment_at:[146,2,1,""],get_constants_referenced_by:[146,2,1,""],get_flags_read_by_lifted_il_instruction:[146,2,1,""],get_flags_written_by_lifted_il_instruction:[146,2,1,""],get_indirect_branches_at:[146,2,1,""],get_instr_highlight:[146,2,1,""],get_int_display_type:[146,2,1,""],get_lifted_il_at:[146,2,1,""],get_lifted_il_flag_definitions_for_use:[146,2,1,""],get_lifted_il_flag_uses_for_definition:[146,2,1,""],get_low_level_il_at:[146,2,1,""],get_low_level_il_exits_at:[146,2,1,""],get_parameter_at:[146,2,1,""],get_parameter_at_low_level_il_instruction:[146,2,1,""],get_reg_value_after:[146,2,1,""],get_reg_value_at:[146,2,1,""],get_reg_value_at_exit:[146,2,1,""],get_regs_read_by:[146,2,1,""],get_regs_written_by:[146,2,1,""],get_stack_contents_after:[146,2,1,""],get_stack_contents_at:[146,2,1,""],get_stack_var_at_frame_offset:[146,2,1,""],get_stack_vars_referenced_by:[146,2,1,""],get_type_tokens:[146,2,1,""],global_pointer_value:[146,3,1,""],has_variable_arguments:[146,3,1,""],indirect_branches:[146,3,1,""],instructions:[146,3,1,""],is_call_instruction:[146,2,1,""],lifted_il:[146,3,1,""],llil:[146,3,1,""],llil_basic_blocks:[146,3,1,""],llil_instructions:[146,3,1,""],low_level_il:[146,3,1,""],mark_recent_use:[146,2,1,""],medium_level_il:[146,3,1,""],mlil:[146,3,1,""],mlil_basic_blocks:[146,3,1,""],mlil_instructions:[146,3,1,""],name:[146,3,1,""],needs_update:[146,3,1,""],parameter_vars:[146,3,1,""],platform:[146,3,1,""],reanalyze:[146,2,1,""],reg_stack_adjustments:[146,3,1,""],release_advanced_analysis_data:[146,2,1,""],request_advanced_analysis_data:[146,2,1,""],request_debug_report:[146,2,1,""],return_regs:[146,3,1,""],return_type:[146,3,1,""],session_data:[146,3,1,""],set_auto_call_reg_stack_adjustment:[146,2,1,""],set_auto_call_reg_stack_adjustment_for_reg_stack:[146,2,1,""],set_auto_call_stack_adjustment:[146,2,1,""],set_auto_calling_convention:[146,2,1,""],set_auto_can_return:[146,2,1,""],set_auto_clobbered_regs:[146,2,1,""],set_auto_has_variable_arguments:[146,2,1,""],set_auto_indirect_branches:[146,2,1,""],set_auto_instr_highlight:[146,2,1,""],set_auto_parameter_vars:[146,2,1,""],set_auto_reg_stack_adjustments:[146,2,1,""],set_auto_return_regs:[146,2,1,""],set_auto_return_type:[146,2,1,""],set_auto_stack_adjustment:[146,2,1,""],set_auto_type:[146,2,1,""],set_call_reg_stack_adjustment:[146,2,1,""],set_call_reg_stack_adjustment_for_reg_stack:[146,2,1,""],set_call_stack_adjustment:[146,2,1,""],set_comment:[146,2,1,""],set_comment_at:[146,2,1,""],set_default_session_data:[146,5,1,""],set_int_display_type:[146,2,1,""],set_user_indirect_branches:[146,2,1,""],set_user_instr_highlight:[146,2,1,""],set_user_type:[146,2,1,""],stack_adjustment:[146,3,1,""],stack_layout:[146,3,1,""],start:[146,3,1,""],symbol:[146,3,1,""],too_large:[146,3,1,""],type_tokens:[146,3,1,""],unresolved_stack_adjustment_graph:[146,3,1,""],vars:[146,3,1,""],view:[146,3,1,""]},"binaryninja.function.IndirectBranchInfo":{__init__:[153,2,1,""]},"binaryninja.function.InstructionBranch":{__init__:[154,2,1,""]},"binaryninja.function.InstructionInfo":{__init__:[155,2,1,""],add_branch:[146,2,1,""]},"binaryninja.function.InstructionTextToken":{__init__:[156,2,1,""],get_instruction_lines:[146,5,1,""]},"binaryninja.function.IntrinsicInfo":{__init__:[157,2,1,""]},"binaryninja.function.IntrinsicInput":{__init__:[158,2,1,""]},"binaryninja.function.LookupTableEntry":{__init__:[159,2,1,""]},"binaryninja.function.ParameterVariables":{__init__:[160,2,1,""],with_confidence:[146,2,1,""]},"binaryninja.function.PossibleValueSet":{__init__:[161,2,1,""]},"binaryninja.function.RegisterInfo":{__init__:[162,2,1,""]},"binaryninja.function.RegisterStackInfo":{__init__:[163,2,1,""]},"binaryninja.function.RegisterValue":{__init__:[164,2,1,""],constant:[146,5,1,""],constant_ptr:[146,5,1,""],entry_value:[146,5,1,""],imported_address:[146,5,1,""],return_address:[146,5,1,""],stack_frame_offset:[146,5,1,""],undetermined:[146,5,1,""]},"binaryninja.function.StackVariableReference":{__init__:[165,2,1,""]},"binaryninja.function.ValueRange":{__init__:[166,2,1,""]},"binaryninja.function.Variable":{__init__:[167,2,1,""],from_identifier:[146,5,1,""]},"binaryninja.functionrecognizer":{FunctionRecognizer:[170,1,1,""],log:[171,4,1,""]},"binaryninja.functionrecognizer.FunctionRecognizer":{__init__:[170,2,1,""],recognize_low_level_il:[169,2,1,""],recognize_medium_level_il:[169,2,1,""],register_arch:[169,5,1,""],register_global:[169,5,1,""]},"binaryninja.highlight":{HighlightColor:[173,1,1,""]},"binaryninja.highlight.HighlightColor":{__init__:[173,2,1,""]},"binaryninja.interaction":{AddressField:[175,1,1,""],ChoiceField:[176,1,1,""],DirectoryNameField:[177,1,1,""],FlowGraphReport:[178,1,1,""],HTMLReport:[179,1,1,""],IntegerField:[180,1,1,""],InteractionHandler:[181,1,1,""],LabelField:[182,1,1,""],MarkdownReport:[183,1,1,""],MultilineTextField:[184,1,1,""],OpenFileNameField:[185,1,1,""],PlainTextReport:[186,1,1,""],ReportCollection:[187,1,1,""],SaveFileNameField:[188,1,1,""],SeparatorField:[189,1,1,""],TextLineField:[190,1,1,""],get_address_input:[191,4,1,""],get_choice_input:[192,4,1,""],get_directory_name_input:[193,4,1,""],get_form_input:[194,4,1,""],get_int_input:[195,4,1,""],get_open_filename_input:[196,4,1,""],get_save_filename_input:[197,4,1,""],get_text_line_input:[198,4,1,""],markdown_to_html:[199,4,1,""],range:[200,4,1,""],show_graph_report:[201,4,1,""],show_html_report:[202,4,1,""],show_markdown_report:[203,4,1,""],show_message_box:[204,4,1,""],show_plain_text_report:[205,4,1,""],show_report_collection:[206,4,1,""]},"binaryninja.interaction.AddressField":{__init__:[175,2,1,""]},"binaryninja.interaction.ChoiceField":{__init__:[176,2,1,""]},"binaryninja.interaction.DirectoryNameField":{__init__:[177,2,1,""]},"binaryninja.interaction.FlowGraphReport":{__init__:[178,2,1,""]},"binaryninja.interaction.HTMLReport":{__init__:[179,2,1,""]},"binaryninja.interaction.IntegerField":{__init__:[180,2,1,""]},"binaryninja.interaction.InteractionHandler":{__init__:[181,2,1,""],get_address_input:[174,2,1,""],get_choice_input:[174,2,1,""],get_directory_name_input:[174,2,1,""],get_form_input:[174,2,1,""],get_int_input:[174,2,1,""],get_open_filename_input:[174,2,1,""],get_save_filename_input:[174,2,1,""],get_text_line_input:[174,2,1,""],register:[174,2,1,""],show_graph_report:[174,2,1,""],show_html_report:[174,2,1,""],show_markdown_report:[174,2,1,""],show_message_box:[174,2,1,""],show_plain_text_report:[174,2,1,""],show_report_collection:[174,2,1,""]},"binaryninja.interaction.LabelField":{__init__:[182,2,1,""]},"binaryninja.interaction.MarkdownReport":{__init__:[183,2,1,""]},"binaryninja.interaction.MultilineTextField":{__init__:[184,2,1,""]},"binaryninja.interaction.OpenFileNameField":{__init__:[185,2,1,""]},"binaryninja.interaction.PlainTextReport":{__init__:[186,2,1,""]},"binaryninja.interaction.ReportCollection":{__init__:[187,2,1,""],append:[174,2,1,""]},"binaryninja.interaction.SaveFileNameField":{__init__:[188,2,1,""]},"binaryninja.interaction.SeparatorField":{__init__:[189,2,1,""]},"binaryninja.interaction.TextLineField":{__init__:[190,2,1,""]},"binaryninja.lineardisassembly":{LinearDisassemblyLine:[208,1,1,""],LinearDisassemblyPosition:[209,1,1,""]},"binaryninja.lineardisassembly.LinearDisassemblyLine":{__init__:[208,2,1,""]},"binaryninja.lineardisassembly.LinearDisassemblyPosition":{__init__:[209,2,1,""]},"binaryninja.log":{close_logs:[211,4,1,""],is_output_redirected_to_log:[212,4,1,""],log:[213,4,1,""],log_alert:[214,4,1,""],log_debug:[215,4,1,""],log_error:[216,4,1,""],log_info:[217,4,1,""],log_to_file:[218,4,1,""],log_to_stderr:[219,4,1,""],log_to_stdout:[220,4,1,""],log_warn:[221,4,1,""],redirect_output_to_log:[222,4,1,""]},"binaryninja.lowlevelil":{ILFlag:[224,1,1,""],ILIntrinsic:[225,1,1,""],ILRegister:[226,1,1,""],ILRegisterStack:[227,1,1,""],ILSemanticFlagClass:[228,1,1,""],ILSemanticFlagGroup:[229,1,1,""],LLIL_GET_TEMP_REG_INDEX:[230,4,1,""],LLIL_REG_IS_TEMP:[231,4,1,""],LLIL_TEMP:[232,4,1,""],LowLevelILBasicBlock:[233,1,1,""],LowLevelILExpr:[234,1,1,""],LowLevelILFunction:[235,1,1,""],LowLevelILInstruction:[236,1,1,""],LowLevelILLabel:[237,1,1,""],LowLevelILOperationAndSize:[238,1,1,""],SSAFlag:[239,1,1,""],SSARegister:[240,1,1,""],SSARegisterOrFlag:[241,1,1,""],SSARegisterStack:[242,1,1,""],range:[243,4,1,""]},"binaryninja.lowlevelil.ILFlag":{__init__:[224,2,1,""]},"binaryninja.lowlevelil.ILIntrinsic":{__init__:[225,2,1,""]},"binaryninja.lowlevelil.ILRegister":{__init__:[226,2,1,""],info:[223,3,1,""]},"binaryninja.lowlevelil.ILRegisterStack":{__init__:[227,2,1,""],info:[223,3,1,""]},"binaryninja.lowlevelil.ILSemanticFlagClass":{__init__:[228,2,1,""]},"binaryninja.lowlevelil.ILSemanticFlagGroup":{__init__:[229,2,1,""]},"binaryninja.lowlevelil.LowLevelILBasicBlock":{__init__:[233,2,1,""]},"binaryninja.lowlevelil.LowLevelILExpr":{__init__:[234,2,1,""]},"binaryninja.lowlevelil.LowLevelILFunction":{"const":[223,2,1,""],"goto":[223,2,1,""],__init__:[235,2,1,""],add:[223,2,1,""],add_carry:[223,2,1,""],add_label_for_address:[223,2,1,""],add_label_list:[223,2,1,""],add_operand_list:[223,2,1,""],and_expr:[223,2,1,""],append:[223,2,1,""],arith_shift_right:[223,2,1,""],basic_blocks:[223,3,1,""],breakpoint:[223,2,1,""],call:[223,2,1,""],call_stack_adjust:[223,2,1,""],ceil:[223,2,1,""],clear_indirect_branches:[223,2,1,""],compare_equal:[223,2,1,""],compare_not_equal:[223,2,1,""],compare_signed_greater_equal:[223,2,1,""],compare_signed_greater_than:[223,2,1,""],compare_signed_less_equal:[223,2,1,""],compare_signed_less_than:[223,2,1,""],compare_unsigned_greater_equal:[223,2,1,""],compare_unsigned_greater_than:[223,2,1,""],compare_unsigned_less_equal:[223,2,1,""],compare_unsigned_less_than:[223,2,1,""],const_pointer:[223,2,1,""],create_graph:[223,2,1,""],current_address:[223,3,1,""],div_double_prec_signed:[223,2,1,""],div_double_prec_unsigned:[223,2,1,""],div_signed:[223,2,1,""],div_unsigned:[223,2,1,""],expr:[223,2,1,""],finalize:[223,2,1,""],flag:[223,2,1,""],flag_bit:[223,2,1,""],flag_condition:[223,2,1,""],flag_group:[223,2,1,""],float_abs:[223,2,1,""],float_add:[223,2,1,""],float_compare_equal:[223,2,1,""],float_compare_greater_equal:[223,2,1,""],float_compare_greater_than:[223,2,1,""],float_compare_less_equal:[223,2,1,""],float_compare_less_than:[223,2,1,""],float_compare_not_equal:[223,2,1,""],float_compare_unordered:[223,2,1,""],float_const_double:[223,2,1,""],float_const_raw:[223,2,1,""],float_const_single:[223,2,1,""],float_convert:[223,2,1,""],float_div:[223,2,1,""],float_mult:[223,2,1,""],float_neg:[223,2,1,""],float_sqrt:[223,2,1,""],float_sub:[223,2,1,""],float_to_int:[223,2,1,""],float_trunc:[223,2,1,""],floor:[223,2,1,""],get_instruction_start:[223,2,1,""],get_label_for_address:[223,2,1,""],get_mapped_medium_level_il_expr_index:[223,2,1,""],get_mapped_medium_level_il_instruction_index:[223,2,1,""],get_medium_level_il_expr_index:[223,2,1,""],get_medium_level_il_instruction_index:[223,2,1,""],get_non_ssa_instruction_index:[223,2,1,""],get_ssa_flag_definition:[223,2,1,""],get_ssa_flag_uses:[223,2,1,""],get_ssa_flag_value:[223,2,1,""],get_ssa_instruction_index:[223,2,1,""],get_ssa_memory_definition:[223,2,1,""],get_ssa_memory_uses:[223,2,1,""],get_ssa_reg_definition:[223,2,1,""],get_ssa_reg_uses:[223,2,1,""],get_ssa_reg_value:[223,2,1,""],if_expr:[223,2,1,""],instructions:[223,3,1,""],int_to_float:[223,2,1,""],intrinsic:[223,2,1,""],jump:[223,2,1,""],load:[223,2,1,""],logical_shift_right:[223,2,1,""],low_part:[223,2,1,""],mapped_medium_level_il:[223,3,1,""],mark_label:[223,2,1,""],medium_level_il:[223,3,1,""],mlil:[223,3,1,""],mmlil:[223,3,1,""],mod_double_prec_signed:[223,2,1,""],mod_double_prec_unsigned:[223,2,1,""],mod_signed:[223,2,1,""],mod_unsigned:[223,2,1,""],mult:[223,2,1,""],mult_double_prec_signed:[223,2,1,""],mult_double_prec_unsigned:[223,2,1,""],neg_expr:[223,2,1,""],no_ret:[223,2,1,""],non_ssa_form:[223,3,1,""],nop:[223,2,1,""],not_expr:[223,2,1,""],operand:[223,2,1,""],or_expr:[223,2,1,""],pop:[223,2,1,""],push:[223,2,1,""],reg:[223,2,1,""],reg_split:[223,2,1,""],reg_stack_pop:[223,2,1,""],reg_stack_push:[223,2,1,""],reg_stack_top_relative:[223,2,1,""],reloc_pointer:[223,2,1,""],ret:[223,2,1,""],rotate_left:[223,2,1,""],rotate_left_carry:[223,2,1,""],rotate_right:[223,2,1,""],rotate_right_carry:[223,2,1,""],round_to_int:[223,2,1,""],set_current_address:[223,2,1,""],set_current_source_block:[223,2,1,""],set_flag:[223,2,1,""],set_indirect_branches:[223,2,1,""],set_reg:[223,2,1,""],set_reg_split:[223,2,1,""],set_reg_stack_top_relative:[223,2,1,""],shift_left:[223,2,1,""],sign_extend:[223,2,1,""],ssa_form:[223,3,1,""],store:[223,2,1,""],sub:[223,2,1,""],sub_borrow:[223,2,1,""],system_call:[223,2,1,""],tailcall:[223,2,1,""],temp_flag_count:[223,3,1,""],temp_reg_count:[223,3,1,""],test_bit:[223,2,1,""],trap:[223,2,1,""],undefined:[223,2,1,""],unimplemented:[223,2,1,""],unimplemented_memory_ref:[223,2,1,""],xor_expr:[223,2,1,""],zero_extend:[223,2,1,""]},"binaryninja.lowlevelil.LowLevelILInstruction":{ILOperations:[223,3,1,""],__init__:[236,2,1,""],get_flag_value:[223,2,1,""],get_flag_value_after:[223,2,1,""],get_possible_flag_values:[223,2,1,""],get_possible_flag_values_after:[223,2,1,""],get_possible_reg_values:[223,2,1,""],get_possible_reg_values_after:[223,2,1,""],get_possible_stack_contents:[223,2,1,""],get_possible_stack_contents_after:[223,2,1,""],get_reg_value:[223,2,1,""],get_reg_value_after:[223,2,1,""],get_stack_contents:[223,2,1,""],get_stack_contents_after:[223,2,1,""],il_basic_block:[223,3,1,""],mapped_medium_level_il:[223,3,1,""],medium_level_il:[223,3,1,""],mlil:[223,3,1,""],mmlil:[223,3,1,""],non_ssa_form:[223,3,1,""],possible_values:[223,3,1,""],postfix_operands:[223,3,1,""],prefix_operands:[223,3,1,""],ssa_form:[223,3,1,""],tokens:[223,3,1,""],value:[223,3,1,""]},"binaryninja.lowlevelil.LowLevelILLabel":{__init__:[237,2,1,""]},"binaryninja.lowlevelil.LowLevelILOperationAndSize":{__init__:[238,2,1,""]},"binaryninja.lowlevelil.SSAFlag":{__init__:[239,2,1,""]},"binaryninja.lowlevelil.SSARegister":{__init__:[240,2,1,""]},"binaryninja.lowlevelil.SSARegisterOrFlag":{__init__:[241,2,1,""]},"binaryninja.lowlevelil.SSARegisterStack":{__init__:[242,2,1,""]},"binaryninja.mainthread":{execute_on_main_thread:[245,4,1,""],execute_on_main_thread_and_wait:[246,4,1,""],get_worker_thread_count:[247,4,1,""],set_worker_thread_count:[248,4,1,""],worker_enqueue:[249,4,1,""],worker_interactive_enqueue:[250,4,1,""],worker_priority_enqueue:[251,4,1,""]},"binaryninja.mediumlevelil":{MediumLevelILBasicBlock:[253,1,1,""],MediumLevelILExpr:[254,1,1,""],MediumLevelILFunction:[255,1,1,""],MediumLevelILInstruction:[256,1,1,""],MediumLevelILLabel:[257,1,1,""],MediumLevelILOperationAndSize:[258,1,1,""],SSAVariable:[259,1,1,""],range:[260,4,1,""]},"binaryninja.mediumlevelil.MediumLevelILBasicBlock":{__init__:[253,2,1,""]},"binaryninja.mediumlevelil.MediumLevelILExpr":{__init__:[254,2,1,""]},"binaryninja.mediumlevelil.MediumLevelILFunction":{"goto":[252,2,1,""],__init__:[255,2,1,""],add_label_list:[252,2,1,""],add_operand_list:[252,2,1,""],append:[252,2,1,""],basic_blocks:[252,3,1,""],create_graph:[252,2,1,""],current_address:[252,3,1,""],expr:[252,2,1,""],finalize:[252,2,1,""],get_instruction_start:[252,2,1,""],get_low_level_il_expr_index:[252,2,1,""],get_low_level_il_instruction_index:[252,2,1,""],get_non_ssa_instruction_index:[252,2,1,""],get_ssa_instruction_index:[252,2,1,""],get_ssa_memory_definition:[252,2,1,""],get_ssa_memory_uses:[252,2,1,""],get_ssa_var_definition:[252,2,1,""],get_ssa_var_uses:[252,2,1,""],get_ssa_var_value:[252,2,1,""],get_var_definitions:[252,2,1,""],get_var_uses:[252,2,1,""],if_expr:[252,2,1,""],instructions:[252,3,1,""],is_ssa_var_live:[252,2,1,""],llil:[252,3,1,""],low_level_il:[252,3,1,""],mark_label:[252,2,1,""],non_ssa_form:[252,3,1,""],operand:[252,2,1,""],set_current_address:[252,2,1,""],ssa_form:[252,3,1,""]},"binaryninja.mediumlevelil.MediumLevelILInstruction":{ILOperations:[252,3,1,""],__init__:[256,2,1,""],branch_dependence:[252,3,1,""],expr_type:[252,3,1,""],get_branch_dependence:[252,2,1,""],get_flag_value:[252,2,1,""],get_flag_value_after:[252,2,1,""],get_possible_flag_values:[252,2,1,""],get_possible_flag_values_after:[252,2,1,""],get_possible_reg_values:[252,2,1,""],get_possible_reg_values_after:[252,2,1,""],get_possible_stack_contents:[252,2,1,""],get_possible_stack_contents_after:[252,2,1,""],get_reg_value:[252,2,1,""],get_reg_value_after:[252,2,1,""],get_ssa_var_possible_values:[252,2,1,""],get_ssa_var_version:[252,2,1,""],get_stack_contents:[252,2,1,""],get_stack_contents_after:[252,2,1,""],get_var_for_flag:[252,2,1,""],get_var_for_reg:[252,2,1,""],get_var_for_stack_location:[252,2,1,""],il_basic_block:[252,3,1,""],llil:[252,3,1,""],low_level_il:[252,3,1,""],non_ssa_form:[252,3,1,""],possible_values:[252,3,1,""],postfix_operands:[252,3,1,""],prefix_operands:[252,3,1,""],ssa_form:[252,3,1,""],ssa_memory_version:[252,3,1,""],tokens:[252,3,1,""],value:[252,3,1,""],vars_read:[252,3,1,""],vars_written:[252,3,1,""]},"binaryninja.mediumlevelil.MediumLevelILLabel":{__init__:[257,2,1,""]},"binaryninja.mediumlevelil.MediumLevelILOperationAndSize":{__init__:[258,2,1,""]},"binaryninja.mediumlevelil.SSAVariable":{__init__:[259,2,1,""]},"binaryninja.metadata":{Metadata:[262,1,1,""],pyNativeStr:[263,4,1,""],range:[264,4,1,""]},"binaryninja.metadata.Metadata":{__init__:[262,2,1,""],get_dict:[261,2,1,""],is_array:[261,3,1,""],is_boolean:[261,3,1,""],is_dict:[261,3,1,""],is_float:[261,3,1,""],is_integer:[261,3,1,""],is_raw:[261,3,1,""],is_signed_integer:[261,3,1,""],is_string:[261,3,1,""],is_unsigned_integer:[261,3,1,""],remove:[261,2,1,""],type:[261,3,1,""],value:[261,3,1,""]},"binaryninja.numbers":{ABCMeta:[266,1,1,""],Complex:[267,1,1,""],Integral:[268,1,1,""],Number:[269,1,1,""],Rational:[270,1,1,""],Real:[271,1,1,""],abstractmethod:[272,4,1,""],abstractproperty:[273,1,1,""]},"binaryninja.numbers.ABCMeta":{__init__:[266,2,1,""]},"binaryninja.numbers.Complex":{__init__:[267,2,1,""],conjugate:[265,2,1,""],imag:[265,3,1,""],real:[265,3,1,""]},"binaryninja.numbers.Integral":{__init__:[268,2,1,""],denominator:[265,3,1,""],numerator:[265,3,1,""]},"binaryninja.numbers.Number":{__init__:[269,2,1,""]},"binaryninja.numbers.Rational":{__init__:[270,2,1,""],denominator:[265,3,1,""],numerator:[265,3,1,""]},"binaryninja.numbers.Real":{__init__:[271,2,1,""],conjugate:[265,2,1,""],imag:[265,3,1,""],real:[265,3,1,""]},"binaryninja.numbers.abstractproperty":{__init__:[273,2,1,""]},"binaryninja.platform":{Platform:[275,1,1,""],range:[276,4,1,""],with_metaclass:[277,4,1,""]},"binaryninja.platform.Platform":{__init__:[275,2,1,""],add_related_platform:[274,2,1,""],calling_conventions:[274,3,1,""],cdecl_calling_convention:[274,3,1,""],default_calling_convention:[274,3,1,""],fastcall_calling_convention:[274,3,1,""],functions:[274,3,1,""],generate_auto_platform_type_id:[274,2,1,""],generate_auto_platform_type_ref:[274,2,1,""],get_associated_platform_by_address:[274,2,1,""],get_auto_platform_type_id_source:[274,2,1,""],get_function_by_name:[274,2,1,""],get_related_platform:[274,2,1,""],get_system_call_name:[274,2,1,""],get_system_call_type:[274,2,1,""],get_type_by_name:[274,2,1,""],get_variable_by_name:[274,2,1,""],list:[274,3,1,""],name:[274,3,1,""],parse_types_from_source:[274,2,1,""],parse_types_from_source_file:[274,2,1,""],register:[274,2,1,""],register_calling_convention:[274,2,1,""],stdcall_calling_convention:[274,3,1,""],system_call_convention:[274,3,1,""],system_calls:[274,3,1,""],types:[274,3,1,""],variables:[274,3,1,""]},"binaryninja.plugin":{BackgroundTask:[279,1,1,""],BackgroundTaskThread:[280,1,1,""],MainThreadAction:[281,1,1,""],MainThreadActionHandler:[282,1,1,""],PluginCommand:[283,1,1,""],PluginCommandContext:[284,1,1,""],range:[285,4,1,""],with_metaclass:[286,4,1,""]},"binaryninja.plugin.BackgroundTask":{__init__:[279,2,1,""],can_cancel:[278,3,1,""],cancel:[278,2,1,""],cancelled:[278,3,1,""],finish:[278,2,1,""],finished:[278,3,1,""],list:[278,3,1,""],progress:[278,3,1,""]},"binaryninja.plugin.BackgroundTaskThread":{__init__:[280,2,1,""],join:[278,2,1,""],run:[278,2,1,""],start:[278,2,1,""]},"binaryninja.plugin.MainThreadAction":{__init__:[281,2,1,""],done:[278,3,1,""],execute:[278,2,1,""],wait:[278,2,1,""]},"binaryninja.plugin.MainThreadActionHandler":{__init__:[282,2,1,""],add_action:[278,2,1,""],register:[278,2,1,""]},"binaryninja.plugin.PluginCommand":{__init__:[283,2,1,""],execute:[278,2,1,""],get_valid_list:[278,5,1,""],is_valid:[278,2,1,""],list:[278,3,1,""],register:[278,5,1,""],register_for_address:[278,5,1,""],register_for_function:[278,5,1,""],register_for_low_level_il_function:[278,5,1,""],register_for_low_level_il_instruction:[278,5,1,""],register_for_medium_level_il_function:[278,5,1,""],register_for_medium_level_il_instruction:[278,5,1,""],register_for_range:[278,5,1,""]},"binaryninja.plugin.PluginCommandContext":{__init__:[284,2,1,""]},"binaryninja.pluginmanager":{RepoPlugin:[288,1,1,""],Repository:[289,1,1,""],RepositoryManager:[290,1,1,""],range:[291,4,1,""]},"binaryninja.pluginmanager.RepoPlugin":{PluginType:[287,1,1,""],PluginUpdateStatus:[287,1,1,""],__init__:[288,2,1,""],api:[287,3,1,""],description:[287,3,1,""],enabled:[287,3,1,""],installed:[287,3,1,""],license:[287,3,1,""],license_text:[287,3,1,""],long_description:[287,3,1,""],minimum_version:[287,3,1,""],name:[287,3,1,""],path:[287,3,1,""],plugin_types:[287,3,1,""],update_status:[287,3,1,""],url:[287,3,1,""],version:[287,3,1,""]},"binaryninja.pluginmanager.RepoPlugin.PluginType":{ArchitecturePluginType:[287,3,1,""],BinaryViewPluginType:[287,3,1,""],CorePluginType:[287,3,1,""],UiPluginType:[287,3,1,""]},"binaryninja.pluginmanager.RepoPlugin.PluginUpdateStatus":{UpToDatePluginStatus:[287,3,1,""],UpdatesAvailablePluginStatus:[287,3,1,""]},"binaryninja.pluginmanager.Repository":{__init__:[289,2,1,""],full_path:[287,3,1,""],initialized:[287,3,1,""],local_reference:[287,3,1,""],path:[287,3,1,""],plugins:[287,3,1,""],remote_reference:[287,3,1,""],url:[287,3,1,""]},"binaryninja.pluginmanager.RepositoryManager":{__init__:[290,2,1,""],add_repository:[287,2,1,""],check_for_updates:[287,2,1,""],default_repository:[287,3,1,""],disable_plugin:[287,2,1,""],enable_plugin:[287,2,1,""],install_plugin:[287,2,1,""],plugins:[287,3,1,""],repositories:[287,3,1,""],uninstall_plugin:[287,2,1,""],update_plugin:[287,2,1,""]},"binaryninja.scriptingprovider":{PythonScriptingInstance:[293,1,1,""],PythonScriptingProvider:[294,1,1,""],ScriptingInstance:[295,1,1,""],ScriptingOutputListener:[296,1,1,""],ScriptingProvider:[297,1,1,""],range:[298,4,1,""],redirect_stdio:[299,4,1,""],with_metaclass:[300,4,1,""]},"binaryninja.scriptingprovider.PythonScriptingInstance":{InterpreterThread:[292,1,1,""],__init__:[293,2,1,""],perform_cancel_script_input:[292,2,1,""],perform_destroy_instance:[292,2,1,""],perform_execute_script_input:[292,2,1,""],perform_set_current_address:[292,2,1,""],perform_set_current_basic_block:[292,2,1,""],perform_set_current_binary_view:[292,2,1,""],perform_set_current_function:[292,2,1,""],perform_set_current_selection:[292,2,1,""]},"binaryninja.scriptingprovider.PythonScriptingInstance.InterpreterThread":{add_input:[292,2,1,""],end:[292,2,1,""],execute:[292,2,1,""],get_selected_data:[292,2,1,""],read:[292,2,1,""],run:[292,2,1,""],write_at_cursor:[292,2,1,""]},"binaryninja.scriptingprovider.PythonScriptingProvider":{__init__:[294,2,1,""],instance_class:[292,3,1,""],name:[292,3,1,""]},"binaryninja.scriptingprovider.ScriptingInstance":{__init__:[295,2,1,""],cancel_script_input:[292,2,1,""],error:[292,2,1,""],execute_script_input:[292,2,1,""],input_ready_state:[292,3,1,""],output:[292,2,1,""],perform_cancel_script_input:[292,2,1,""],perform_destroy_instance:[292,2,1,""],perform_execute_script_input:[292,2,1,""],perform_set_current_address:[292,2,1,""],perform_set_current_basic_block:[292,2,1,""],perform_set_current_binary_view:[292,2,1,""],perform_set_current_function:[292,2,1,""],perform_set_current_selection:[292,2,1,""],register_output_listener:[292,2,1,""],set_current_address:[292,2,1,""],set_current_basic_block:[292,2,1,""],set_current_binary_view:[292,2,1,""],set_current_function:[292,2,1,""],set_current_selection:[292,2,1,""],unregister_output_listener:[292,2,1,""]},"binaryninja.scriptingprovider.ScriptingOutputListener":{__init__:[296,2,1,""],notify_error:[292,2,1,""],notify_input_ready_state_changed:[292,2,1,""],notify_output:[292,2,1,""]},"binaryninja.scriptingprovider.ScriptingProvider":{__init__:[297,2,1,""],create_instance:[292,2,1,""],instance_class:[292,3,1,""],list:[292,3,1,""],name:[292,3,1,""],register:[292,2,1,""]},"binaryninja.settings":{Settings:[302,1,1,""],pyNativeStr:[303,4,1,""],range:[304,4,1,""]},"binaryninja.settings.Settings":{__init__:[302,2,1,""],copy_value:[301,2,1,""],get_bool:[301,2,1,""],get_bool_with_scope:[301,2,1,""],get_double:[301,2,1,""],get_double_with_scope:[301,2,1,""],get_integer:[301,2,1,""],get_integer_with_scope:[301,2,1,""],get_schema:[301,2,1,""],get_string:[301,2,1,""],get_string_list:[301,2,1,""],get_string_list_with_scope:[301,2,1,""],get_string_with_scope:[301,2,1,""],register_group:[301,2,1,""],register_setting:[301,2,1,""],reset:[301,2,1,""],reset_all:[301,2,1,""],set_bool:[301,2,1,""],set_double:[301,2,1,""],set_integer:[301,2,1,""],set_string:[301,2,1,""],set_string_list:[301,2,1,""],update_property:[301,2,1,""]},"binaryninja.transform":{Transform:[306,1,1,""],TransformParameter:[307,1,1,""],range:[308,4,1,""],with_metaclass:[309,4,1,""]},"binaryninja.transform.Transform":{__init__:[306,2,1,""],decode:[305,2,1,""],encode:[305,2,1,""],group:[305,3,1,""],list:[305,3,1,""],long_name:[305,3,1,""],name:[305,3,1,""],parameters:[305,3,1,""],perform_decode:[305,2,1,""],perform_encode:[305,2,1,""],transform_type:[305,3,1,""]},"binaryninja.transform.TransformParameter":{__init__:[307,2,1,""]},"binaryninja.types":{BoolWithConfidence:[311,1,1,""],Enumeration:[312,1,1,""],EnumerationMember:[313,1,1,""],FunctionParameter:[314,1,1,""],NameSpace:[315,1,1,""],NamedTypeReference:[316,1,1,""],QualifiedName:[317,1,1,""],ReferenceTypeWithConfidence:[318,1,1,""],RegisterSet:[319,1,1,""],RegisterStackAdjustmentWithConfidence:[320,1,1,""],SizeWithConfidence:[321,1,1,""],Structure:[322,1,1,""],StructureMember:[323,1,1,""],Symbol:[324,1,1,""],Type:[325,1,1,""],TypeParserResult:[326,1,1,""],preprocess_source:[327,4,1,""],pyNativeStr:[328,4,1,""],range:[329,4,1,""]},"binaryninja.types.BoolWithConfidence":{__init__:[311,2,1,""]},"binaryninja.types.Enumeration":{__init__:[312,2,1,""],append:[310,2,1,""],members:[310,3,1,""],remove:[310,2,1,""],replace:[310,2,1,""]},"binaryninja.types.EnumerationMember":{__init__:[313,2,1,""]},"binaryninja.types.FunctionParameter":{__init__:[314,2,1,""]},"binaryninja.types.NameSpace":{__init__:[315,2,1,""]},"binaryninja.types.NamedTypeReference":{__init__:[316,2,1,""],generate_auto_demangled_type_ref:[310,5,1,""],generate_auto_type_ref:[310,5,1,""],name:[310,3,1,""],type_class:[310,3,1,""],type_id:[310,3,1,""]},"binaryninja.types.QualifiedName":{__init__:[317,2,1,""]},"binaryninja.types.ReferenceTypeWithConfidence":{__init__:[318,2,1,""]},"binaryninja.types.RegisterSet":{__init__:[319,2,1,""],with_confidence:[310,2,1,""]},"binaryninja.types.RegisterStackAdjustmentWithConfidence":{__init__:[320,2,1,""]},"binaryninja.types.SizeWithConfidence":{__init__:[321,2,1,""]},"binaryninja.types.Structure":{__init__:[322,2,1,""],alignment:[310,3,1,""],append:[310,2,1,""],insert:[310,2,1,""],members:[310,3,1,""],packed:[310,3,1,""],remove:[310,2,1,""],replace:[310,2,1,""],type:[310,3,1,""],union:[310,3,1,""],width:[310,3,1,""]},"binaryninja.types.StructureMember":{__init__:[323,2,1,""]},"binaryninja.types.Symbol":{__init__:[324,2,1,""],address:[310,3,1,""],auto:[310,3,1,""],binding:[310,3,1,""],full_name:[310,3,1,""],name:[310,3,1,""],namespace:[310,3,1,""],raw_name:[310,3,1,""],short_name:[310,3,1,""],type:[310,3,1,""]},"binaryninja.types.Type":{"char":[310,5,1,""],"const":[310,3,1,""],"float":[310,5,1,""],"function":[310,5,1,""],"int":[310,5,1,""],"void":[310,5,1,""],__init__:[325,2,1,""],alignment:[310,3,1,""],array:[310,5,1,""],bool:[310,5,1,""],calling_convention:[310,3,1,""],can_return:[310,3,1,""],count:[310,3,1,""],element_type:[310,3,1,""],enumeration:[310,3,1,""],enumeration_type:[310,5,1,""],generate_auto_demangled_type_id:[310,5,1,""],generate_auto_type_id:[310,5,1,""],get_auto_demangled_type_id_source:[310,5,1,""],get_string_after_name:[310,2,1,""],get_string_before_name:[310,2,1,""],get_tokens:[310,2,1,""],get_tokens_after_name:[310,2,1,""],get_tokens_before_name:[310,2,1,""],has_variable_arguments:[310,3,1,""],modified:[310,3,1,""],named_type:[310,5,1,""],named_type_from_registered_type:[310,5,1,""],named_type_from_type:[310,5,1,""],named_type_from_type_and_id:[310,5,1,""],named_type_reference:[310,3,1,""],offset:[310,3,1,""],parameters:[310,3,1,""],pointer:[310,5,1,""],return_value:[310,3,1,""],signed:[310,3,1,""],stack_adjustment:[310,3,1,""],structure:[310,3,1,""],structure_type:[310,5,1,""],target:[310,3,1,""],tokens:[310,3,1,""],type_class:[310,3,1,""],width:[310,3,1,""],with_confidence:[310,2,1,""]},"binaryninja.types.TypeParserResult":{__init__:[326,2,1,""]},"binaryninja.undoaction":{UndoAction:[331,1,1,""]},"binaryninja.undoaction.UndoAction":{__init__:[331,2,1,""],action_type:[330,3,1,""],name:[330,3,1,""],register:[330,5,1,""]},"binaryninja.update":{UpdateChannel:[333,1,1,""],UpdateProgressCallback:[334,1,1,""],UpdateVersion:[335,1,1,""],are_auto_updates_enabled:[336,4,1,""],get_time_since_last_update_check:[337,4,1,""],install_pending_update:[338,4,1,""],is_update_installation_pending:[339,4,1,""],range:[340,4,1,""],set_auto_updates_enabled:[341,4,1,""],updates_checked:[342,4,1,""],with_metaclass:[343,4,1,""]},"binaryninja.update.UpdateChannel":{__init__:[333,2,1,""],latest_version:[332,3,1,""],update_to_latest:[332,2,1,""],updates_available:[332,3,1,""],versions:[332,3,1,""]},"binaryninja.update.UpdateProgressCallback":{__init__:[334,2,1,""],callback:[332,2,1,""]},"binaryninja.update.UpdateVersion":{__init__:[335,2,1,""],update:[332,2,1,""]},binaryninja:{"function":[146,0,0,"-"],PluginManagerLoadPluginCallback:[346,1,1,""],architecture:[4,0,0,"-"],atexit:[12,0,0,"-"],basicblock:[14,0,0,"-"],binaryview:[18,0,0,"-"],bundled_plugin_path:[346,4,1,""],callingconvention:[39,0,0,"-"],core_build_id:[346,4,1,""],core_expires:[346,4,1,""],core_license_count:[346,4,1,""],core_product:[346,4,1,""],core_product_type:[346,4,1,""],core_serial:[346,4,1,""],core_ui_enabled:[346,4,1,""],core_version:[346,4,1,""],cstr:[346,4,1,""],databuffer:[42,0,0,"-"],datarender:[48,0,0,"-"],demangle:[56,0,0,"-"],downloadprovider:[62,0,0,"-"],enums:[76,0,0,"-"],fileaccessor:[133,0,0,"-"],filemetadata:[136,0,0,"-"],flowgraph:[139,0,0,"-"],functionrecognizer:[169,0,0,"-"],get_install_directory:[346,4,1,""],get_unique_identifier:[346,4,1,""],highlight:[172,0,0,"-"],interaction:[174,0,0,"-"],lineardisassembly:[207,0,0,"-"],log:[210,0,0,"-"],lowlevelil:[223,0,0,"-"],mainthread:[244,0,0,"-"],mediumlevelil:[252,0,0,"-"],metadata:[261,0,0,"-"],numbers:[265,0,0,"-"],platform:[274,0,0,"-"],plugin:[278,0,0,"-"],pluginmanager:[287,0,0,"-"],pyNativeStr:[346,4,1,""],range:[346,4,1,""],scriptingprovider:[292,0,0,"-"],settings:[301,0,0,"-"],shutdown:[346,4,1,""],transform:[305,0,0,"-"],types:[310,0,0,"-"],undoaction:[330,0,0,"-"],update:[332,0,0,"-"],user_plugin_path:[346,4,1,""],with_metaclass:[346,4,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","attribute","Python attribute"],"4":["py","function","Python function"],"5":["py","classmethod","Python class method"],"6":["py","exception","Python exception"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:attribute","4":"py:function","5":"py:classmethod","6":"py:exception"},terms:{"003e":[18,36],"0b100":[9,45],"0x0":[4,18],"0x1":18,"0x10":18,"0x10000000":18,"0x100000000":[18,27,49],"0x100000000l":18,"0x100000008l":18,"0x10000000l":18,"0x10000001l":18,"0x1000000l":18,"0x1000001":18,"0x1000003c":18,"0x1000003cl":18,"0x1000004d":18,"0x1000007feedfacf":18,"0x1000007feedfacfl":18,"0x100000f30":[14,146],"0x100000f50":146,"0x100001174":18,"0x10001100":18,"0x100012ed":18,"0x100012ef":18,"0x100012f1":[18,136],"0x100012f5":18,"0x100012f6":18,"0x100012fb":18,"0x1000130e":18,"0x10001317":18,"0x1000132a":18,"0x1000134a":18,"0x10001483":18,"0x10001485":18,"0x10001488":18,"0x1000149a":18,"0x1000149b":18,"0x1000149c":18,"0x1000149f":18,"0x1000149fl":18,"0x100014a8":18,"0x100014a8l":18,"0x100014adl":18,"0x100015e5":18,"0x100015e5l":18,"0x10001629":18,"0x10001629l":18,"0x1000165el":18,"0x1000200c":18,"0x10002028":18,"0x10003020":18,"0x10a2c9f10":18,"0x1c":18,"0x2":146,"0x2a":18,"0x2c":18,"0x400dbe":146,"0x400fad":146,"0x40dead":4,"0x4165ff":18,"0x42":18,"0x8":146,"0x9":4,"0xa":4,"0xa000":[18,27,49],"0xc":18,"0xcffa":18,"0xcffaedf":18,"0xcffaedfe07000001l":18,"0xcffaedfel":[18,26],"0xdeadbeef":18,"0xfacf":18,"0xfeedfacf":18,"0xfeedfacfl":[18,26],"0xff":[14,146],"0xffffffff":146,"100l":4,"10l":[174,191],"1337l":18,"268441061l":18,"abstract":[265,266,272,273],"boolean":[18,136,287,301,332,336,339],"break":18,"byte":[4,18,146,223,310],"case":18,"char":310,"class":[4,5,6,7,8,9,11,14,15,16,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,38,39,40,42,43,45,48,49,50,51,52,53,54,62,63,64,65,66,67,68,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,169,170,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,194,207,208,209,223,224,225,226,227,228,229,233,234,235,236,237,238,239,240,241,242,252,253,254,255,256,257,258,259,261,262,265,266,267,268,269,270,271,272,273,274,275,277,278,279,280,281,282,283,284,286,287,288,289,290,292,293,294,295,296,297,300,301,302,305,306,307,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,330,331,332,333,334,335,343,346],"const":[146,223,310],"default":[4,9,18,45,52,68,70,137,174,175,193,197,223,252,265,271,274,287,301,302,310,313],"enum":[18,56,58,146,287,346],"final":[136,223,252],"float":[9,45,53,146,156,223,252,265,271,310],"function":[4,12,13,14,18,139,174,175,191,192,193,195,196,197,198,201,202,203,205,206,223,235,252,255,266,274,278,310,324,326,346],"goto":[223,252],"import":[4,5,18,26,27,29,36,49,223,310,324],"int":[4,9,18,45,139,146,174,175,180,210,218,219,220,223,252,274,310,327,332,337],"long":[18,27,49,265,268,273,287,346],"new":[4,5,18,21,52,137,139,274,287,301],"public":[12,18,56,58],"return":[4,9,12,13,14,18,27,45,49,55,56,58,59,136,139,146,171,174,191,192,193,195,198,199,201,202,203,204,205,206,210,211,213,214,215,216,217,218,219,220,221,223,235,252,255,265,274,278,287,301,310,327,332,336,337,338,339,341,346],"short":[265,267,271,287,310],"static":[18,56,58,223,252],"super":[266,272,273],"true":[4,18,136,146,174,194,210,218,223,252,287,301,332,336,339,341],"var":[0,1,2,3,18,146,165,252,259],"void":310,For:[4,5,18,27,49,53,146,156],LHS:223,Not:[223,235],One:[12,18,27,49,174,204],RHS:223,The:[4,9,18,21,27,31,45,49,52,53,70,136,137,146,156,174,175,192,193,194,196,197,223,272,273,292],Use:[14,18,146,266,287,289],Was:146,Yes:[174,192,194],__cdecl:[18,56,58],__init__:[5,6,7,8,9,15,16,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,40,43,45,49,50,51,52,53,54,63,64,65,66,67,68,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,134,135,137,138,140,141,142,143,144,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,170,173,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,208,209,224,225,226,227,228,229,233,234,235,236,237,238,239,240,241,242,253,254,255,256,257,258,259,262,266,267,268,269,270,271,273,275,279,280,281,282,283,284,288,289,290,293,294,295,296,297,302,306,307,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,331,333,334,335],__metaclass__:[272,273],_current:18,_il:18,_index:4,_main:14,_printf:18,_start:18,_user_:[18,27,49],aaaa:18,aarch64:[4,5],abc:[265,266],abcmeta:[272,273,346],abl:18,abort:[18,139],abort_analysi:18,about:[53,146,156,265,267],abov:[18,174,194],abs:[265,267],absolut:[18,27,49,223],abstractmethod:346,abstractproperti:346,accept:4,access:[18,27,36,49,223],accessor:[18,133,134],accord:265,across:18,act:266,action:[18,27,49,52,136,137,278],action_typ:330,actiontyp:[76,346],activ:[252,292],active_info:[18,22],activeanalysisinfo:[18,346],actual:[18,287],adc:223,add:[4,18,139,174,180,182,184,189,190,223,252,265,268,271,287],add_act:278,add_analysis_completion_ev:18,add_analysis_opt:18,add_auto_sect:18,add_auto_seg:18,add_branch:146,add_carri:223,add_entry_point:18,add_funct:18,add_input:292,add_integer_token:146,add_label_for_address:223,add_label_list:[223,252],add_operand_list:[223,252],add_outgoing_edg:[139,141],add_related_platform:274,add_repositori:287,add_stack_var_reference_token:146,add_symbol_token:146,add_undo_act:18,add_user_sect:18,add_user_seg:18,added:[4,18,21,223,235,252,255,287],adding:18,addit:[4,5,18,139],addition:[18,27,49,174,175],addr:[4,8,18,30,48,146,207,209,223,252,274,292,310,324],address:[4,18,27,35,36,49,51,53,146,150,156,174,175,191,194,223,252,278,310,324],address_s:[4,18,146],addressdisplaytoken:[53,76,146,156],addressfield:[174,194,346],addressformfield:76,addressplugincommand:76,addressrang:[18,278,346],adjust:[146,223,310],advancedfunctionanalysisdatarequestor:[146,346],after:[18,139,146,223],afterward:18,aggreg:18,alertlog:[76,171,210,213],alia:[18,62,174,194,223,252,292],align:[18,310],all:[4,5,18,27,49,139,141,146,174,204,210,211,223,252,265,269,272,273,274,275,287,290,346],allocated_rang:18,allow:[12,18,27,49,139,141],along:18,alpha:[172,173],alreadi:[18,27,49],alreadyuptod:76,also:[18,27,49,265,266,271,273],altern:310,altnam:310,alwai:[4,18],always_branch:[4,18],alwaysskipfunctionanalysi:76,alwaysskipreason:76,ambigu:18,analysi:[14,18,21,27,49,136,139,146,223,252],analysis_chang:[18,136],analysis_info:18,analysis_performance_info:146,analysis_progress:18,analysis_skip:146,analysis_skip_overrid:146,analysis_skip_reason:146,analysis_tim:[18,19,22],analysisact:76,analysiscompletionev:[18,346],analysisinfo:[18,346],analysisprogress:[18,346],analysisskipreason:[76,346],analysisst:[76,346],analyz:[4,18,52,136,137],analyzest:76,and_expr:223,ani:[18,70,252,272,273,274,292,332,338],annot:14,annotationtoken:[53,76,146,156],answer:223,anyth:18,api:[0,1,2,3,18,139,141,174,175,191,192,193,194,195,196,197,198,201,202,203,205,206,287],append:[4,18,139,141,174,210,218,223,235,252,255,310],appli:[18,146],applic:[18,70,174,201,202,203,206],apply_auto_discovered_typ:146,apply_imported_typ:146,appropri:[174,204,301],arbitrari:[4,18,31,136,146],arch:[4,5,8,14,18,39,40,56,57,58,146,154,161,164,169,223,224,225,226,227,228,229,235,252,255,274,275,310],architectur:[14,18,56,58,59,146,223,345,346],architecturehook:[4,346],architectureplugintyp:[76,287],are_auto_updates_en:[332,346],aren:223,arg:[10,17,37,41,46,60,61,72,73,145,168,200,243,260,263,264,276,285,291,292,298,303,304,308,328,329,340,346],arg_c:18,arg_regs_share_index:39,argument:[9,12,13,31,45,70,146,265,267,269,278,292,310],argumentnametoken:[53,76,146,156],argumenttypetoken:[53,146,156],arith_shift_right:223,arithmat:223,arithmet:18,armv7:[4,5],armv7eb:[4,5],arrai:[174,176,192,310],arraydatatyp:76,arraytypeclass:76,asciistr:[18,76],asr:223,assembl:[4,5,223],assign:[223,252],associ:[18,136,139,146],asynchron:[18,21],atexit:346,attempt:18,attr:[174,176],attribut:[5,6,7,9,15,18,20,26,27,28,29,32,33,34,35,40,45,49,52,54,64,65,67,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,137,140,141,143,144,147,149,151,152,226,227,233,235,236,253,255,256,262,267,268,270,271,273,275,279,280,281,283,288,289,290,293,294,295,297,306,312,316,322,324,325,331,333],auto:[18,27,49,136,146,310,332,336,341],auto_defin:[18,146,153],auto_discov:[18,30],auto_type_sourc:274,automat:[14,18,27,49,139,146,274],avail:[18,27,49,223,252,332],available_view_typ:18,avoid:136,aw4foo:[18,56,58,59],back:[18,136,223,252,265,267],back_edg:[14,16,139,142],background:[18,27,49,278],backgroundtask:[278,346],backgroundtaskthread:[278,346],bar:[18,274,278],bas:274,base64:305,base64_decod:42,base64_encod:42,base:[4,9,11,14,18,38,39,42,45,48,62,75,76,133,136,139,146,169,172,174,207,223,236,252,256,261,265,266,274,277,278,286,287,292,300,301,305,309,310,330,332,343,346],base_arch:[4,6],base_confid:310,basic:[14,18,139,146,223,252,301],basic_block:[18,139,146,223,252],basicblock:[18,146,223,252,346],basicblockedg:[14,346],basicblocksl:301,bbbb:18,bbbbaaaa:18,becaus:31,been:[18,136,139,278,287,332,339],befor:[18,139],begin:[18,27,49,292],begin_undo_act:[18,136],beginmemoryoperandtoken:[53,76,146,156],behavior:346,being:[18,52,136,137,139,223,236,252,256,287],belong:4,below:[265,267],between:[18,27,49,146,223],big:18,bigendian:[18,26,29,76],bin:[18,26,27,29,36,49],binari:[4,14,18,26,27,29,36,49,52,136,137,223,274,275,310,324],binarycodectransform:76,binarydatanotif:[18,346],binarydatanotificationcallback:[18,346],binarydisplaytyp:76,binaryencodetransform:76,binaryninja:[0,1,2,3,4,14,18,62,76,133,139,146,223,252,278,287,292,310,346],binaryread:[18,29,346],binaryview:[4,136,174,202,203,278,310,324,345,346],binaryviewplugintyp:[76,287],binaryviewtyp:[18,26,27,29,36,49,346],binarywrit:[18,346],bind:[310,324],binja:274,bit:[223,265,268],bitwis:223,blackhighlightcolor:76,blanklinetyp:76,block:[14,18,139,146,207,208,209,223,252,292,301],block_siz:18,blue:[14,139,146,172,173],bluehighlightcolor:[14,76,139,146],bndb:[18,52,136,137],bninitui:346,bninstructiontexttoken:146,bnloadpluginforapi:346,bnloglevel:345,bodi:[174,204],bookmark:287,bool:[4,18,210,218,252,301,310,332,336,339,341],booleandatatyp:76,booltypeclass:76,boolwithconfid:[310,346],borrow:223,both:[18,174,194],bottom:139,box:[174,192,204],branch:[4,18,146,223,252,287],branch_depend:252,branch_instr:252,branch_typ:[14,16,139,142,146,154],branchtyp:[4,76,139,141,346],breakpoint:223,bsd:287,build:346,build_open:346,built:266,builtin:[265,267],bundl:346,bundled_plugin_path:346,button:[174,204],cadefault:74,cafil:74,calcul:18,call:[4,12,13,18,27,49,139,146,207,209,223,235,252,255,272,273,274,275,278,310],call_stack_adjust:223,callabl:[18,139,266,292],callback:[18,21,62,139,143,332,346],calldestin:[4,76],calle:18,callee_saved_reg:39,caller_saved_reg:39,calling_convent:[4,146,274,310],callingconvent:[4,274,310,346],callingconventionnam:[76,346],can:[4,9,14,18,26,27,29,36,45,49,136,139,141,146,174,175,194,223,235,252,255,266,272,273,278,287,288,310],can_cancel:[278,279,280],can_exit:14,can_return:[146,310],cancel:[18,278],cancel_script_input:292,cancelbutton:76,cannot:[0,1,2,3,272,273],capath:74,care:[265,269],carray08:305,carraya16:305,carraya32:305,carraya64:305,carrayb16:305,carrayb32:305,carrayb64:305,carri:[223,252],carryflagrol:76,caus:[18,146],cdecl:274,cdecl_calling_convent:274,cdeclcallingconvent:76,ceil:223,chang:[18,76,136],channel:[332,335],charact:[174,198],characterconstantdisplaytyp:76,characterconstanttoken:[53,76,146,156],check:[4,18,223,265,269,287,332,337],check_for_upd:287,child:14,chilidog:[210,221],choic:[174,176,192,194],choice_f:[174,194],choicefield:[174,194,346],choiceformfield:76,choos:[174,176,192],chunk:18,class_index:4,classmethod:[14,18,48,136,146,169,278,310,330],classnamedtypeclass:76,classstructuretyp:76,claus:136,cleanli:346,clear_indirect_branch:223,clobbered_reg:146,close:[52,136,137,146,210,211,346],close_log:[210,346],clrcallcallingconvent:76,cmd:[278,283],code:[4,18,27,49,292,310,324],code_ref:18,codedisassemblylinetyp:76,coderelativeaddresstoken:[53,76,146,156],codesymboltoken:[53,76,146,156],coher:[287,290],color:[14,51,139,146,150,172,173],com:287,combin:223,combo:[174,192],comma:[53,146,156],command:[18,174,175,184,191,192,193,194,195,196,197,198,202,203,205],comment:146,commit:[18,136],commit_undo_act:[18,136],commun:287,communitypluginorigin:76,compare_equ:223,compare_not_equ:223,compare_signed_greater_equ:223,compare_signed_greater_than:223,compare_signed_less_equ:223,compare_signed_less_than:223,compare_unsigned_greater_equ:223,compare_unsigned_greater_than:223,compare_unsigned_less_equ:223,compare_unsigned_less_than:223,comparison:[223,252],compat:[4,10,17,37,41,61,73,145,146,168,200,243,260,264,276,285,291,298,304,308,329,340,346],complement:223,complet:[18,21,139,174,190,287],complete_layout:139,completionev:18,complex:[265,271,346],compon:[53,146,156,265],comput:[4,139,223,252],concis:18,concret:266,cond:[4,223],condit:[4,223,252],confid:[39,40,53,54,146,156,160,164,310,311,318,319,320,321,325],configur:[174,204],confus:4,conjug:[265,267],connect:139,consid:[18,27,49,266],consol:[55,171,174,204,210,213,214,215,216,217,221,345],const_nam:4,const_point:223,constant:[4,18,146,223,252],constant_ptr:146,constantpointervalu:76,constantrefer:[146,346],constantvalu:76,constructor:292,constructornametyp:76,contain:[4,14,18,139,174,194,198,207,209,223,235,252,255,274,275,287,346],content:[18,42,43,174,179,183,186,199,202,203,205,207,208,252],context:[4,5,18,26,29,48,50,53,74,146,156,278],control:[139,141],conveni:[18,26,29,36],convent:[4,18,27,49,146,274,275,310],convers:[9,45,265,267,268,271],convert:[4,9,18,45,146,174,199,223],convert_to_nop:[4,18,136],coordin:139,copy_valu:301,copyconstructorclosurenametyp:76,core:[53,146,156,346],core_build_id:346,core_expir:346,core_license_count:346,core_product:346,core_product_typ:346,core_seri:346,core_ui_en:346,core_vers:346,corearchitectur:[4,346],corefileaccessor:[133,346],coreflowgraph:[139,346],coreplugintyp:[76,287],correctli:[139,141],correspond:[4,18,146,223],could:18,count:[18,23,146,244,248,310,346],cpu:[4,5],creat:[4,11,18,38,52,70,75,136,137,139,141,266,277,286,287,288,300,309,310,343,346],create_auto_stack_var:146,create_auto_var:146,create_databas:[18,136],create_graph:[146,223,252],create_inst:[62,292],create_user_funct:18,create_user_stack_var:146,create_user_var:146,cross:18,cstr:346,ctxt:[48,332],cur_lin:146,current:[4,14,18,136,139,141,146,174,175,207,209,223,252,287,310,324,346],current_address:[18,174,175,223,252],current_basic_block:14,current_funct:146,custom:[18,139,141],customhighlightcolor:76,cyanhighlightcolor:76,data:[4,18,26,27,29,36,49,74,136,146,169,174,194,223,252,292,305,310,324],data_end:18,data_insert:18,data_length:18,data_offset:18,data_ref:18,data_refs_from:18,data_remov:18,data_var:18,data_var_ad:18,data_var_remov:18,data_var_upd:18,data_written:18,databas:[14,18,27,49,52,136,137,146],databuff:346,databufferobject:18,dataflow:223,datamodificationact:76,datamodificationandanalysisact:76,datarend:346,datarender:[48,346],datasymbol:[76,310,324],datasymboltoken:[53,76,146,156],datavari:[18,346],datavariablelinetyp:76,datavariabletokencontext:76,datavariabletypetoken:[53,146,156],date:287,debug:[171,210,213,215],debuglog:[55,76,171,210,213,214,215,216,220,221],decim:18,declar:273,decod:[4,305],decodetransform:76,decor:[12,13,272,273],def:[18,21,272,273],default_calling_convent:274,default_int_s:4,default_nam:[18,174,177,188,193,197],default_repositori:287,default_valu:4,defaultconstructorclosurenametyp:76,defaultfunctionanalysisskip:76,defaultintegerdisplaytyp:76,defaultplugincommand:76,defaultsectionsemant:[18,76],defin:[12,18,27,49,146,265,266,267,273,310,324,327],define_auto_symbol:18,define_auto_symbol_and_var_or_funct:18,define_data_var:18,define_imported_funct:18,define_typ:18,define_user_data_var:18,define_user_symbol:18,define_user_typ:18,definit:274,delete_auto_stack_var:146,delete_auto_var:146,delete_user_stack_var:146,delete_user_var:146,demangl:346,demangle_gnu3:[56,346],demangle_m:[56,59,346],demangled_nam:[56,58],denomin:[265,270],depend:[18,27,49,223,252],deprec:[4,146],derefer:18,deriv:[265,271,272,273],desc:[332,333],descend:266,describ:[139,141,265,267,301],descript:[4,53,146,156,171,210,213,223,235,278,287,301,310,324],design:[139,141],desir:[18,27,49,139],dest:[18,223,252],dest_addr:[146,153],dest_arch:[146,153],dest_memori:[223,252],dest_registry_id:301,destin:[4,18,223,236,252,256],destructornametyp:76,detail:[18,265],determin:[4,18,252,278],dialog:[174,194],dict:[4,18,146,278],dictionari:[18,31,136,146],differ:[18,146,174,175,191,192,193,195,196,197,198,202,203,205],direct:[139,141],directli:[4,18,27,49,207,209,223,234,252,254,266],directori:[174,177,193,194,274,310,327,346],directorynamefield:[174,194,346],directorynameformfield:76,dirnam:[174,193],disabl:[287,288,289,290,332,336,341],disable_plugin:287,disallow:18,disassembl:[4,5,18,27,49,53,146,156,207,209,223],disassemblest:76,disassembly_text:14,disassemblyopt:[76,346],disassemblyset:[14,18,146,346],disassemblytextlin:[14,146,346],disassemblytextrender:[146,346],discov:[18,146],disjoint:[139,141],disk:[18,287],displai:[18,139,174,182,189,193,196,197,201,202,203,204,205,206,278],display_typ:146,disregard:[174,175],distinct:[18,27,49],div:223,div_double_prec_sign:223,div_double_prec_unsign:223,div_sign:223,div_unsign:223,divid:223,divmod:[265,271],divu:223,document:[4,5,18,26,27,29,49,265],doe:[18,27,49,139,146,223],doesn:[4,18,53,146,156,174,202,203,265,267],domin:14,dominance_fronti:14,dominator_tree_children:14,done:[4,18,27,49,136,278],doubl:[18,223],doubledatatyp:76,down:[18,346],download:[332,339],downloadinst:[62,346],downloadprovid:346,doxygenclass:[0,1,3],doxygenenum:2,doxygenfunct:2,dure:18,dword:18,dynam:346,eabicallcallingconvent:76,each:[18,21,139,146,287],earlypluginloadord:76,easier:223,eax:[4,18,136,223,236,252,256],ebp:18,edg:[14,139,141],edge_typ:139,edit:[18,27,49],editor:[18,27,49],effect:[174,201,206],ehvectorconstructoriteratornametyp:76,ehvectordestructoriteratornametyp:76,ehvectorvbaseconstructoriteratornametyp:76,eight:18,either:[4,18,27,49],elabor:18,element_typ:310,elf64_head:[18,36],elf:[4,18,27,36,49],elf_reloc_copi:4,elfcopyrelocationtyp:76,elfglobalrelocationtyp:76,elfjumpslotrelocationtyp:76,elimin:223,els:[53,146,156],emit:4,empti:[4,18],emul:223,enabl:[278,287,288,289,290,301,332,336,341],enable_plugin:287,enabled_plugin:[287,290],enclos:18,encod:305,encrypttransform:76,end:[14,18,20,53,146,156,166,223,252,292],endian:[4,18,26,29,76,346],endmemoryoperandtoken:[53,76,146,156],ensur:18,entri:[18,146,223],entropi:18,entry_funct:18,entry_point:18,entry_s:18,entry_valu:146,entryvalu:76,enumer:[287,310,346],enumeration_typ:310,enumerationmemb:[310,346],enumerationtypeclass:76,enumnamedtypeclass:76,environ:[274,275],eof:18,equal:[223,235],equival:18,error:[4,18,55,56,58,171,210,213,216,219,274,292],error_str:[310,327],erroricon:76,errorlog:[76,171,210,213],escap:42,escape_str:[42,346],esi:18,esp:18,etc:287,eval:18,evalu:[18,223,252],even:266,evenparityflagrol:76,event:[18,21],ever:18,evt:[18,21],exampl:[4,14,18,21,55,56,58,59,136,139,141,146,174,191,192,193,194,195,196,197,198,199,202,203,205,210,214,215,216,217,220,221,274,287,301,310,327],exceedfunctionanalysistimeskipreason:76,exceedfunctionsizeskipreason:76,exceedfunctionupdatecountskipreason:76,except:69,exe:[174,196,197],execut:[12,13,18,27,49,174,191,192,195,198,274,275,278,292],execute_on_main_thread:[244,346],execute_on_main_thread_and_wait:[244,346],execute_script_input:292,exist:[4,18,27,49,278,310,324,346],exit:[12,13,223],exmapl:18,expandlongopcod:76,expir:346,explicitli:[18,27,49,146],explicitly_defined_typ:146,expr:[18,223,252],expr_index:[223,236,252,256],expr_list:[223,252],expr_typ:252,express:[18,223,234,252,254],ext:[174,185,188,196,197],extend:[146,162,223],extendedanalyzest:76,extens:[174,196,197],extent:139,extern:[18,27,49],external_namespac:18,externalpointervalu:76,externalsectionsemant:76,externalsymbol:[76,310,324],externalsymboltoken:76,fab:223,facilit:[12,13],fadd:223,failur:[4,18,301,346],fall:[18,265,267],fall_through:[14,16],fals:[4,18,39,74,146,210,218,223,252,278,279,280,287,301,310,332,336,339,341],falsebranch:[4,76],falsebranchdepend:76,fastcal:274,fastcall_calling_convent:274,fastcallcallingconvent:76,fconvert:223,fdiv:223,fetch:223,ff00ff:146,field:[174,184,194],fieldnametoken:76,file:[0,1,2,3,18,27,49,52,136,137,174,185,188,193,194,196,197,210,211,218,274,287,290,346],file_metadata:[18,27,49],fileaccessor:346,filemetadata:346,filenam:[18,52,136,137,174,196,197,274,310,327],fill:265,find:[0,1,2,3],find_next_const:18,find_next_data:18,find_next_text:18,findcaseinsensit:76,findcasesensit:[18,76],findflag:[18,76,346],finish:[18,27,49,139,146,278],finish_prepare_for_layout:139,first:[18,223],fit:[53,146,156],fix:[139,141],fixed_length:[305,307],flag:[4,18,39,146,210,218,223,224,239,252],flag_bit:223,flag_condit:[223,235],flag_conditions_for_semantic_flag_group:4,flag_group:223,flag_rol:4,flag_ssa:223,flag_ssa_list:223,flag_write_typ:4,flagrol:[4,76,346],flags_required_for_flag_condit:4,flags_required_for_semantic_flag_group:4,flags_written_by_flag_write_typ:4,flagvariablesourcetyp:76,flexibl:[174,194],float_ab:223,float_add:223,float_arg_reg:39,float_compare_equ:223,float_compare_greater_equ:223,float_compare_greater_than:223,float_compare_less_equ:223,float_compare_less_than:223,float_compare_not_equ:223,float_compare_unord:223,float_const_doubl:223,float_const_raw:223,float_const_singl:223,float_convert:223,float_div:223,float_mult:223,float_neg:223,float_return_reg:39,float_sqrt:223,float_sub:223,float_to_int:223,float_trunc:223,floatingpointtoken:[53,76,146,156],floattypeclass:76,floor:223,flow:[139,141,146,174,201,223,252],flowgraph:[174,201,346],flowgraphedg:[139,346],flowgraphlayoutrequest:[139,346],flowgraphnod:[139,141,346],flowgraphreport:[174,346],flowgraphreporttyp:76,fmul:223,fneg:223,focus:[55,171,210,213,216],follow:[4,5,18,26,27,29,36,49,174,194,310,324],foo:[18,56,58,174,196,197,274],foobar:[18,56,58,59],form:[223,252,273,301],format:[18,27,36,49],forminputfieldtyp:[76,346],found:[4,18],four:18,friendli:301,friendscop:76,from:[4,5,9,18,26,29,36,45,70,139,141,146,174,176,192,194,223,252,265,269,272,273,287,292,346],from_identifi:146,from_valu:[146,159],frontier:14,fsub:223,ftp:70,full:[4,18,287,310],full_nam:[310,324],full_path:287,full_reg:223,full_width_reg:[4,146,162],func:[4,8,12,13,18,19,39,146,147,151,167,169,207,208,209,223,236,244,245,246,249,250,251,252,256,292,332,334],func_typ:146,funcobj:272,function_ad:18,function_remov:18,function_typ:146,function_upd:18,function_update_request:18,functionanalysisskipoverrid:[76,346],functionattributetoken:[53,146,156],functioncontinuationlinetyp:76,functionendlinetyp:76,functiongraphtyp:[76,146,346],functionheaderendlinetyp:76,functionheaderlinetyp:76,functionheaderstartlinetyp:76,functionparamet:[310,346],functionplugincommand:76,functionrecogn:346,functionreturn:[4,76],functionreturntokencontext:76,functionreturntypetoken:[53,146,156],functionsymbol:[18,76,310,324],functiontypeclass:76,further:18,futur:[139,141],gener:[10,17,18,37,41,61,73,145,146,168,171,200,210,213,217,223,243,252,260,264,274,276,285,291,298,304,308,329,340,346],generate_auto_demangled_type_id:310,generate_auto_demangled_type_ref:310,generate_auto_platform_type_id:274,generate_auto_platform_type_ref:274,generate_auto_type_id:[18,310],generate_auto_type_ref:310,get:[4,14,18,56,59,136,139,146,174,194,223,252,287],get_address_for_data_offset:18,get_address_input:[18,174,346],get_arch:18,get_associated_arch_by_address:4,get_associated_platform_by_address:274,get_auto_demangled_type_id_sourc:310,get_auto_platform_type_id_sourc:274,get_basic_block_at:146,get_basic_blocks_at:18,get_basic_blocks_starting_at:18,get_block_annot:146,get_bool:301,get_bool_with_scop:301,get_branch_depend:252,get_call_reg_stack_adjust:146,get_call_reg_stack_adjustment_for_reg_stack:146,get_call_stack_adjust:146,get_choice_input:[174,346],get_code_ref:18,get_comment_at:146,get_constants_referenced_bi:146,get_data_ref:18,get_data_refs_from:18,get_data_var_at:18,get_default_flag_condition_low_level_il:4,get_default_flag_write_low_level_il:4,get_dict:261,get_directory_name_input:[174,346],get_disassembl:[18,136],get_disassembly_text:[14,146],get_doubl:301,get_double_with_scop:301,get_entropi:18,get_flag_by_nam:4,get_flag_condition_low_level_il:4,get_flag_index:4,get_flag_nam:4,get_flag_rol:4,get_flag_valu:[223,252],get_flag_value_aft:[223,252],get_flag_write_low_level_il:4,get_flag_write_type_by_nam:4,get_flag_write_type_nam:4,get_flags_read_by_lifted_il_instruct:146,get_flags_required_for_flag_condit:4,get_flags_written_by_lifted_il_instruct:146,get_form_input:[174,346],get_from_input:[174,194],get_function_at:18,get_function_by_nam:274,get_functions_at:18,get_functions_contain:18,get_incoming_flag_valu:39,get_incoming_reg_valu:39,get_incoming_var_for_parameter_var:39,get_indirect_branches_at:146,get_install_directori:346,get_instr_highlight:146,get_instruction_annot:146,get_instruction_info:4,get_instruction_length:18,get_instruction_lin:146,get_instruction_low_level_il:4,get_instruction_low_level_il_instruct:4,get_instruction_start:[223,252],get_instruction_text:[4,146],get_int_display_typ:146,get_int_input:[174,346],get_integ:301,get_integer_with_scop:301,get_intrinsic_index:4,get_intrinsic_nam:4,get_iterated_dominance_fronti:14,get_label_for_address:223,get_length:133,get_lifted_il_at:146,get_lifted_il_flag_definitions_for_us:146,get_lifted_il_flag_uses_for_definit:146,get_linear_disassembl:18,get_linear_disassembly_position_at:[18,207,209],get_low_level_il_at:[4,146],get_low_level_il_exits_at:146,get_low_level_il_expr_index:252,get_low_level_il_from_byt:4,get_low_level_il_instruction_index:252,get_mapped_medium_level_il_expr_index:223,get_mapped_medium_level_il_instruction_index:223,get_medium_level_il_expr_index:223,get_medium_level_il_instruction_index:223,get_modif:18,get_modified_regs_on_writ:4,get_next_basic_block_start_aft:18,get_next_data_aft:18,get_next_data_var_aft:18,get_next_disassembl:18,get_next_function_start_aft:18,get_next_linear_disassembly_lin:18,get_nodes_in_region:139,get_non_ssa_instruction_index:[223,252],get_open_filename_input:[174,346],get_parameter_at:146,get_parameter_at_low_level_il_instruct:146,get_parameter_var_for_incoming_var:39,get_platform:18,get_possible_flag_valu:[223,252],get_possible_flag_values_aft:[223,252],get_possible_reg_valu:[223,252],get_possible_reg_values_aft:[223,252],get_possible_stack_cont:[223,252],get_possible_stack_contents_aft:[223,252],get_previous_basic_block_end_befor:18,get_previous_basic_block_start_befor:18,get_previous_data_befor:18,get_previous_data_var_befor:18,get_previous_function_start_befor:18,get_previous_linear_disassembly_lin:18,get_qualified_nam:[56,346],get_recent_basic_block_at:18,get_recent_function_at:18,get_reg_index:4,get_reg_nam:4,get_reg_stack_for_reg:4,get_reg_stack_index:4,get_reg_stack_nam:4,get_reg_valu:[223,252],get_reg_value_aft:[146,223,252],get_reg_value_at:146,get_reg_value_at_exit:146,get_regs_read_bi:146,get_regs_written_bi:146,get_related_platform:274,get_save_filename_input:[174,346],get_schema:301,get_section_by_nam:18,get_sections_at:18,get_segment_at:18,get_selected_data:292,get_semantic_flag_class_by_nam:4,get_semantic_flag_class_index:4,get_semantic_flag_class_nam:4,get_semantic_flag_group_by_nam:4,get_semantic_flag_group_index:4,get_semantic_flag_group_low_level_il:4,get_semantic_flag_group_nam:4,get_ssa_flag_definit:223,get_ssa_flag_us:223,get_ssa_flag_valu:223,get_ssa_instruction_index:[223,252],get_ssa_memory_definit:[223,252],get_ssa_memory_us:[223,252],get_ssa_reg_definit:223,get_ssa_reg_us:223,get_ssa_reg_valu:223,get_ssa_var_definit:252,get_ssa_var_possible_valu:252,get_ssa_var_us:252,get_ssa_var_valu:252,get_ssa_var_vers:252,get_stack_cont:[223,252],get_stack_contents_aft:[146,223,252],get_stack_contents_at:146,get_stack_var_at_frame_offset:146,get_stack_vars_referenced_bi:146,get_str:[18,301],get_string_after_nam:310,get_string_before_nam:310,get_string_list:301,get_string_list_with_scop:301,get_string_with_scop:301,get_symbol:18,get_symbol_at:18,get_symbol_by_raw_nam:18,get_symbols_by_nam:18,get_symbols_of_typ:18,get_system_call_nam:274,get_system_call_typ:274,get_text_line_input:[174,346],get_time_since_last_update_check:[332,346],get_token:310,get_tokens_after_nam:310,get_tokens_before_nam:310,get_type_by_id:18,get_type_by_nam:[18,274],get_type_id:18,get_type_name_by_id:18,get_type_token:146,get_unique_identifi:346,get_unique_section_nam:18,get_valid_list:278,get_var_definit:252,get_var_for_flag:252,get_var_for_reg:252,get_var_for_stack_loc:252,get_var_us:252,get_variable_by_nam:274,get_view_of_fil:18,get_view_of_typ:[18,136],get_view_type_const:4,get_worker_thread_count:[244,346],getcurrentthreadid:18,getinfo:[174,191,195,198],getter:[18,274],getx:273,git:287,github:287,given:[4,9,18,27,45,49,146,171,174,191,194,195,198,210,213,223,252,265,267,274,287,310,327],global:[18,146],global_pointer_reg:39,global_pointer_valu:[18,146],global_reg:4,globalbind:76,gplv2:287,graph:[18,139,141,143,144,146,174,178,201],graph_typ:146,greater:[223,235],green:[14,146,172,173],greenhighlightcolor:76,group:[4,223,301,305],group_index:4,grouplineardisassemblyfunct:76,guarante:[18,27,49],gui:[55,210,214,216,221],halfcarryflagrol:76,halt:223,hand:[223,236,252,256],handl:[4,7,14,15,18,27,28,32,33,39,40,42,43,49,52,54,62,63,64,67,136,137,139,140,141,144,146,149,151,152,174,187,223,233,235,237,252,253,255,257,261,262,274,275,278,279,281,287,288,289,290,292,294,295,297,305,306,310,312,316,322,324,325],handler:70,happen:139,has:[4,5,14,18,136,139,146,272,273,278,287,310,332,339,346],has_auto_annot:146,has_data_flow:146,has_databas:[18,136],has_funct:18,has_nod:139,has_undetermined_outgoing_edg:14,has_variable_argu:[146,310],hashtransform:76,have:[18,27,49,136,139,141,174,201,206,265,267,310],header:274,headlessli:346,height:139,held:18,help:[5,6,7,8,9,15,16,18,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,40,43,45,49,50,51,53,54,63,64,66,67,68,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,134,135,138,140,141,142,143,144,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,170,173,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,208,209,224,225,226,227,228,229,233,234,235,236,237,238,239,240,241,242,253,254,255,256,257,258,259,262,266,267,268,269,270,271,273,275,279,280,281,282,283,284,288,289,290,293,294,295,296,297,302,306,307,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,331,333,334,335],helper:[18,146,207,209,223,234,252,254],here:[18,146],heterogen:[265,267],hex:[18,26,27,49],hexadecim:[18,174,175],hexdump:305,hexdumpbytevaluetoken:[53,76,146,156],hexdumpinvalidbytetoken:[53,76,146,156],hexdumplinetyp:76,hexdumpskippedbytetoken:[53,76,146,156],hexdumptexttoken:[53,76,146,156],high:[223,252],high_int_return_reg:39,highlight:[14,139,146,346],highlightcolor:[14,146,172,346],highlightcolorstyl:[76,346],highlightstandardcolor:[14,76,139,146,346],hold:[223,234,252,254],horizontal_block_margin:139,hotdog:[210,215,220],howev:[287,288],html:[18,174,199,202],htmlreport:[174,346],htmlreporttyp:76,http:[70,287],hyperlink:[18,174,202,203],iat:18,icon:[55,171,174,204,210,213,216,221],ident:[4,18],identifi:[18,146,301],idlest:76,if_expr:[223,252],ignore_disjoint_us:146,ignoredreloc:76,il_basic_block:[223,252],il_funct:[139,146],il_instr:[51,146,150],ilbranchdepend:[76,346],ilflag:[223,346],ilintrins:[223,346],iloper:[223,252],ilregist:[223,346],ilregisterstack:[223,346],ilsemanticflagclass:[223,346],ilsemanticflaggroup:[223,346],imag:[265,267],imaginari:265,immedi:[14,18],immediate_domin:14,implement:[4,5,18,27,49,139,141,223,266],implicitly_defined_reg:39,implicitregisterextend:[76,146,162,346],import_addr_sym:18,importaddresssymbol:[18,76,310,324],imported_address:146,importedaddressvalu:76,importeddatasymbol:[76,310,324],importedfunctionsymbol:[18,76,310,324],importtoken:[53,76,146,156],in_var:39,inc:18,includ:[70,274,310,327],include_dir:[274,310,327],incom:[14,139,141,146],incoming_edg:14,incompletescriptinput:76,increment:18,index:[0,1,2,3,4,14,139,146,157,162,163,167,174,176,192,223,234,252,254],indic:[272,273,287,346],indirect:146,indirect_branch:146,indirectbranch:[4,76],indirectbranchinfo:[146,346],indirectimporttoken:76,infin:223,infinit:[223,236,252,256],infix:[223,236,252,256],info:[4,223],info_data:18,info_sect:18,infolog:[76,171,210,213,220],inform:[18,139,171,210,213,215,217,274,275],informationicon:[76,174,204],inherit:[265,269],init:18,initi:[5,6,7,8,9,15,16,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,40,43,45,49,50,51,53,54,63,64,66,67,68,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,134,135,138,140,141,142,143,144,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,170,173,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,208,209,224,225,226,227,228,229,233,234,235,236,237,238,239,240,241,242,253,254,255,256,257,258,259,262,266,267,268,269,270,271,273,275,279,280,281,282,283,284,287,288,289,290,293,294,295,296,297,302,306,307,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,331,333,334,335],initial_progress_text:[278,279,280],input:[146,157,174,184,190,191,194,195,198,310,327],input_buf:305,input_ready_st:292,insensit:18,insert:[18,27,31,49,76,310],insetofvalu:76,insid:346,instal:[18,27,49,287,288,289,290,332,338,339,346],install_open:346,install_pending_upd:[332,346],install_plugin:287,instanc:[18,292],instance_class:[62,292],instantan:18,instanti:[18,26,27,29,36,49,52,137,207,209,223,234,252,254,272,273],instead:[4,18,27,49,139,146,174,175,223,234,252,254],instr:[146,223,252],instr_addr:146,instr_align:4,instr_index:[223,236,252,256],instruct:[4,18,53,146,156,223,236,252,256,278],instruction_count:14,instructionbranch:[146,346],instructioninfo:[4,146,346],instructiontexttoken:[4,146,346],instructiontexttokencontext:[53,76,146,156,346],instructiontexttokentyp:[53,76,146,156,346],instructiontoken:[53,76,146,156],int16_t:18,int32_t:[18,274],int_arg_reg:39,int_f:[174,194],int_list:[223,252],int_or_str:4,int_return_reg:39,int_to_float:223,int_token:146,integ:[4,9,18,45,53,56,58,146,156,174,180,191,192,194,195,223,252,265,310],integerdisplaytyp:[76,146,346],integerfield:[174,194,346],integerformfield:76,integertoken:[53,76,146,156],integertypeclass:76,integr:[265,346],intention:18,intenum:[76,287],interact:346,interactionhandl:[174,346],interfac:[18,27,49],intermedi:[146,148,223,236,252,256],intern:[18,53,146,156],internal_namespac:18,interpret:[4,9,45],interpreterthread:292,interrupt:223,intlist08:305,intlista16:305,intlista32:305,intlista64:305,intlistb16:305,intlistb32:305,intlistb64:305,intrins:[4,223,225,252],intrinsicinfo:[146,346],intrinsicinput:[146,346],invalid:18,invaliddatatyp:76,invalidscriptinput:76,invers:[18,136,223],invert:[4,18,223],invert_branch:[4,18],invertingtransform:76,invok:[292,346],is_always_branch_patch_avail:[4,18],is_arrai:261,is_boolean:261,is_call_instruct:146,is_dict:261,is_float:261,is_il:[14,139],is_integ:261,is_integer_token:146,is_invert_branch_patch_avail:[4,18],is_low_level_il:[14,139],is_medium_level_il:[14,139],is_never_branch_patch_avail:[4,18],is_offset_code_semant:18,is_offset_execut:18,is_offset_extern_semant:18,is_offset_read:18,is_offset_writ:18,is_offset_writable_semant:18,is_option_set:146,is_output_redirected_to_log:[210,346],is_raw:261,is_signed_integ:261,is_skip_and_return_value_patch_avail:[4,18],is_skip_and_return_zero_patch_avail:[4,18],is_ssa_var_l:252,is_str:261,is_type_auto_defin:18,is_type_of_struct_nam:48,is_unord:223,is_unsigned_integ:261,is_update_installation_pend:[332,346],is_valid:278,is_valid_for_data:18,is_valid_offset:18,is_view_type_constant_defin:4,isinst:[265,269],isn:4,isprocessorfeaturepres:18,issu:18,issubclass:266,item:[4,146],iter:[4,5,18,27,49],its:[18,139,272,273],jenkin:[0,1,2,3],jge:4,jmp:[4,18],jne:[4,18],jno:4,job:[0,1,2,3,18,27,49],join:278,json:[287,288,290,301],jump:[4,223,252],just:[18,27,49,174,175,265,269],karg:[12,13],keep:[18,21,52,136,137,287,290],kei:[18,27,49],kernel32:18,key_or_index:261,keyvaluedatatyp:76,keyword:[12,13,18,31,292],keywordtoken:76,kielbasa:[210,214],kind:[265,269],knowledg:[265,267],known:[223,252],kwarg:292,kwd:31,label:[174,182,223,252],labelfield:[174,194,346],labelformfield:76,labl:223,languag:[223,236,252,256],larg:146,last:[18,136,332,337],latepluginloadord:76,latest:332,latest_vers:332,layout:139,layout_and_wait:139,leading_spac:146,leak:[136,278],least:[18,27,49,139],leav:139,left:[18,139,223,236,252,256],len:[4,18,27,49],length:[4,14,18,34,133,223,236,252,256],less:[223,235],level:[4,14,146,171,210,213,218,219,220,223,236,252,256,278],lexer:18,lib:[0,1,2,3],licens:[287,346],license_text:287,lifetim:[18,21],lift:[4,5,146],lifted_il:146,liftedilfunctiongraph:76,like:[4,53,146,156],limit:[18,139,141],line:[18,139,141,146,174,175,184,191,192,193,194,195,196,197,198,202,203,205,310,327],line_offset:[207,208],line_typ:[207,208],linear:[18,207,209],linear_disassembl:18,lineardisassembl:346,lineardisassemblyiter:18,lineardisassemblylin:[18,207,346],lineardisassemblylinetyp:[76,346],lineardisassemblyposit:[18,207,346],linearsweep:18,link:[4,18],link_reg:4,linked_sect:18,linux:[0,1,2,3,18],list:[4,5,14,18,27,49,56,59,70,139,146,174,176,192,194,204,223,235,252,255,274,278,287,292,305,310,327,332],listen:292,liter:[9,45],littl:18,littleendian:[4,18,76],live:252,llfc_e:[76,223,235],llfc_fe:76,llfc_fge:76,llfc_fgt:76,llfc_fle:76,llfc_flt:76,llfc_fne:76,llfc_fo:76,llfc_fuo:76,llfc_ne:[76,223,235],llfc_neg:[76,223,235],llfc_no:[76,223,235],llfc_o:[76,223,235],llfc_po:[76,223,235],llfc_sge:[76,223,235],llfc_sgt:[76,223,235],llfc_sle:[76,223,235],llfc_slt:[76,223,235],llfc_uge:[76,223,235],llfc_ugt:[76,223,235],llfc_ule:[76,223,235],llfc_ult:[76,223,235],llil:[18,146,223,236,252],llil_adc:[76,223],llil_add:[76,223],llil_add_overflow:[76,223],llil_and:[76,223],llil_asr:[76,223],llil_basic_block:[18,146],llil_bool_to_int:[76,223],llil_bp:[76,223],llil_cal:[76,223],llil_call_output_ssa:[76,223],llil_call_param:[76,223],llil_call_ssa:[76,223],llil_call_stack_adjust:[76,223],llil_call_stack_ssa:[76,223],llil_ceil:[76,223],llil_cmp_:[76,223],llil_cmp_n:[76,223],llil_cmp_sg:[76,223],llil_cmp_sgt:[76,223],llil_cmp_sl:[76,223],llil_cmp_slt:[76,223],llil_cmp_ug:[76,223],llil_cmp_ugt:[76,223],llil_cmp_ul:[76,223],llil_cmp_ult:[76,223],llil_const:[76,223],llil_const_ptr:[76,223],llil_div:[76,223],llil_divs_dp:[76,223],llil_divu:[76,223],llil_divu_dp:[76,223],llil_extern_ptr:[76,223],llil_fab:[76,223],llil_fadd:[76,223],llil_fcmp_:[76,223],llil_fcmp_g:[76,223],llil_fcmp_gt:[76,223],llil_fcmp_l:[76,223],llil_fcmp_lt:[76,223],llil_fcmp_n:[76,223],llil_fcmp_o:[76,223],llil_fcmp_uo:[76,223],llil_fdiv:[76,223],llil_flag:[76,223],llil_flag_bit:[76,223],llil_flag_bit_ssa:[76,223],llil_flag_cond:[76,223],llil_flag_group:[76,223],llil_flag_phi:[76,223],llil_flag_ssa:[76,223],llil_float_const:[76,223],llil_float_conv:[76,223],llil_float_to_int:[76,223],llil_floor:[76,223],llil_fmul:[76,223],llil_fneg:[76,223],llil_fsqrt:[76,223],llil_fsub:[76,223],llil_ftrunc:[76,223],llil_get_temp_reg_index:[223,346],llil_goto:[76,223],llil_if:[76,223],llil_instruct:[18,146],llil_int_to_float:[76,223],llil_intrins:[76,223],llil_intrinsic_ssa:[76,223],llil_jump:[76,223],llil_jump_to:[76,223],llil_load:[76,223],llil_load_ssa:[76,223],llil_low_part:[76,223],llil_lsl:[76,223],llil_lsr:[76,223],llil_mem_phi:[76,223],llil_mod:[76,223],llil_mods_dp:[76,223],llil_modu:[76,223],llil_modu_dp:[76,223],llil_mul:[76,223],llil_muls_dp:[76,223],llil_mulu_dp:[76,223],llil_neg:[76,223],llil_nop:[76,223],llil_noret:[76,223],llil_not:[76,223],llil_or:[76,223],llil_pop:[76,223],llil_push:[76,223],llil_reg:[76,223],llil_reg_is_temp:[223,346],llil_reg_phi:[76,223],llil_reg_split:[76,223],llil_reg_split_dest_ssa:[76,223],llil_reg_split_ssa:[76,223],llil_reg_ssa:[76,223],llil_reg_ssa_parti:[76,223],llil_reg_stack_abs_ssa:[76,223],llil_reg_stack_dest_ssa:[76,223],llil_reg_stack_free_abs_ssa:[76,223],llil_reg_stack_free_reg:[76,223],llil_reg_stack_free_rel:[76,223],llil_reg_stack_free_rel_ssa:[76,223],llil_reg_stack_phi:[76,223],llil_reg_stack_pop:[76,223],llil_reg_stack_push:[76,223],llil_reg_stack_rel:[76,223],llil_reg_stack_rel_ssa:[76,223],llil_ret:[76,223],llil_rlc:[76,223],llil_rol:[76,223],llil_ror:[76,223],llil_round_to_int:[76,223],llil_rrc:[76,223],llil_sbb:[76,223],llil_set_flag:[76,223],llil_set_flag_ssa:[76,223],llil_set_reg:[76,223],llil_set_reg_split:[76,223],llil_set_reg_split_ssa:[76,223],llil_set_reg_ssa:[76,223],llil_set_reg_ssa_parti:[76,223],llil_set_reg_stack_abs_ssa:[76,223],llil_set_reg_stack_rel:[76,223],llil_set_reg_stack_rel_ssa:[76,223],llil_stor:[76,223],llil_store_ssa:[76,223],llil_sub:[76,223],llil_sx:[76,223],llil_syscal:[76,223],llil_syscall_ssa:[76,223],llil_tailcal:[76,223],llil_tailcall_ssa:[76,223],llil_temp:[223,346],llil_test_bit:[76,223],llil_trap:[76,223],llil_undef:[76,223],llil_unimpl:[76,223],llil_unimpl_mem:[76,223],llil_xor:[76,223],llil_zx:[76,223],llvm:4,load:[4,18,27,49,223,346],local:287,local_refer:287,localbind:76,localrefer:287,localstaticguardnametyp:76,localvariablelinetyp:76,localvariablelistendlinetyp:76,localvariabletoken:76,localvariabletokencontext:76,localvftableconstructorclosurenametyp:76,localvftablenametyp:76,locat:[4,18,223,310,314],log:[55,345,346],log_alert:[210,346],log_debug:[210,220,346],log_error:[210,346],log_info:[210,221,346],log_to_fil:[210,346],log_to_stderr:[210,346],log_to_stdout:[55,210,214,215,216,221,346],log_warn:[210,346],logalert:345,logdebug:345,logerror:345,logic:[18,139,141,223],logical_shift_right:223,loginfo:345,loglevel:[55,76,171,210,213,214,215,216,220,221,346],loglevelnam:[171,210,213],logwarn:345,long_descript:287,long_nam:[18,305,307],look:18,lookup:18,lookuptableentri:[146,346],lookuptablevalu:76,low:[4,14,146,223,236,252,278],low_level_il:[146,252],low_part:223,lowest:[18,265,270],lowlevelil:346,lowlevelilbasicblock:[18,146,223,346],lowlevelilexpr:[4,223,235,346],lowlevelilflagcondit:[4,76,223,235,346],lowlevelilfunct:[4,146,223,234,278,346],lowlevelilfunctiongraph:76,lowlevelilfunctionplugincommand:76,lowlevelilinstruct:[4,146,223,278,346],lowlevelilinstructionplugincommand:76,lowlevelillabel:[223,346],lowleveliloper:[4,76,223,346],lowleveliloperationands:[223,346],lowlevelilssaformfunctiongraph:76,lsl:223,lsr:223,lvaluesuffix:76,mach:[18,26,27,29,36,49],machin:[18,36],made:[4,18],magentahighlightcolor:76,mai:[18,223,292],main:[174,204],mainli:[274,275],maintain:18,mainthread:346,mainthreadact:[278,346],mainthreadactionhandl:[278,346],make:[18,27,49,223,235,252,255],manag:287,mangl:[18,56,58],mangled_nam:[56,57,58],manipul:[18,27,49],map:[18,27,49,223],mapped_medium_level_il:223,mappedmediumlevelilfunctiongraph:76,mappedmediumlevelilssaformfunctiongraph:76,mark_label:[223,252],mark_recent_us:[14,146],markdown:[18,174,199,203],markdown_to_html:[174,346],markdownreport:[174,346],markdownreporttyp:76,master:287,max_function_size_for_analysi:18,max_instr_length:4,max_instruction_length:4,max_symbol_width:146,maximum:18,mayb:[174,192,194],mean:[9,18,27,45,49],mechan:[18,21,272,273],medium:[14,146,223,252,256,278],medium_level_il:[146,223],mediumlevelil:346,mediumlevelilbasicblock:[18,146,252,346],mediumlevelilexpr:[252,255,346],mediumlevelilfunct:[252,254,278,346],mediumlevelilfunctiongraph:76,mediumlevelilfunctionplugincommand:76,mediumlevelilinstruct:[252,278,346],mediumlevelilinstructionplugincommand:76,mediumlevelillabel:[252,346],mediumleveliloper:[76,252,346],mediumleveliloperationands:[252,346],mediumlevelilssaformfunctiongraph:76,member:[18,36,223,234,252,254,310],memberaccess:[76,346],memberscop:[76,346],memori:[4,18,27,49,53,146,156,223,252,278],messag:[55,171,174,204,210,213,214,215,216,217,221],messageboxbuttonresult:[76,174,204,346],messageboxbuttonset:[76,174,204,346],messageboxicon:[76,174,204,346],meta:[11,38,75,277,286,300,309,343,346],metaclass:[4,5,11,38,75,266,272,273,277,286,300,309,343,346],metadata:[18,346],metadatatyp:[76,346],method:[4,5,6,7,8,9,15,16,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,40,43,45,49,50,51,52,53,54,63,64,65,66,67,68,134,135,137,139,140,141,142,143,144,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,170,173,175,176,177,178,179,180,181,182,183,184,185,186,187,188,190,208,209,223,224,225,226,227,228,229,233,234,235,236,237,238,239,240,241,242,252,253,254,255,256,257,258,259,262,266,267,268,270,271,272,273,275,279,280,281,282,283,284,288,289,290,292,293,294,295,296,297,302,306,307,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,331,333,334,335],mgr:287,microsoft:[56,58],millisecond:18,min_level:[210,218,219,220],minimum:[139,210,218,219,220,287],minimum_vers:287,mips32:[4,5],mipsel32:[4,5],mit:287,mix:[172,173,266],mix_color:[172,173],mixedhighlightcolor:76,mlil:[18,146,223,252,256],mlil_adc:[76,252],mlil_add:[76,252],mlil_add_overflow:[76,252],mlil_address_of:[76,252],mlil_address_of_field:[76,252],mlil_and:[76,252],mlil_asr:[76,252],mlil_basic_block:[18,146],mlil_bool_to_int:[76,252],mlil_bp:[76,252],mlil_cal:[76,252],mlil_call_output:[76,252],mlil_call_output_ssa:[76,252],mlil_call_param:[76,252],mlil_call_param_ssa:[76,252],mlil_call_ssa:[76,252],mlil_call_untyp:[76,252],mlil_call_untyped_ssa:[76,252],mlil_ceil:[76,252],mlil_cmp_:[76,252],mlil_cmp_n:[76,252],mlil_cmp_sg:[76,252],mlil_cmp_sgt:[76,252],mlil_cmp_sl:[76,252],mlil_cmp_slt:[76,252],mlil_cmp_ug:[76,252],mlil_cmp_ugt:[76,252],mlil_cmp_ul:[76,252],mlil_cmp_ult:[76,252],mlil_const:[76,252],mlil_const_ptr:[76,252],mlil_div:[76,252],mlil_divs_dp:[76,252],mlil_divu:[76,252],mlil_divu_dp:[76,252],mlil_extern_ptr:[76,252],mlil_fab:[76,252],mlil_fadd:[76,252],mlil_fcmp_:[76,252],mlil_fcmp_g:[76,252],mlil_fcmp_gt:[76,252],mlil_fcmp_l:[76,252],mlil_fcmp_lt:[76,252],mlil_fcmp_n:[76,252],mlil_fcmp_o:[76,252],mlil_fcmp_uo:[76,252],mlil_fdiv:[76,252],mlil_float_const:[76,252],mlil_float_conv:[76,252],mlil_float_to_int:[76,252],mlil_floor:[76,252],mlil_fmul:[76,252],mlil_fneg:[76,252],mlil_free_var_slot:[76,252],mlil_free_var_slot_ssa:[76,252],mlil_fsqrt:[76,252],mlil_fsub:[76,252],mlil_ftrunc:[76,252],mlil_goto:[76,252],mlil_if:[76,252],mlil_import:[76,252],mlil_instruct:[18,146],mlil_int_to_float:[76,252],mlil_intrins:[76,252],mlil_intrinsic_ssa:[76,252],mlil_jump:[76,252],mlil_jump_to:[76,252],mlil_load:[76,252],mlil_load_ssa:[76,252],mlil_load_struct:[76,252],mlil_load_struct_ssa:[76,252],mlil_low_part:[76,252],mlil_lsl:[76,252],mlil_lsr:[76,252],mlil_mem_phi:[76,252],mlil_mod:[76,252],mlil_mods_dp:[76,252],mlil_modu:[76,252],mlil_modu_dp:[76,252],mlil_mul:[76,252],mlil_muls_dp:[76,252],mlil_mulu_dp:[76,252],mlil_neg:[76,252],mlil_nop:[76,252],mlil_noret:[76,252],mlil_not:[76,252],mlil_or:[76,252],mlil_ret:[76,252],mlil_ret_hint:[76,252],mlil_rlc:[76,252],mlil_rol:[76,252],mlil_ror:[76,252],mlil_round_to_int:[76,252],mlil_rrc:[76,252],mlil_sbb:[76,252],mlil_set_var:[76,252],mlil_set_var_alias:[76,252],mlil_set_var_aliased_field:[76,252],mlil_set_var_field:[76,252],mlil_set_var_split:[76,252],mlil_set_var_split_ssa:[76,252],mlil_set_var_ssa:[76,252],mlil_set_var_ssa_field:[76,252],mlil_stor:[76,252],mlil_store_ssa:[76,252],mlil_store_struct:[76,252],mlil_store_struct_ssa:[76,252],mlil_sub:[76,252],mlil_sx:[76,252],mlil_syscal:[76,252],mlil_syscall_ssa:[76,252],mlil_syscall_untyp:[76,252],mlil_syscall_untyped_ssa:[76,252],mlil_tailcal:[76,252],mlil_tailcall_ssa:[76,252],mlil_tailcall_untyp:[76,252],mlil_tailcall_untyped_ssa:[76,252],mlil_test_bit:[76,252],mlil_trap:[76,252],mlil_undef:[76,252],mlil_unimpl:[76,252],mlil_unimpl_mem:[76,252],mlil_var:[76,252],mlil_var_alias:[76,252],mlil_var_aliased_field:[76,252],mlil_var_field:[76,252],mlil_var_phi:[76,252],mlil_var_split:[76,252],mlil_var_split_ssa:[76,252],mlil_var_ssa:[76,252],mlil_var_ssa_field:[76,252],mlil_xor:[76,252],mlil_zx:[76,252],mmlil:223,mnemon:[53,146,156],mod:223,mod_double_prec_sign:223,mod_double_prec_unsign:223,mod_sign:223,mod_unsign:223,modif:[18,223,252],modifi:[4,18,136,146,310],modificationstatu:[18,76,346],modu:223,modulu:223,more:[18,223,236,252,256,265],most:18,mostli:[287,288],mov:[4,18,223,236,252,256],mro:266,much:[18,27,49],mul:223,mult:223,mult_double_prec_sign:223,mult_double_prec_unsign:223,multi:[18,27,49,174,184,194],multilinetextfield:[174,194,346],multilinetextformfield:76,multipl:[12,18,174,206],multipli:223,mulu:223,must:[9,18,21,45,139,174,175,252],my_abstract_method:272,my_abstract_properti:273,my_data:18,myarch:[4,5],myrepo:287,name:[4,5,18,39,40,48,56,58,59,62,136,146,158,165,167,174,177,185,188,193,194,196,197,210,218,223,274,278,287,292,301,305,307,310,313,314,315,316,317,323,330,332,333],name_list:18,named_typ:310,named_type_from_registered_typ:310,named_type_from_typ:310,named_type_from_type_and_id:310,named_type_refer:310,namedtyperefer:[310,346],namedtypereferenceclass:[76,310,316,346],namespac:[18,310,324,346],namespaceseparatortoken:76,namespacetoken:76,nametyp:[76,346],nativ:[146,174,193,196,197],natur:[139,141,223,236,252,256],navig:[18,136],navigationhandl:[136,346],nearest:223,need:[18,139,146,174,202,203,274],needs_upd:146,neg:[223,235],neg_expr:223,negat:223,negativesignflagrol:76,never:[4,18,27,49],never_branch:18,neverskipfunctionanalysi:76,new_auto_function_analysis_suppress:18,new_nam:18,newautofunctionanalysissuppressedreason:76,newlin:[174,198],next:[18,223],next_address:[4,18],ninja:[18,27,49,52,136,137],nint:[274,310,327],no_ret:223,noaccess:76,nobind:76,nobutton:76,nocallingconvent:76,node:[139,141],node_a:[139,141],node_b:[139,141],node_c:[139,141],noextend:[76,146,162],nohighlightcolor:76,non:[18,223,252,287],non_ssa_form:[223,252],nonametyp:76,noncontiguousseparatorlinetyp:76,none:[4,14,15,18,26,27,29,30,39,40,42,43,48,49,50,51,52,54,55,56,58,62,63,64,65,67,74,136,137,139,141,143,144,146,147,149,150,151,152,154,157,162,163,164,167,171,172,173,174,175,178,179,183,186,187,194,201,202,203,205,206,210,211,213,214,215,216,217,218,219,220,221,223,235,236,237,252,255,256,257,261,262,274,275,278,279,287,290,292,294,295,297,301,305,307,310,312,314,316,322,324,325,327,330,332,338,341,346],nop:[4,18,136,223],nor:266,norefer:76,noreturn:223,normal:[12,13,272,273],normalfunctiongraph:[76,146],normalpluginloadord:76,noscop:76,noskipreason:76,not_expr:223,not_her:4,not_ther:4,notat:[223,236,252,256],notbranchdepend:76,note:[18,27,49,174,175,191,192,193,195,196,197,198,201,202,203,205,206,332,335],noteendlinetyp:76,notelinetyp:76,notestartlinetyp:76,noth:223,notifi:[18,21,25],notify_data_insert:18,notify_data_remov:18,notify_data_written:18,notify_error:292,notify_input_ready_state_chang:292,notify_output:292,notinsetofvalu:76,notokencontext:[53,76,146,156],notreadyforinput:76,now:18,nstruct:274,number:[4,9,18,45,53,146,156,223,252,274,310,346],numer:[265,270],object:[4,9,14,18,21,39,42,45,48,52,56,58,62,70,74,133,136,137,139,146,169,172,174,204,207,209,223,235,252,255,261,265,274,278,287,292,301,305,310,330,332,346],obvious:18,occur:[18,139],octal:18,oddparityflagrol:76,officialpluginorigin:76,offset:[18,133,136,146,162,174,175,223,252,310,323],okbutton:76,okbuttonset:[76,174,204],old_nam:18,on_complet:[18,21],onc:[18,21,36,139],one:[4,18,27,49,139,146,174,192,310,324],oni:14,onli:[4,14,18,53,136,139,141,146,156,223,252,273,274,278,287,288,289,310,332,346],onto:223,opcode_display_length:4,opcodetoken:[53,76,146,156],open:[18,26,27,29,36,49,52,70,71,136,137,174,177,185,194,196,274],open_existing_databas:136,openfilenamefield:[174,194,346],openfilenameformfield:76,oper:[4,18,223,235,238,252,258,265,267,268,271],operand:[4,53,146,156,223,236,252,256],operandseparatortoken:[53,76,146,156],operatorandequalnametyp:76,operatorarraynametyp:76,operatorarrownametyp:76,operatorarrowstarnametyp:76,operatorassignnametyp:76,operatorbitandnametyp:76,operatorbitornametyp:76,operatorcommanametyp:76,operatordecrementnametyp:76,operatordeletearraynametyp:76,operatordeletenametyp:76,operatordivideequalnametyp:76,operatordividenametyp:76,operatorequalnametyp:76,operatorgreaterthanequalnametyp:76,operatorgreaterthannametyp:76,operatorincrementnametyp:76,operatorleftshiftequalnametyp:76,operatorleftshiftnametyp:76,operatorlessthanequalnametyp:76,operatorlessthannametyp:76,operatorlogicalandnametyp:76,operatorlogicalornametyp:76,operatorminusequalnametyp:76,operatorminusnametyp:76,operatormodulusequalnametyp:76,operatormodulusnametyp:76,operatornewarraynametyp:76,operatornewnametyp:76,operatornotequalnametyp:76,operatornotnametyp:76,operatororequalnametyp:76,operatorparenthesesnametyp:76,operatorplusequalnametyp:76,operatorplusnametyp:76,operatorreturntypenametyp:76,operatorrightshiftequalnametyp:76,operatorrightshiftnametyp:76,operatorstarequalnametyp:76,operatorstarnametyp:76,operatortildenametyp:76,operatorunarybitandnametyp:76,operatorunaryminusnametyp:76,operatorunaryplusnametyp:76,operatorunarystarnametyp:76,operatorxorequalnametyp:76,operatorxornametyp:76,option:[4,12,13,14,18,26,29,146,174,175,184,192,193,194,196,197,204,210,218,223,274,278,287,310,327],or_expr:223,orangehighlightcolor:76,order:[18,21,31,223,252,266],ordereddict:346,orderedflagrol:76,organ:301,origin:[18,76,136,278,287],original_filenam:136,other:[53,139,141,146,156,223,236,252,256,287],otherpluginorigin:76,otherwis:[4,18,136,287],out:[4,18,210,220,265],outgo:[14,139,141],outgoing_edg:[14,139],output:[18,146,157,174,194,223,252,292],outsid:[174,201,206,310,324],overflow:[223,235],overflowflagrol:76,overrid:[4,18,146,292],overridden:[18,139,272,273],overwrit:[210,218],own:265,owner:[223,233,252,253],pack:310,param:[18,174,194,223,252,305,310],param_typ:[310,314],paramet:[4,14,18,26,29,52,55,56,58,59,137,139,146,171,174,175,191,192,193,194,195,196,197,198,199,201,202,203,204,205,206,210,213,214,215,216,217,218,219,220,221,223,235,252,274,278,287,301,305,310,327,332,341],parameter_var:146,parameters_for_analysi:18,parametervari:[146,346],parent:[4,5],parent_view:[18,27,49],pars:[18,27,49,274,287,288],parsabl:18,parse_express:18,parse_type_str:18,parse_types_from_sourc:274,parse_types_from_source_fil:274,parser:18,part:[139,223],partial:223,pascalcallingconvent:76,pass:[12,13,18,70,174,175,223,235,252,255,278,292],patch:[4,5,18],path:[18,52,137,210,218,223,252,287,346],pend:[139,332,338,339],pep:265,per:18,perform:[4,18,27,49,146,223],perform_:[18,27,49],perform_always_branch:4,perform_assembl:4,perform_cancel_script_input:292,perform_convert_to_nop:4,perform_decod:305,perform_destroy_inst:[62,292],perform_encod:305,perform_execute_script_input:292,perform_free_object:48,perform_get_address_s:18,perform_get_associated_arch_by_address:4,perform_get_default_endian:18,perform_get_entry_point:18,perform_get_flag_condition_low_level_il:4,perform_get_flag_rol:4,perform_get_flag_write_low_level_il:4,perform_get_flags_required_for_flag_condit:4,perform_get_incoming_flag_valu:39,perform_get_incoming_reg_valu:39,perform_get_incoming_var_for_parameter_var:39,perform_get_instruction_info:4,perform_get_instruction_low_level_il:4,perform_get_instruction_text:4,perform_get_length:18,perform_get_lines_for_data:48,perform_get_modif:18,perform_get_next_valid_offset:18,perform_get_parameter_var_for_incoming_var:39,perform_get_semantic_flag_group_low_level_il:4,perform_get_start:18,perform_insert:18,perform_invert_branch:4,perform_is_always_branch_patch_avail:[4,18],perform_is_execut:18,perform_is_invert_branch_patch_avail:[4,18],perform_is_never_branch_patch_avail:[4,18],perform_is_offset_execut:18,perform_is_offset_read:18,perform_is_offset_writ:18,perform_is_relocat:18,perform_is_skip_and_return_value_patch_avail:[4,18],perform_is_skip_and_return_zero_patch_avail:[4,18],perform_is_valid_for_data:48,perform_is_valid_offset:18,perform_read:18,perform_remov:18,perform_request:62,perform_sav:18,perform_set_current_address:292,perform_set_current_basic_block:292,perform_set_current_binary_view:292,perform_set_current_funct:292,perform_set_current_select:292,perform_skip_and_return_valu:4,perform_writ:18,permiss:18,person:[0,1,2,3],peter:[174,194],phase:18,physic:[18,27,49],pickl:18,piec:[18,27,49],place:[139,146],placementdeleteclosurearraynametyp:76,placementdeleteclosurenametyp:76,plain:[18,174,202,203],plaintext:[18,174,179,183,202,203,205],plaintextreport:[174,346],plaintextreporttyp:76,plat:18,platform:[4,18,54,146,310,325,345,346],plugin:[4,14,18,27,49,136,139,141,146,287,288,289,290,346],plugin_typ:287,plugincommand:[278,346],plugincommandcontext:[278,346],plugincommandtyp:[76,346],pluginloadord:[76,346],pluginmanag:346,pluginmanagerloadplugincallback:346,pluginorigin:[76,346],pluginpath:287,plugintyp:[76,287,346],pluginupdatestatu:[76,287,346],point:[9,18,45,53,136,139,142,146,156,223,252,310,346],pointer:[18,56,58,146,223,310],pointerdisplaytyp:76,pointerreferencetyp:76,pointersuffix:[76,346],pointertypeclass:76,pop:[18,171,174,191,192,193,194,195,196,197,198,202,203,205,210,213,214,223],populate_nod:139,portion:[18,27,49],pos:18,posit:[18,207,209,223,235],positivesignflagrol:76,possibl:[223,252],possible_valu:[223,252],possibleaddresstoken:[53,76,146,156],possiblevalueset:[146,346],postfix:[223,252],postfix_operand:[223,252],potenti:[18,223],powerpc:[4,5],pre:[310,327],preced:[9,45],precis:223,prefix:[18,48,223,252],prefix_operand:[223,252],prepar:139,prepare_for_layout:139,preprocess_sourc:[310,346],preprocessed_sourc:[310,327],preprocessor:[310,327],present:[4,18,27,49,139,141,174,176,301],preserv:18,prev:252,prevent:4,previou:18,print:[18,21,36,55,171,174,194,210,213,214,215,216,217,221],printf:18,prior:18,privat:[18,27,49],privateaccess:76,process:[139,310,327],processor:223,product:346,program:[12,13],programm:12,progress:[18,278,332],progress_func:[18,136],prompt:[18,174,175,176,177,180,184,185,188,190,191,192,193,194,195,196,197,198,202,203,204,205],proper:4,properti:[14,136,139,146,273,301],protectedaccess:76,prototyp:146,provid:[4,18,21,27,49,56,59,62,63,66,139,146,174,176,192,193,194,197,199,204,223,252,265,271,274,292,293,295,301],proxi:65,proxyhandl:346,ptr64suffix:76,ptr:[146,148],publicaccess:76,purpos:[4,5,18,27,49,223],push:[14,18,146,223],pynativestr:346,python2:[4,10,17,18,37,41,61,73,145,168,200,243,260,264,276,285,291,298,304,308,329,340,346],python3:[4,10,17,18,37,41,61,73,145,168,200,243,260,264,276,285,291,298,304,308,329,340,346],python:[18,27,49,292],pythondownloadinst:[62,346],pythondownloadprovid:[62,346],pythonscriptinginst:[292,346],pythonscriptingprovid:[292,346],quadword:18,qualifi:[56,59],qualifiednam:[18,310,346],queri:[4,18,146,223,252,332,336],query_metadata:18,queryabl:[18,27,49],questionicon:76,quickli:[18,27,49],quot:18,r_copi:4,rang:[18,146,174,204,278,346],rangeplugincommand:76,rather:[18,27,49,207,209,210,218,223,234,252,254],ration:[265,346],raw:[18,27,49,136,223,261,262,310],raw_nam:[310,324],rawdatatyp:76,rawhex:305,rbp:[14,146],rdi:146,reach:252,reachabl:[139,141],read16:18,read16b:18,read16l:18,read32:[18,26],read32b:18,read32l:18,read64:18,read64b:18,read64l:18,read8:18,read:[4,14,18,26,27,36,49,133,136,139,146,223,236,252,256,273,274,278,287,288,289,292,310,332],readabl:18,reader:18,readi:139,readonlycodesectionsemant:76,readonlydatasectionsemant:76,readwritedatasectionsemant:76,readyforscriptexecut:76,readyforscriptprograminput:76,real:[265,267,346],reanalyz:[18,146],reason:[69,146],rebas:18,recalcul:[18,27,49],receiv:[18,21],recent:18,recognize_low_level_il:169,recognize_medium_level_il:169,recommend:[18,31,136],record:[18,136],red:[14,146,172,173],redhighlightcolor:76,redirect:[210,218,219,220],redirect_output_to_log:[210,346],redirect_stdio:[292,346],redo:[18,136],ref:[18,146],ref_of:[146,165],ref_typ:310,refer:[18,223,287,310],referenc:[18,139,223],referencereferencetyp:76,referencesourc:[4,18,346],referencesuffix:76,referencetyp:[76,346],referencetypewithconfid:[310,346],reg:[4,39,146,223,226,240,252],reg_list:[310,319],reg_or_flag:[223,241],reg_or_flag_list:223,reg_or_flag_ssa_list:223,reg_split:223,reg_ssa:223,reg_ssa_list:223,reg_stack:[4,146,223,227,242],reg_stack_adjust:[146,223],reg_stack_pop:223,reg_stack_push:223,reg_stack_ssa:223,reg_stack_ssa_dest_and_src:223,reg_stack_ssa_list:223,reg_stack_top_rel:223,regard:18,regist:[4,5,12,18,27,49,53,62,146,156,174,223,266,274,278,292,301,330,346],register_arch:[18,169],register_calling_convent:[4,274],register_default_platform:18,register_for_address:278,register_for_funct:278,register_for_low_level_il_funct:278,register_for_low_level_il_instruct:278,register_for_medium_level_il_funct:278,register_for_medium_level_il_instruct:278,register_for_rang:278,register_gener:48,register_glob:169,register_group:301,register_notif:18,register_output_listen:292,register_platform:18,register_platform_typ:18,register_set:301,register_type_specif:48,registered_nam:18,registered_view_typ:18,registerinfo:[146,346],registerset:[310,346],registerstackadjustmentwithconfid:[310,346],registerstackinfo:[146,346],registertoken:[53,76,146,156],registervalu:[146,346],registervaluetyp:[76,346],registervariablesourcetyp:76,registri:301,registry_id:[68,301,302],regular:[14,31,146],reimplement:139,rel:[18,223,287],relat:[274,275],release_advanced_analysis_data:146,reloc:[18,223],reloc_point:223,relocat:18,relocation_count:18,relocation_rang:18,relocation_ranges_at:18,relocationtyp:[76,346],rememb:31,remot:287,remote_refer:287,remoterefer:287,remov:[18,27,49,146,223,261,310],remove_auto_sect:18,remove_auto_seg:18,remove_funct:[18,27,49],remove_metadata:18,remove_user_funct:[18,27,49],remove_user_sect:18,remove_user_seg:18,renam:18,rename_typ:18,render:[139,141],reopen:18,repeatedli:18,replac:[4,278,310],repo:287,repopath:287,repoplugin:[287,346],report:[18,139,141,174,206],reportcollect:[174,206,346],reporttyp:[76,346],repositori:[287,288,290,346],repositorymanag:[287,289,346],repres:[9,45,52,136,137,146,292,310],represent:[4,18,223],request:[18,139],request_advanced_analysis_data:146,request_debug_report:146,requir:[18,56,58,272,273],reset:[18,301],reset_al:301,reset_deduplicated_com:146,resid:[310,324],resolut:266,respect:292,respons:[18,21,52,136,137],rest:[18,26,27,29,49],restrictsuffix:76,result:[18,136,174,175,176,177,180,184,185,188,190,194,223,235,252,255],ret:[223,310],retn:18,retriev:[4,18,146,174,204,223,265],return_address:146,return_reg:146,return_typ:146,return_valu:310,returnaddressvalu:76,revers:305,right:[139,223,252],rlc:223,rol:223,role:4,root:223,ror:223,rotat:223,rotate_left:223,rotate_left_carri:223,rotate_right:223,rotate_right_carri:223,round:223,round_to_int:223,roundint:223,rrc:223,rttibaseclassarrai:76,rttibaseclassdescriptor:76,rtticlassheirarchydescriptor:76,rtticompleteobjectloc:76,rttitypedescriptor:76,rule:18,run:[18,21,27,49,55,210,214,216,221,278,292,310,327,346],rvaluereferencetyp:76,same:[4,18,31,278],saucisson:[210,217],save:[14,18,27,49,136,146,174,188,193,194,197],save_auto_snapshot:[18,136],savefilenamefield:[174,194,346],savefilenameformfield:76,sbb:223,sbc:223,scalardeletingdestructornametyp:76,schema:301,scope:301,scriptexecutioncancel:76,scriptinginst:[292,346],scriptingoutputlisten:[292,346],scriptingprovid:346,scriptingproviderexecuteresult:[76,346],scriptingproviderinputreadyst:[76,346],search:[18,274],section:[18,346],sectionendlinetyp:76,sectionsemant:[18,76,346],sectionseparatorlinetyp:76,sectionstartlinetyp:76,secur:18,see:[5,6,7,8,9,15,16,18,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,40,43,45,49,50,51,53,54,63,64,66,67,68,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,134,135,138,140,141,142,143,144,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,170,173,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,208,209,224,225,226,227,228,229,233,234,235,236,237,238,239,240,241,242,253,254,255,256,257,258,259,262,266,267,268,269,270,271,273,275,279,280,281,282,283,284,288,289,290,293,294,295,296,297,302,306,307,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,331,333,334,335],seek:18,seek_rel:18,seen:[18,27,49],segment:[18,346],segmentcontainscod:76,segmentcontainsdata:76,segmentdenyexecut:76,segmentdenywrit:76,segmentexecut:76,segmentflag:[76,346],segmentread:76,segmentwrit:76,select:[174,192,193,196,197,204],self:[18,21,146,174,175,176,177,180,184,185,188,190,272,273],sem_class:[4,223,228],sem_group:[4,223,229],semant:[4,18,223],semantic_class:223,semantic_class_for_flag_write_typ:4,semantic_flag_class:4,semantic_flag_group:4,semantic_group:223,sensit:[4,223,252],separ:[53,146,156,174,189],separatorfield:[174,194,346],separatorformfield:76,sequenc:4,sequenti:292,serial:[18,346],session_data:[18,136,146],set:[4,14,18,136,139,146,151,174,194,223,252,274,287,332,341,346],set_auto_call_reg_stack_adjust:146,set_auto_call_reg_stack_adjustment_for_reg_stack:146,set_auto_call_stack_adjust:146,set_auto_calling_convent:146,set_auto_can_return:146,set_auto_clobbered_reg:146,set_auto_has_variable_argu:146,set_auto_highlight:14,set_auto_indirect_branch:146,set_auto_instr_highlight:146,set_auto_parameter_var:146,set_auto_reg_stack_adjust:146,set_auto_return_reg:146,set_auto_return_typ:146,set_auto_stack_adjust:146,set_auto_typ:146,set_auto_updates_en:[332,346],set_bool:301,set_call_reg_stack_adjust:146,set_call_reg_stack_adjustment_for_reg_stack:146,set_call_stack_adjust:146,set_com:146,set_comment_at:146,set_current_address:[223,252,292],set_current_basic_block:292,set_current_binary_view:292,set_current_funct:292,set_current_select:292,set_current_source_block:223,set_default_session_data:[18,136,146],set_doubl:301,set_flag:223,set_indirect_branch:223,set_int_display_typ:146,set_integ:301,set_opt:146,set_reg:223,set_reg_split:223,set_reg_stack_top_rel:223,set_str:301,set_string_list:301,set_user_highlight:14,set_user_indirect_branch:146,set_user_instr_highlight:146,set_user_typ:146,set_view_type_const:4,set_worker_thread_count:[244,346],setter:[18,274],setting_properti:301,settingsautoscop:[76,301],settingscontextscop:76,settingsdefaultscop:76,settingsinvalidscop:76,settingsscop:[76,301,346],settingsuserscop:76,settingsworkspacescop:76,setx:273,sever:70,shannon:18,shell:4,shift:223,shift_left:223,short_nam:[310,324],should:[4,18,27,49,139,207,209,223,234,252,254,265,267,270,278],shouldn:[223,234,252,254],show:[139,266],show_graph_report:[18,139,141,174,346],show_html_report:[18,174,346],show_markdown_report:[18,174,346],show_message_box:[174,346],show_plain_text_report:[18,174,346],show_report_collect:[174,346],showaddress:76,showcallparameternam:76,showdefaultregistertyp:76,showflagusag:76,shown:[139,141],showopcod:76,showregisterhighlight:76,showvariablesattopofgraph:76,showvariabletypeswhenassign:76,shut:[18,346],shutdown:346,sign:[223,235,261,262,310],sign_extend:223,signal:139,signatur:[5,6,7,8,9,15,16,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,40,43,45,49,50,51,53,54,63,64,66,67,68,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,134,135,138,140,141,142,143,144,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,170,173,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,208,209,224,225,226,227,228,229,233,234,235,236,237,238,239,240,241,242,253,254,255,256,257,258,259,262,266,267,268,269,270,271,273,275,279,280,281,282,283,284,288,289,290,293,294,295,296,297,302,306,307,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,331,333,334,335],signed:310,signeddecimaldisplaytyp:76,signedhexadecimaldisplaytyp:76,signedintegerdatatyp:76,signedoctaldisplaytyp:76,signedrangevalu:76,signextendtofullwidth:76,similar:18,simpl:[18,174,191,192,193,195,196,197,198,202,203,205,301],simpli:[4,18,27,49],sinc:[4,18,27,49,136],singl:[18,139,141,223],size:[4,18,53,56,58,146,148,156,162,165,223,238,252,258,292],size_:18,sizewithconfid:[310,346],skip:146,skip_and_return_valu:[4,18],slice:301,snapshot:18,solver:301,some:[18,136],sourc:[4,5,6,7,8,10,11,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,346],source_addr:[146,153],source_arch:[146,153],source_block:14,source_func:[223,235,252,255],source_typ:[146,167],space:[174,194],spanferkel:[55,210,216],special:[223,265,267],specialflagrol:76,specif:[18,274],specifi:[18,146,174,175,177,185,188,194,210,218,287],spent:18,split:223,sqrt:223,squar:223,src:[18,223,252],src_memori:[223,252],src_operand:[146,165],ssa:[223,252],ssa_form:[223,252],ssa_memory_vers:252,ssa_var:252,ssaflag:[223,346],ssaregist:[223,346],ssaregisterorflag:[223,346],ssaregisterstack:[223,346],ssavari:[252,346],stack:[4,146,223,252,310],stack_adjust:[146,223,310],stack_adjusted_on_return:39,stack_frame_offset:146,stack_layout:146,stack_point:4,stack_reserved_for_arg_reg:39,stack_top_reg:[146,163],stackframeoffset:76,stackvariablerefer:[146,346],stackvariablesourcetyp:76,stackvariabletoken:[53,146,156],stackvariabletypetoken:[53,146,156],stacmp:[332,337],stamp:[332,337],standalon:4,standalone_platform:4,standard:[18,27,49,210,219,220,292],standardhighlightcolor:76,standardrelocationtyp:76,start:[4,14,18,20,26,27,29,34,36,49,53,136,139,141,146,156,166,278],startup:[18,27,49],state:[18,22,23,139,146,292],staticscop:76,statu:[18,278,332,341],stdcall:274,stdcall_calling_convent:274,stdcallcallingconvent:76,step:[146,166],still:18,stop:[223,346],storag:[146,167],storage_reg:[146,163],store:[18,27,49,136,146,174,175,176,177,180,184,185,188,190,223,287],store_metadata:18,str:[4,18,55,56,58,59,139,146,171,174,176,191,192,193,194,195,196,197,198,202,203,204,205,210,213,214,215,216,217,218,221,223,274,278,287,301,310,327,346],strict:14,strict_domin:14,string:[4,9,18,45,52,137,146,174,176,177,184,185,188,190,191,192,194,195,198,199,223,265,268,274,287,301,310,327,346],string_found:18,string_remov:18,string_typ:[18,34],stringdatatyp:76,stringescap:305,stringnametyp:76,stringrefer:[18,346],stringtoken:[53,76,146,156],stringtyp:[76,346],struct:[18,274],structnamedtypeclass:76,structstructuretyp:76,structur:[18,36,310,346],structure_nam:[18,36],structure_typ:310,structureddatavalu:[18,346],structureddataview:[18,346],structurememb:[310,346],structuretyp:[76,346],structuretypeclass:76,studio:[56,58],style:18,style_:18,sub:223,sub_borrow:223,subclass:[4,5,18,27,49,70,139,265,266,292],subgraph:[139,141],submit_count:[18,19],subtract:223,success:[4,18,301],successfulli:[18,287],successfulscriptexecut:76,sum:18,suppli:[14,146],support:[4,5,18,70,174,184,202,203,274],surround:[9,45],sym:[18,146],sym_typ:[18,310,324],symbol:[18,56,58,146,174,204,310,346],symbolbind:[76,346],symboltyp:[18,76,310,324,346],syntax:4,syntaxerror:274,system:[4,223,274],system_cal:[223,274],system_call_convent:274,systemcal:[4,76],tab:139,tabl:[310,324],tag:14,tailcal:223,take:[18,21,27,49,139,146,252],taken:[4,18,136,292],targ:[12,13],target:[14,16,139,142,146,154,223,252,292,310],task:[18,278],tell:[53,146,156],temp_flag_count:223,temp_reg_count:223,temporari:223,temporaryact:76,ten:[310,327],term:[265,270],termin:[12,13],test:[18,287],test_bit:223,testf:[18,56,58,59],tex_f:[174,194],text:[18,42,44,47,53,55,139,146,156,171,174,182,184,190,191,192,193,194,195,196,197,198,202,203,204,205,210,213,214,215,216,217,221,278,287,292],textcodectransform:76,textencodetransform:76,textlinefield:[174,194,346],textlineformfield:76,texttoken:[53,76,146,156],than:[18,27,49,210,218,223,235,236,252,256,287],thei:[332,336],them:[139,141,265,267,274],thi:[4,5,14,18,26,27,29,49,136,139,141,146,174,175,184,191,192,193,194,195,196,197,198,201,202,203,205,206,207,209,223,234,252,254,265,266,269,273,274,287,292,301],thiscallcallingconvent:76,those:[4,18,265,267,271],thread:[18,27,49,139,292],through:[18,27,49,55,210,214,216,221],thrown:274,thu:[18,27,49,223,236,252,256],thunkscop:76,time:[18,27,49,332,337],timeout:74,titl:[18,139,174,178,179,183,186,191,192,194,195,198,201,202,203,204,205,206,301],tmp:274,to_valu:[146,159],todo:265,token:[18,51,53,146,150,156,223,252,310],token_typ:[53,146,156],too:146,too_larg:146,top:[139,223],top_relative_reg:[146,163],total:[18,23,332],toward:[9,45,223],track:[18,21,52,136,137,287,290],trail:[174,198],transform:346,transform_typ:305,transformparamet:[305,346],transformtyp:[76,346],trap:223,treat:18,tree:[14,223,236,252,256],truebranch:[4,76],truebranchdepend:76,trunc:[265,271],truncat:[9,45,223],tupl:[4,18,56,58,310,327],two:[18,139,223],type:[4,5,6,7,8,9,15,16,18,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,40,43,45,48,49,50,51,53,55,56,58,59,63,64,66,67,68,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,134,135,136,138,139,140,141,142,143,144,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,170,171,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,198,199,201,202,203,204,205,206,208,209,210,211,213,214,215,216,217,218,219,220,221,223,224,225,226,227,228,229,233,234,235,236,237,238,239,240,241,242,252,253,254,255,256,257,258,259,261,262,265,266,267,268,269,270,271,273,274,275,278,279,280,281,282,283,284,287,288,289,290,293,294,295,296,297,301,302,306,307,331,332,333,334,335,336,337,338,339,341,346],type_class:[274,310,316],type_defin:18,type_id:[18,310,316],type_nam:4,type_obj:[18,146,158],type_token:146,type_undefin:18,typeclass:[76,346],typedefnamedtypeclass:76,typenam:[53,146,156],typenametoken:76,typeofnametyp:76,typeparserresult:[274,310,346],typic:[223,287],udtreturningnametyp:76,uiplugintyp:[76,287],unalignedsuffix:76,uncondit:[4,18],unconditionalbranch:[4,76,139,141],undefin:[18,223,346],undefine_auto_symbol:18,undefine_data_var:18,undefine_typ:18,undefine_user_data_var:18,undefine_user_symbol:18,undefine_user_typ:18,under:18,underli:[52,136,137],undetermin:[14,146],undeterminedvalu:76,undo:[18,136],undoabl:[52,136,137],undoact:346,undon:[18,136],unescap:42,unescape_str:[42,346],unicod:[9,45],unicodecodectransform:76,unimpl:223,unimplemented_memory_ref:223,uninstal:[287,288,289,290],uninstall_plugin:287,union:310,unionnamedtypeclass:76,unionstructuretyp:76,uniqu:[18,301],unit:18,unknown:4,unknownnamedtypeclass:[76,310,316],unless:[146,272,273],unmodifi:[223,252],unord:223,unorderedflagrol:76,unregist:18,unregister_notif:18,unregister_output_listen:292,unrel:266,unreli:346,unresolv:146,unresolved_stack_adjustment_graph:146,unresolvedbranch:[4,76],unsign:[223,235],unsigneddecimaldisplaytyp:76,unsignedhexadecimaldisplaytyp:76,unsignedintegerdatatyp:76,unsignedoctaldisplaytyp:76,unsignedrangevalu:76,until:18,unus:223,updat:[18,139,146,287,346],update_analysi:[18,27,49],update_analysis_and_wait:[18,27,49],update_count:[18,19],update_plugin:287,update_properti:301,update_statu:287,update_to_latest:332,updateavail:76,updatechannel:[332,346],updatefail:76,updateprogresscallback:[332,346],updateresult:[76,346],updates_avail:332,updates_check:[332,346],updatesavailablepluginstatu:[76,287],updatesuccess:76,updatevers:[332,346],upon:[12,13],uptodatepluginstatu:[76,287],url:[62,74,287],urlerror:346,urlopen:346,usag:[12,13,18,272,273],use:[14,18,27,49,53,70,139,146,156,171,174,202,203,210,213,223,236,252,256,265,269,301,310,327,346],used:[4,5,18,27,49,52,53,70,136,137,139,146,156,174,175,191,192,193,195,196,197,198,202,203,205,223,234,235,252,254,274,275,287],user:[4,18,27,49,174,175,176,177,185,188,191,192,193,194,195,196,197,198,205,274,301,346],user_plugin_path:346,uses:[18,146,174,192,193,196,197,223],using:[4,18,26,27,29,49,139,141,223,252,272,273,287],utf16str:76,utf32str:76,utf8str:76,val:[146,148],valid:[9,18,45],valu:[4,14,18,35,53,133,136,146,156,161,164,174,191,194,195,223,235,252,261,262,273,287,301,310,311,313,318,320,321],valuerang:[146,346],valuetypeclass:76,var_list:[146,160,252],var_ssa:252,var_ssa_dest_and_src:252,var_ssa_list:252,var_typ:[18,30,146,167],varargstypeclass:76,vari:18,variabl:[4,5,18,146,252,274,310,326,346],variable_argu:310,variable_nam:18,variablesourcetyp:[76,346],variou:[18,27,49,53,146,156,223,235,252,255],vars_read:252,vars_written:252,vbasedestructornametyp:76,vbtablenametyp:76,vcallnametyp:76,vector35:287,vector:[223,252],vectorcallcallingconvent:76,vectorconstructoriteratornametyp:76,vectordeletingdestructornametyp:76,vectordestructoriteratornametyp:76,vectorvbaseconstructoriteratorenametyp:76,ver:[332,333,335],version:[18,27,49,139,141,174,202,203,223,239,240,241,242,252,259,287,332,346],vertic:[174,189,194],vertical_block_margin:139,vftablenametyp:76,via:[18,27,49,174,194,266],view:[4,14,15,18,21,25,26,27,29,30,48,49,53,136,146,152,156,174,175,178,179,183,186,223,233,252,253,278,284,292,301,310,330,331],view_typ:18,virtual:[4,18,27,49,146,223,266],virtualdisplacementmapnametyp:76,virtualscop:76,visual:[56,58],voidtypeclass:76,volatil:310,w421:[18,56,58,59],wai:301,wait:[18,139,146,278,332,339],want:[4,265,269],warn:[14,18,146,171,210,213,221,346],warningicon:76,warninglog:[76,171,210,213],weakbind:76,were:[332,337],wether:310,what:[139,141,265,269],whatev:[53,146,156],when:[4,18,21,27,49,70,139,174,191,192,195,198,223,252,287],where:[18,136,139,141,146,174,175,223,287],whether:[14,18,136,139,146,252,278,310,332,339],which:[4,14,18,27,49,139,141,174,194,204,207,209,223,235,252,255],whitehighlightcolor:76,whitespac:[9,45],whose:18,widechartypeclass:76,width:[4,18,48,139,146,310],window:[171,174,191,192,193,195,196,197,198,210,213,214],with_confid:[39,146,310],with_metaclass:346,within:[18,27,49,146,287,346],without:[18,174,198,223,252,265,269],won:[14,146,266],word:18,work:[4,174,194,265,267,271],worker:[139,346],worker_enqueu:[244,346],worker_interactive_enqueu:[244,346],worker_priority_enqueu:[244,346],workspac:[0,1,2,3],worth:4,wrap_com:146,writabl:18,write16:18,write16b:18,write16l:18,write32:18,write32b:18,write32l:18,write64:18,write64b:18,write64l:18,write8:18,write:[4,18,27,29,49,133,136,171,210,213,223,252,273,310],write_at_cursor:292,write_typ:4,written:[4,18,223,252],x00:[4,18],x01:18,x04:4,x07:18,x0f:4,x84:4,x86:[4,5,18,146,223,236,252,256],x86_64:[4,5,18,56,58,59,146],x90:4,xcf:18,xed:18,xfa:18,xfe:18,xml:[0,1,2,3],xor:[18,136,223],xor_expr:223,xref:18,yai:[174,199],yasm:4,yellowhighlightcolor:76,yesbutton:76,yesnobuttonset:76,yesnocancelbuttonset:76,you:[4,18,265,266,269,273,287,288,292],your:18,zero:[4,9,18,45,146,223,252],zero_extend:223,zeroextendtofullwidth:76,zeroflagrol:76,zlib:305,zlib_compress:42,zlib_decompress:42},titles:["Architecture","BinaryView","Console Logging","Platform","architecture module","binaryninja.architecture.Architecture","binaryninja.architecture.ArchitectureHook","binaryninja.architecture.CoreArchitecture","binaryninja.architecture.ReferenceSource","binaryninja.architecture.long","binaryninja.architecture.range","binaryninja.architecture.with_metaclass","atexit module","binaryninja.atexit.register","basicblock module","binaryninja.basicblock.BasicBlock","binaryninja.basicblock.BasicBlockEdge","binaryninja.basicblock.range","binaryview module","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","callingconvention module","binaryninja.callingconvention.CallingConvention","binaryninja.callingconvention.range","databuffer module","binaryninja.databuffer.DataBuffer","binaryninja.databuffer.escape_string","binaryninja.databuffer.long","binaryninja.databuffer.pyNativeStr","binaryninja.databuffer.unescape_string","datarender module","binaryninja.datarender.BinaryView","binaryninja.datarender.DataRenderer","binaryninja.datarender.DisassemblyTextLine","binaryninja.datarender.FileMetadata","binaryninja.datarender.InstructionTextToken","binaryninja.datarender.Type","binaryninja.datarender.log_error","demangle module","binaryninja.demangle.demangle_gnu3","binaryninja.demangle.demangle_ms","binaryninja.demangle.get_qualified_name","binaryninja.demangle.pyNativeStr","binaryninja.demangle.range","downloadprovider module","binaryninja.downloadprovider.DownloadInstance","binaryninja.downloadprovider.DownloadProvider","binaryninja.downloadprovider.ProxyHandler","binaryninja.downloadprovider.PythonDownloadInstance","binaryninja.downloadprovider.PythonDownloadProvider","binaryninja.downloadprovider.Settings","binaryninja.downloadprovider.URLError","binaryninja.downloadprovider.build_opener","binaryninja.downloadprovider.install_opener","binaryninja.downloadprovider.pyNativeStr","binaryninja.downloadprovider.range","binaryninja.downloadprovider.urlopen","binaryninja.downloadprovider.with_metaclass","enums module","binaryninja.enums.ActionType","binaryninja.enums.AnalysisSkipReason","binaryninja.enums.AnalysisState","binaryninja.enums.BranchType","binaryninja.enums.CallingConventionName","binaryninja.enums.DisassemblyOption","binaryninja.enums.Endianness","binaryninja.enums.FindFlag","binaryninja.enums.FlagRole","binaryninja.enums.FormInputFieldType","binaryninja.enums.FunctionAnalysisSkipOverride","binaryninja.enums.FunctionGraphType","binaryninja.enums.HighlightColorStyle","binaryninja.enums.HighlightStandardColor","binaryninja.enums.ILBranchDependence","binaryninja.enums.ImplicitRegisterExtend","binaryninja.enums.InstructionTextTokenContext","binaryninja.enums.InstructionTextTokenType","binaryninja.enums.IntegerDisplayType","binaryninja.enums.LinearDisassemblyLineType","binaryninja.enums.LogLevel","binaryninja.enums.LowLevelILFlagCondition","binaryninja.enums.LowLevelILOperation","binaryninja.enums.MediumLevelILOperation","binaryninja.enums.MemberAccess","binaryninja.enums.MemberScope","binaryninja.enums.MessageBoxButtonResult","binaryninja.enums.MessageBoxButtonSet","binaryninja.enums.MessageBoxIcon","binaryninja.enums.MetadataType","binaryninja.enums.ModificationStatus","binaryninja.enums.NameType","binaryninja.enums.NamedTypeReferenceClass","binaryninja.enums.PluginCommandType","binaryninja.enums.PluginLoadOrder","binaryninja.enums.PluginOrigin","binaryninja.enums.PluginType","binaryninja.enums.PluginUpdateStatus","binaryninja.enums.PointerSuffix","binaryninja.enums.ReferenceType","binaryninja.enums.RegisterValueType","binaryninja.enums.RelocationType","binaryninja.enums.ReportType","binaryninja.enums.ScriptingProviderExecuteResult","binaryninja.enums.ScriptingProviderInputReadyState","binaryninja.enums.SectionSemantics","binaryninja.enums.SegmentFlag","binaryninja.enums.SettingsScope","binaryninja.enums.StringType","binaryninja.enums.StructureType","binaryninja.enums.SymbolBinding","binaryninja.enums.SymbolType","binaryninja.enums.TransformType","binaryninja.enums.TypeClass","binaryninja.enums.UpdateResult","binaryninja.enums.VariableSourceType","fileaccessor module","binaryninja.fileaccessor.CoreFileAccessor","binaryninja.fileaccessor.FileAccessor","filemetadata module","binaryninja.filemetadata.FileMetadata","binaryninja.filemetadata.NavigationHandler","flowgraph module","binaryninja.flowgraph.CoreFlowGraph","binaryninja.flowgraph.FlowGraph","binaryninja.flowgraph.FlowGraphEdge","binaryninja.flowgraph.FlowGraphLayoutRequest","binaryninja.flowgraph.FlowGraphNode","binaryninja.flowgraph.range","function module","binaryninja.function.AdvancedFunctionAnalysisDataRequestor","binaryninja.function.ConstantReference","binaryninja.function.DisassemblySettings","binaryninja.function.DisassemblyTextLine","binaryninja.function.DisassemblyTextRenderer","binaryninja.function.Function","binaryninja.function.IndirectBranchInfo","binaryninja.function.InstructionBranch","binaryninja.function.InstructionInfo","binaryninja.function.InstructionTextToken","binaryninja.function.IntrinsicInfo","binaryninja.function.IntrinsicInput","binaryninja.function.LookupTableEntry","binaryninja.function.ParameterVariables","binaryninja.function.PossibleValueSet","binaryninja.function.RegisterInfo","binaryninja.function.RegisterStackInfo","binaryninja.function.RegisterValue","binaryninja.function.StackVariableReference","binaryninja.function.ValueRange","binaryninja.function.Variable","binaryninja.function.range","functionrecognizer module","binaryninja.functionrecognizer.FunctionRecognizer","binaryninja.functionrecognizer.log","highlight module","binaryninja.highlight.HighlightColor","interaction module","binaryninja.interaction.AddressField","binaryninja.interaction.ChoiceField","binaryninja.interaction.DirectoryNameField","binaryninja.interaction.FlowGraphReport","binaryninja.interaction.HTMLReport","binaryninja.interaction.IntegerField","binaryninja.interaction.InteractionHandler","binaryninja.interaction.LabelField","binaryninja.interaction.MarkdownReport","binaryninja.interaction.MultilineTextField","binaryninja.interaction.OpenFileNameField","binaryninja.interaction.PlainTextReport","binaryninja.interaction.ReportCollection","binaryninja.interaction.SaveFileNameField","binaryninja.interaction.SeparatorField","binaryninja.interaction.TextLineField","binaryninja.interaction.get_address_input","binaryninja.interaction.get_choice_input","binaryninja.interaction.get_directory_name_input","binaryninja.interaction.get_form_input","binaryninja.interaction.get_int_input","binaryninja.interaction.get_open_filename_input","binaryninja.interaction.get_save_filename_input","binaryninja.interaction.get_text_line_input","binaryninja.interaction.markdown_to_html","binaryninja.interaction.range","binaryninja.interaction.show_graph_report","binaryninja.interaction.show_html_report","binaryninja.interaction.show_markdown_report","binaryninja.interaction.show_message_box","binaryninja.interaction.show_plain_text_report","binaryninja.interaction.show_report_collection","lineardisassembly module","binaryninja.lineardisassembly.LinearDisassemblyLine","binaryninja.lineardisassembly.LinearDisassemblyPosition","log module","binaryninja.log.close_logs","binaryninja.log.is_output_redirected_to_log","binaryninja.log.log","binaryninja.log.log_alert","binaryninja.log.log_debug","binaryninja.log.log_error","binaryninja.log.log_info","binaryninja.log.log_to_file","binaryninja.log.log_to_stderr","binaryninja.log.log_to_stdout","binaryninja.log.log_warn","binaryninja.log.redirect_output_to_log","lowlevelil module","binaryninja.lowlevelil.ILFlag","binaryninja.lowlevelil.ILIntrinsic","binaryninja.lowlevelil.ILRegister","binaryninja.lowlevelil.ILRegisterStack","binaryninja.lowlevelil.ILSemanticFlagClass","binaryninja.lowlevelil.ILSemanticFlagGroup","binaryninja.lowlevelil.LLIL_GET_TEMP_REG_INDEX","binaryninja.lowlevelil.LLIL_REG_IS_TEMP","binaryninja.lowlevelil.LLIL_TEMP","binaryninja.lowlevelil.LowLevelILBasicBlock","binaryninja.lowlevelil.LowLevelILExpr","binaryninja.lowlevelil.LowLevelILFunction","binaryninja.lowlevelil.LowLevelILInstruction","binaryninja.lowlevelil.LowLevelILLabel","binaryninja.lowlevelil.LowLevelILOperationAndSize","binaryninja.lowlevelil.SSAFlag","binaryninja.lowlevelil.SSARegister","binaryninja.lowlevelil.SSARegisterOrFlag","binaryninja.lowlevelil.SSARegisterStack","binaryninja.lowlevelil.range","mainthread module","binaryninja.mainthread.execute_on_main_thread","binaryninja.mainthread.execute_on_main_thread_and_wait","binaryninja.mainthread.get_worker_thread_count","binaryninja.mainthread.set_worker_thread_count","binaryninja.mainthread.worker_enqueue","binaryninja.mainthread.worker_interactive_enqueue","binaryninja.mainthread.worker_priority_enqueue","mediumlevelil module","binaryninja.mediumlevelil.MediumLevelILBasicBlock","binaryninja.mediumlevelil.MediumLevelILExpr","binaryninja.mediumlevelil.MediumLevelILFunction","binaryninja.mediumlevelil.MediumLevelILInstruction","binaryninja.mediumlevelil.MediumLevelILLabel","binaryninja.mediumlevelil.MediumLevelILOperationAndSize","binaryninja.mediumlevelil.SSAVariable","binaryninja.mediumlevelil.range","metadata module","binaryninja.metadata.Metadata","binaryninja.metadata.pyNativeStr","binaryninja.metadata.range","numbers module","binaryninja.numbers.ABCMeta","binaryninja.numbers.Complex","binaryninja.numbers.Integral","binaryninja.numbers.Number","binaryninja.numbers.Rational","binaryninja.numbers.Real","binaryninja.numbers.abstractmethod","binaryninja.numbers.abstractproperty","platform module","binaryninja.platform.Platform","binaryninja.platform.range","binaryninja.platform.with_metaclass","plugin module","binaryninja.plugin.BackgroundTask","binaryninja.plugin.BackgroundTaskThread","binaryninja.plugin.MainThreadAction","binaryninja.plugin.MainThreadActionHandler","binaryninja.plugin.PluginCommand","binaryninja.plugin.PluginCommandContext","binaryninja.plugin.range","binaryninja.plugin.with_metaclass","pluginmanager module","binaryninja.pluginmanager.RepoPlugin","binaryninja.pluginmanager.Repository","binaryninja.pluginmanager.RepositoryManager","binaryninja.pluginmanager.range","scriptingprovider module","binaryninja.scriptingprovider.PythonScriptingInstance","binaryninja.scriptingprovider.PythonScriptingProvider","binaryninja.scriptingprovider.ScriptingInstance","binaryninja.scriptingprovider.ScriptingOutputListener","binaryninja.scriptingprovider.ScriptingProvider","binaryninja.scriptingprovider.range","binaryninja.scriptingprovider.redirect_stdio","binaryninja.scriptingprovider.with_metaclass","settings module","binaryninja.settings.Settings","binaryninja.settings.pyNativeStr","binaryninja.settings.range","transform module","binaryninja.transform.Transform","binaryninja.transform.TransformParameter","binaryninja.transform.range","binaryninja.transform.with_metaclass","types module","binaryninja.types.BoolWithConfidence","binaryninja.types.Enumeration","binaryninja.types.EnumerationMember","binaryninja.types.FunctionParameter","binaryninja.types.NameSpace","binaryninja.types.NamedTypeReference","binaryninja.types.QualifiedName","binaryninja.types.ReferenceTypeWithConfidence","binaryninja.types.RegisterSet","binaryninja.types.RegisterStackAdjustmentWithConfidence","binaryninja.types.SizeWithConfidence","binaryninja.types.Structure","binaryninja.types.StructureMember","binaryninja.types.Symbol","binaryninja.types.Type","binaryninja.types.TypeParserResult","binaryninja.types.preprocess_source","binaryninja.types.pyNativeStr","binaryninja.types.range","undoaction module","binaryninja.undoaction.UndoAction","update module","binaryninja.update.UpdateChannel","binaryninja.update.UpdateProgressCallback","binaryninja.update.UpdateVersion","binaryninja.update.are_auto_updates_enabled","binaryninja.update.get_time_since_last_update_check","binaryninja.update.install_pending_update","binaryninja.update.is_update_installation_pending","binaryninja.update.range","binaryninja.update.set_auto_updates_enabled","binaryninja.update.updates_checked","binaryninja.update.with_metaclass","Binary Ninja C API Documentation","Binary Ninja C++ API Documentation","Binary Ninja Python API Documentation"],titleterms:{"enum":[76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132],"function":[146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168],"long":[9,45],abcmeta:266,abstractmethod:272,abstractproperti:273,actiontyp:77,activeanalysisinfo:19,addressfield:175,addressrang:20,advancedfunctionanalysisdatarequestor:147,analysiscompletionev:21,analysisinfo:22,analysisprogress:23,analysisskipreason:78,analysisst:79,api:[344,345,346],architectur:[0,4,5,6,7,8,9,10,11],architecturehook:6,are_auto_updates_en:336,atexit:[12,13],backgroundtask:279,backgroundtaskthread:280,basicblock:[14,15,16,17],basicblockedg:16,binari:[344,345,346],binarydatanotif:24,binarydatanotificationcallback:25,binaryninja:[5,6,7,8,9,10,11,13,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,40,41,43,44,45,46,47,49,50,51,52,53,54,55,57,58,59,60,61,63,64,65,66,67,68,69,70,71,72,73,74,75,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,134,135,137,138,140,141,142,143,144,145,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,170,171,173,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,208,209,211,212,213,214,215,216,217,218,219,220,221,222,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,245,246,247,248,249,250,251,253,254,255,256,257,258,259,260,262,263,264,266,267,268,269,270,271,272,273,275,276,277,279,280,281,282,283,284,285,286,288,289,290,291,293,294,295,296,297,298,299,300,302,303,304,306,307,308,309,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,331,333,334,335,336,337,338,339,340,341,342,343],binaryread:26,binaryview:[1,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,49],binaryviewtyp:28,binarywrit:29,bnloglevel:2,boolwithconfid:311,branchtyp:80,build_open:70,callingconvent:[39,40,41],callingconventionnam:81,choicefield:176,close_log:211,complex:267,consol:2,constantrefer:148,corearchitectur:7,corefileaccessor:134,coreflowgraph:140,databuff:[42,43,44,45,46,47],datarend:[48,49,50,51,52,53,54,55],datarender:50,datavari:30,demangl:[56,57,58,59,60,61],demangle_gnu3:57,demangle_m:58,directorynamefield:177,disassemblyopt:82,disassemblyset:149,disassemblytextlin:[51,150],disassemblytextrender:151,document:[344,345,346],downloadinst:63,downloadprovid:[62,63,64,65,66,67,68,69,70,71,72,73,74,75],endian:83,enumer:312,enumerationmemb:313,escape_str:44,execute_on_main_thread:245,execute_on_main_thread_and_wait:246,fileaccessor:[133,134,135],filemetadata:[52,136,137,138],findflag:84,flagrol:85,flowgraph:[139,140,141,142,143,144,145],flowgraphedg:142,flowgraphlayoutrequest:143,flowgraphnod:144,flowgraphreport:178,forminputfieldtyp:86,functionanalysisskipoverrid:87,functiongraphtyp:88,functionparamet:314,functionrecogn:[169,170,171],get_address_input:191,get_choice_input:192,get_directory_name_input:193,get_form_input:194,get_int_input:195,get_open_filename_input:196,get_qualified_nam:59,get_save_filename_input:197,get_text_line_input:198,get_time_since_last_update_check:337,get_worker_thread_count:247,highlight:[172,173],highlightcolor:173,highlightcolorstyl:89,highlightstandardcolor:90,htmlreport:179,ilbranchdepend:91,ilflag:224,ilintrins:225,ilregist:226,ilregisterstack:227,ilsemanticflagclass:228,ilsemanticflaggroup:229,implicitregisterextend:92,indirectbranchinfo:153,install_open:71,install_pending_upd:338,instructionbranch:154,instructioninfo:155,instructiontexttoken:[53,156],instructiontexttokencontext:93,instructiontexttokentyp:94,integerdisplaytyp:95,integerfield:180,integr:268,interact:[174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206],interactionhandl:181,intrinsicinfo:157,intrinsicinput:158,is_output_redirected_to_log:212,is_update_installation_pend:339,labelfield:182,lineardisassembl:[207,208,209],lineardisassemblylin:208,lineardisassemblylinetyp:96,lineardisassemblyposit:209,llil_get_temp_reg_index:230,llil_reg_is_temp:231,llil_temp:232,log:[2,171,210,211,212,213,214,215,216,217,218,219,220,221,222],log_alert:214,log_debug:215,log_error:[55,216],log_info:217,log_to_fil:218,log_to_stderr:219,log_to_stdout:220,log_warn:221,logalert:2,logdebug:2,logerror:2,loginfo:2,loglevel:97,logwarn:2,lookuptableentri:159,lowlevelil:[223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243],lowlevelilbasicblock:233,lowlevelilexpr:234,lowlevelilflagcondit:98,lowlevelilfunct:235,lowlevelilinstruct:236,lowlevelillabel:237,lowleveliloper:99,lowleveliloperationands:238,mainthread:[244,245,246,247,248,249,250,251],mainthreadact:281,mainthreadactionhandl:282,markdown_to_html:199,markdownreport:183,mediumlevelil:[252,253,254,255,256,257,258,259,260],mediumlevelilbasicblock:253,mediumlevelilexpr:254,mediumlevelilfunct:255,mediumlevelilinstruct:256,mediumlevelillabel:257,mediumleveliloper:100,mediumleveliloperationands:258,memberaccess:101,memberscop:102,messageboxbuttonresult:103,messageboxbuttonset:104,messageboxicon:105,metadata:[261,262,263,264],metadatatyp:106,modificationstatu:107,modul:[4,12,14,18,39,42,48,56,62,76,133,136,139,146,169,172,174,207,210,223,244,252,261,265,274,278,287,292,301,305,310,330,332],multilinetextfield:184,namedtyperefer:316,namedtypereferenceclass:109,namespac:315,nametyp:108,navigationhandl:138,ninja:[344,345,346],number:[265,266,267,268,269,270,271,272,273],openfilenamefield:185,ordereddict:31,parametervari:160,plaintextreport:186,platform:[3,274,275,276,277],plugin:[278,279,280,281,282,283,284,285,286],plugincommand:283,plugincommandcontext:284,plugincommandtyp:110,pluginloadord:111,pluginmanag:[287,288,289,290,291],pluginorigin:112,plugintyp:113,pluginupdatestatu:114,pointersuffix:115,possiblevalueset:161,preprocess_sourc:327,proxyhandl:65,pynativestr:[46,60,72,263,303,328],python:346,pythondownloadinst:66,pythondownloadprovid:67,pythonscriptinginst:293,pythonscriptingprovid:294,qualifiednam:317,rang:[10,17,37,41,61,73,145,168,200,243,260,264,276,285,291,298,304,308,329,340],ration:270,real:271,redirect_output_to_log:222,redirect_stdio:299,referencesourc:8,referencetyp:116,referencetypewithconfid:318,regist:13,registerinfo:162,registerset:319,registerstackadjustmentwithconfid:320,registerstackinfo:163,registervalu:164,registervaluetyp:117,relocationtyp:118,repoplugin:288,reportcollect:187,reporttyp:119,repositori:289,repositorymanag:290,savefilenamefield:188,scriptinginst:295,scriptingoutputlisten:296,scriptingprovid:[292,293,294,295,296,297,298,299,300],scriptingproviderexecuteresult:120,scriptingproviderinputreadyst:121,section:32,sectionsemant:122,segment:33,segmentflag:123,separatorfield:189,set:[68,301,302,303,304],set_auto_updates_en:341,set_worker_thread_count:248,settingsscop:124,show_graph_report:201,show_html_report:202,show_markdown_report:203,show_message_box:204,show_plain_text_report:205,show_report_collect:206,sizewithconfid:321,ssaflag:239,ssaregist:240,ssaregisterorflag:241,ssaregisterstack:242,ssavari:259,stackvariablerefer:165,stringrefer:34,stringtyp:125,structur:322,structureddatavalu:35,structureddataview:36,structurememb:323,structuretyp:126,symbol:324,symbolbind:127,symboltyp:128,textlinefield:190,transform:[305,306,307,308,309],transformparamet:307,transformtyp:129,type:[54,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329],typeclass:130,typeparserresult:326,undoact:[330,331],unescape_str:47,updat:[332,333,334,335,336,337,338,339,340,341,342,343],updatechannel:333,updateprogresscallback:334,updateresult:131,updates_check:342,updatevers:335,urlerror:69,urlopen:74,valuerang:166,variabl:167,variablesourcetyp:132,with_metaclass:[11,38,75,277,286,300,309,343],worker_enqueu:249,worker_interactive_enqueu:250,worker_priority_enqueu:251}}) \ No newline at end of file diff --git a/personal/binaryninja b/personal/binaryninja new file mode 100755 index 0000000..9a347c2 Binary files /dev/null and b/personal/binaryninja differ diff --git a/personal/docs/404.html b/personal/docs/404.html new file mode 100644 index 0000000..f182325 --- /dev/null +++ b/personal/docs/404.html @@ -0,0 +1,184 @@ + + + + + + + + + + + Binary Ninja User Documentation + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + +
  • + +
  • +
+
+
+
+
+ + +

404

+ +

Page not found

+ + +
+
+ + +
+
+ +
+ +
+ +
+ + + + + +
+ + + + + + diff --git a/personal/docs/about/license.html b/personal/docs/about/license.html new file mode 100644 index 0000000..1d250b3 --- /dev/null +++ b/personal/docs/about/license.html @@ -0,0 +1,478 @@ + + + + + + + + + + + License - Binary Ninja User Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + + +
  • About »
  • + + + +
  • License
  • +
  • + +
  • +
+
+
+
+
+ +

License

+

Binary Ninja comes in different versions. Depending on the terms under which you purchased it, a different license below may apply.

+

Non-commercial / Student License (NAMED)

+

BINARY NINJA SOFTWARE LICENSE AGREEMENT

+

(Non-commercial License)

+

IMPORTANT! BE SURE TO CAREFULLY READ AND UNDERSTAND ALL OF THE TERMS SET FORTH IN THIS LICENSE AGREEMENT (”LICENSE”). BY CLICKING THE "I ACCEPT" BUTTON OR OTHERWISE ACCEPTING THIS LICENSE THROUGH AN ORDERING DOCUMENT THAT INCORPORATES THIS LICENSE, YOU AGREE TO FOLLOW AND BE BOUND BY THE TERMS AND CONDITIONS OF THIS LICENSE. IF YOU DO NOT AGREE TO ALL THE TERMS AND CONDITIONS IN THIS LICENSE, YOU MUST SELECT THE "I DECLINE" BUTTON AND MAY NOT USE THE SOFTWARE.

+

This License is entered into by and between you (“you” or “your”) and Vector 35 Inc, a Delaware corporation (“us,” “we” or “our”).

+

We will license Binary Ninja™, a software application (the “Software”), to you under the mutual terms and conditions in this License. By installing the Software, you agree to be bound by the terms of this License. If you do not agree to the terms of this License, please do not install or attempt to use the Software.

+
    +
  1. +

    Non-Exclusive License Grant for Non-commercial Use. Under the terms of this License, the Software is licensed on a non-exclusive basis and is not sold. This License is for non- commercial purposes only. This means that you may not exercise any of the rights granted to you under this License in any manner that is intended for or directed toward commercial advantage or private monetary gain such as (a) activities undertaken for profit, or (b) activities intended to produce works, services, or data for commercial use, or (c) activities conducted, or funded, by a person or an entity engaged in the commercial use, application or exploitation of works similar to the Software. If you have any question regarding a particular use, please feel free to contact us regarding your particular circumstances. Please note, the Software under this non-commercial license is a different version than the standard version of Binary Ninja™. There is a fee to upgrade to the standard version of Binary Ninja™. This License grants you the rights a single user license that allows a copy of the Software to be installed and used by you on other computers you own as a single designated person. In other words, you may install the Software on more than one computer owned by you as long as there is only one physical computer running the Software at any time and as long as it is only used by you. This License does not permit any concurrent use. If other users will use the Software on any of the computers that the application will be installed on, then you are required to obtain additional licenses for each user who plans to use the Software. If your needs require concurrent use, please contact us for alternative licensing arrangements. We reserve all rights not expressly granted in this License.

    +
  2. +
  3. +

    License Fee. Prices are subject to change without prior notice and the price of a License today does not guarantee a similar price in the future.

    +
  4. +
  5. +

    Termination. Your license to the Software automatically terminates if you fail to comply with the terms of this License. Upon termination of this License, all licenses granted in Section 1 will terminate and you are required to stop using the Software and delete all copies in your possession or control. The following provisions will survive termination of this License: (i) your obligation to pay for services rendered before termination; (ii) Sections 6 through 14; and (iii) any other provision of this License that must survive termination to fulfill its essential purpose.

    +
  6. +
  7. +

    Modification and Upgrades. We may, from time to time, and in certain cases for a fee, replace, modify or upgrade the Software. The license fee includes one year of free upgrades. When accepted by you, any such replacement or modified Software code or upgrade to the Software will be considered part of the Software and subject to the terms of this License (unless this License is superseded by a further License accompanying such replacement or modified version of or upgrade to the Software).

    +
  8. +
  9. +

    Restrictions. Subject to applicable copyright, trade secret and other laws, you are permitted under this License to reverse engineer or de-compile the Software but you may not alter, duplicate, modify, rent, lease, loan, sublicense, create derivative works from or provide others with the Software in whole or part, or transmit or communicate any of the Software over a network in order to share it with others. These restrictions include prohibitions on the use the Software for service bureau or time-sharing purposes or in any other way allow third parties to exploit the Software. Time-sharing means sharing the Software with customers or other third parties and permitting their use of the Software. Service bureau involves your use of the Software on behalf of third parties, instead of your own use. It is your responsibility to determine if your use of the Software is in compliance with applicable laws.

    +
  10. +
  11. +

    Export Restrictions. You must use the Software in accordance with export laws and this means that you may not export, ship, transmit or re-export the Software, in whole or in part, in violation of any applicable law or regulation including but not limited to applicable export administration regulations issued by the U.S. Department of Commerce.

    +
  12. +
  13. +

    Disclaimer of Warranties. The Software is provided "as is" which means that we are providing no warranty of any kind. WE MAKE NO WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. We do not warrant that the Software will perform without error or that it will run without interruption.

    +
  14. +
  15. +

    Limitation of Liability. IN NO EVENT WILL OUR LIABILITY ARISING OUT OF OR RELATED TO THIS LICENSE EXCEED THE AGGREGATE OF FEES PAYABLE TO US UNDER THIS LICENSE (INCLUDING FEES BOTH PAID AND DUE) AT THE TIME OF THE EVENT GIVING RISE TO THE LIABILITY. IN NO EVENT WILL WE BE LIABLE FOR ANY CONSEQUENTIAL, INDIRECT, SPECIAL, INCIDENTAL, OR PUNITIVE DAMAGES. THE LIABILITIES LIMITED BY THIS SECTION 8 APPLY: (A) TO LIABILITY FOR NEGLIGENCE; (B) REGARDLESS OF THE FORM OF ACTION, WHETHER IN CONTRACT, TORT, STRICT PRODUCT LIABILITY, OR OTHERWISE; (C) EVEN IF WE ARE ADVISED IN ADVANCE OF THE POSSIBILITY OF THE DAMAGES IN QUESTION AND EVEN IF SUCH DAMAGES WERE FORESEEABLE; AND (D) EVEN IF YOUR REMEDIES FAIL OF THEIR ESSENTIAL PURPOSE. If applicable law limits the application of the provisions of this Section 8, our liability will be limited to the maximum extent permissible.

    +
  16. +
  17. +

    Severability. To the extent permitted by law, we waive and you waive any provision of law that would render any clause of this License invalid or otherwise unenforceable in any respect. In the event that a provision of this License is held to be invalid or otherwise unenforceable, such provision will be interpreted to fulfill its intended purpose to the maximum extent permitted by applicable law, and the remaining provisions of this License will continue in full force and effect.

    +
  18. +
  19. +

    Independent Contractors. We are not your agent and you are not our agent and so neither party may bind the other in any way. The parties are independent contractors and will represent themselves in all regards as independent contractors.

    +
  20. +
  21. +

    No Waiver. Neither party will be deemed to have waived any of its rights under this License by lapse of time or by any statement or representation other than in an explicit written waiver. No waiver of a breach of this License will constitute a waiver of any prior or subsequent breach of this License.

    +
  22. +
  23. +

    Force Majeure. To the extent caused by force majeure, no delay, failure, or default will constitute a breach of this License.

    +
  24. +
  25. +

    Assignment & Successors. Neither party may assign this License or any of its rights or obligations hereunder without the other’s express written consent, except that either party may assign this License to the surviving party in a merger of that party into another entity. Except to the extent forbidden in the previous sentence, this License will be binding upon and inure to the benefit of the respective successors and assigns of the parties.

    +
  26. +
  27. +

    Choice of Law & Jurisdiction. This License will be governed solely by the internal laws of the State of Florida, without reference to such State’s principles of conflicts of law. The parties consent to the personal and exclusive jurisdiction of the federal and state courts in or for Brevard County, Florida.

    +
  28. +
+

Commercial License (NAMED)

+

BINARY NINJA SOFTWARE LICENSE AGREEMENT

+

IMPORTANT! BE SURE TO CAREFULLY READ AND UNDERSTAND ALL OF THE TERMS SET FORTH IN THIS LICENSE AGREEMENT ("LICENSE"). BY CLICKING THE "I ACCEPT" BUTTON OR OTHERWISE ACCEPTING THIS LICENSE THROUGH AN ORDERING DOCUMENT THAT INCORPORATES THIS LICENSE, YOU AGREE TO FOLLOW AND BE BOUND BY THE TERMS AND CONDITIONS OF THIS LICENSE. IF YOU ARE ENTERING INTO THIS LICENSE ON BEHALF OF A COMPANY OR OTHER LEGAL ENTITY, YOU REPRESENT THAT YOU HAVE THE AUTHORITY TO BIND SUCH ENTITY TO THE TERMS AND CONDITIONS OF THIS LICENSE AND, IN SUCH EVENT, "YOU" AND "YOUR" AS USED IN THIS LICENSE SHALL REFER TO SUCH ENTITY, IF YOU DO NOT HAVE SUCH AUTHORITY, OR IF YOU DO NOT AGREE TO ALL THE TERMS AND CONDITIONS IN THIS LICENSE, YOU MUST SELECT THE "I DECLINE" BUTTON AND MAY NOT USE THE SOFTWARE.

+

This License is entered into by and between you ("you" or "your") and Vector 35 Inc, a Delaware corporation ("us", "we" or "our").

+

We will license Binary Ninja™, a software application (the "Software"), to you under the mutual terms and conditions in this License. By installing the Software, you agree to be bound by the terms of this License. If you do not agree to the terms of this License, please do not install or attempt to use the Software.

+
    +
  1. +

    Non-Exclusive License Grant. Under the terms of this License, the Software is licensed on a non-exclusive basis and is not sold. You receive no title to or ownership of the Software itself. This License grants you the rights a single user license that allows a copy of the Software to be installed and used by you on other computers you own as a single designated person. In other words, you may install the Software on more than one computer owned by you as long as there is only one physical computer running the Software at any time and as long as it is only used by you. This License does not permit any concurrent use. If other users will use the Software on any of the computers that the application will be installed on, then you are required to obtain additional licenses for each user who plans to use the Software. If your needs require concurrent use, please contact us for alternative licensing arrangements. If other users will use the Software, then you are required to obtain additional licenses for each user who plans to use the Software. All rights not expressly granted herein reserved by us.

    +
  2. +
  3. +

    License Fee. Prices are subject to change without prior notice and the price of a License today does not guarantee a similar price in the future.

    +
  4. +
  5. +

    Termination. Your license to the Software automatically terminates if you fail to comply with the terms of this License. Upon termination of this License, all licenses granted in Section 1 will terminate and you are required to stop using the Software and delete all copies in your possession or control. The following provisions will survive termination of this License: (i) your obligation to pay for services rendered before termination; (ii) Sections 6 through 14; and (iii) any other provision of this License that must survive termination to fulfill its essential purpose.

    +
  6. +
  7. +

    Modification and Upgrades. We may, from time to time, and in certain cases for a fee, replace, modify or upgrade the Software. The license fee includes one year of free upgrades. When accepted by you, any such replacement or modified Software code or upgrade to the Software will be considered part of the Software and subject to the terms of this License (unless this License is superseded by a further License accompanying such replacement or modified version of or upgrade to the Software).

    +
  8. +
  9. +

    Restrictions. Subject to applicable copyright, trade secret and other laws, you are permitted under this License to reverse engineer or de-compile the Software but you may not alter, duplicate, modify, rent, lease, loan, sublicense, create derivative works from or provide others with the Software in whole or part, or transmit or communicate any of the Software over a network in order to share it with others. These restrictions include prohibitions on the use the Software for service bureau or time-sharing purposes or in any other way allow third parties to exploit the Software. Time-sharing means sharing the Software with customers or other third parties and permitting their use of the Software. Service bureau involves your use of the Software on behalf of third parties, instead of your own use. It is your responsibility to determine if your use of the Software is in compliance with applicable laws.

    +
  10. +
  11. +

    Export Restrictions. You must use the Software in accordance with export laws and this means that you may not export, ship, transmit or re-export the Software, in whole or in part, in violation of any applicable law or regulation including but not limited to applicable export administration regulations issued by the U.S. Department of Commerce.

    +
  12. +
  13. +

    Disclaimer of Warranties. The Software is provided "as is" which means that we are providing no warranty of any kind. WE MAKE NO WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. We do not warrant that the Software will perform without error or that it will run without interruption.

    +
  14. +
  15. +

    Limitation of Liability. IN NO EVENT WILL OUR LIABILITY ARISING OUT OF OR RELATED TO THIS LICENSE EXCEED THE AGGREGATE OF FEES PAYABLE TO US UNDER THIS LICENSE (INCLUDING FEES BOTH PAID AND DUE) AT THE TIME OF THE EVENT GIVING RISE TO THE LIABILITY. IN NO EVENT WILL WE BE LIABLE FOR ANY CONSEQUENTIAL, INDIRECT, SPECIAL, INCIDENTAL, OR PUNITIVE DAMAGES. THE LIABILITIES LIMITED BY THIS SECTION 8 APPLY: (A) TO LIABILITY FOR NEGLIGENCE; (B) REGARDLESS OF THE FORM OF ACTION, WHETHER IN CONTRACT, TORT, STRICT PRODUCT LIABILITY, OR OTHERWISE; (C) EVEN IF WE ARE ADVISED IN ADVANCE OF THE POSSIBILITY OF THE DAMAGES IN QUESTION AND EVEN IF SUCH DAMAGES WERE FORESEEABLE; AND (D) EVEN IF YOUR REMEDIES FAIL OF THEIR ESSENTIAL PURPOSE. If applicable law limits the application of the provisions of this Section 8, our liability will be limited to the maximum extent permissible.

    +
  16. +
  17. +

    Severability. To the extent permitted by law, we waive and you waive any provision of law that would render any clause of this License invalid or otherwise unenforceable in any respect. In the event that a provision of this License is held to be invalid or otherwise unenforceable, such provision will be interpreted to fulfill its intended purpose to the maximum extent permitted by applicable law, and the remaining provisions of this License will continue in full force and effect.

    +
  18. +
  19. +

    Independent Contractors. We are not your agent and you are not our agent and so neither party may bind the other in any way. The parties are independent contractors and will represent themselves in all regards as independent contractors.

    +
  20. +
  21. +

    No Waiver. Neither party will be deemed to have waived any of its rights under this License by lapse of time or by any statement or representation other than in an explicit written waiver. No waiver of a breach of this License will constitute a waiver of any prior or subsequent breach of this License.

    +
  22. +
  23. +

    Force Majeure. To the extent caused by force majeure, no delay, failure, or default will constitute a breach of this License.

    +
  24. +
  25. +

    Assignment & Successors. Neither party may assign this License or any of its rights or obligations hereunder without the other’s express written consent, except that either party may assign this License to the surviving party in a merger of that party into another entity. Except to the extent forbidden in the previous sentence, this License will be binding upon and inure to the benefit of the respective successors and assigns of the parties.

    +
  26. +
  27. +

    Choice of Law & Jurisdiction. This License will be governed solely by the internal laws of the State of Florida, without reference to such State’s principles of conflicts of law. The parties consent to the personal and exclusive jurisdiction of the federal and state courts in or for Brevard County, Florida.

    +
  28. +
+

Non-commercial / Student License (COMPUTER)

+

BINARY NINJA SOFTWARE LICENSE AGREEMENT

+

(Non-commercial Computer License)

+

IMPORTANT! BE SURE TO CAREFULLY READ AND UNDERSTAND ALL OF THE TERMS SET FORTH IN THIS LICENSE AGREEMENT (”LICENSE”). BY CLICKING THE "I ACCEPT" BUTTON OR OTHERWISE ACCEPTING THIS LICENSE THROUGH AN ORDERING DOCUMENT THAT INCORPORATES THIS LICENSE, YOU AGREE TO FOLLOW AND BE BOUND BY THE TERMS AND CONDITIONS OF THIS LICENSE. IF YOU DO NOT AGREE TO ALL THE TERMS AND CONDITIONS IN THIS LICENSE, YOU MUST SELECT THE "I DECLINE" BUTTON AND MAY NOT USE THE SOFTWARE.

+

This License is entered into by and between you (“you” or “your”) and Vector 35 Inc, a Delaware corporation (“us,” “we” or “our”).

+

We will license Binary Ninja™, a software application (the “Software”), to you under the mutual terms and conditions in this License. By installing the Software, you agree to be bound by the terms of this License. If you do not agree to the terms of this License, please do not install or attempt to use the Software.

+
    +
  1. +

    Non-Exclusive License Grant for Non-commercial Use. Under the terms of this License, the Software is licensed on a non-exclusive basis and is not sold. This License is for non- commercial purposes only. This means that you may not exercise any of the rights granted to you under this License in any manner that is intended for or directed toward commercial advantage or private monetary gain such as (a) activities undertaken for profit, or (b) activities intended to produce works, services, or data for commercial use, or (c) activities conducted, or funded, by a person or an entity engaged in the commercial use, application or exploitation of works similar to the Software. If you have any question regarding a particular use, please feel free to contact us regarding your particular circumstances. Please note, the Software under this non-commercial license is a different version than the standard version of Binary Ninja™. There is a fee to upgrade to the standard version of Binary Ninja™. This License grants you the rights to a computer license that allows a copy of the Software to be installed and used by you on a particular single computer you own (the “Designated Computer”) which Designated Computer may be used by any user as long as it is used for non-commercial purposes. In other words, you may install the Software only on one computer owned by you but you may allow multiple users to use the Software on such Designated Computer as long as the Designated Computer is the only physical computer running the Software at any time and it is used for non-commercial purposes. This License does not permit any concurrent use. If you will use the Software on any computers other than the Designated Computer that the application will be installed on, then you are required to obtain additional licenses for each such computer upon which the Software will be installed. If your needs require concurrent use, please contact us for alternative licensing arrangements. We reserve all rights not expressly granted in this License.

    +
  2. +
  3. +

    License Fee. Prices are subject to change without prior notice and the price of a License today does not guarantee a similar price in the future.

    +
  4. +
  5. +

    Termination. Your license to the Software automatically terminates if you fail to comply with the terms of this License. Upon termination of this License, all licenses granted in Section 1 will terminate and you are required to stop using the Software and delete all copies in your possession or control. The following provisions will survive termination of this License: (i) your obligation to pay for services rendered before termination; (ii) Sections 6 through 14; and (iii) any other provision of this License that must survive termination to fulfill its essential purpose.

    +
  6. +
  7. +

    Modification and Upgrades. We may, from time to time, and in certain cases for a fee, replace, modify or upgrade the Software. The license fee includes one year of free upgrades. When accepted by you, any such replacement or modified Software code or upgrade to the Software will be considered part of the Software and subject to the terms of this License (unless this License is superseded by a further License accompanying such replacement or modified version of or upgrade to the Software).

    +
  8. +
  9. +

    Restrictions. Subject to applicable copyright, trade secret and other laws, you are permitted under this License to reverse engineer or de-compile the Software but you may not alter, duplicate, modify, rent, lease, loan, sublicense, create derivative works from or provide others with the Software in whole or part, or transmit or communicate any of the Software over a network in order to share it with others. These restrictions include prohibitions on the use the Software for service bureau or time-sharing purposes or in any other way allow third parties to exploit the Software. Time-sharing means sharing the Software with customers or other third parties and permitting their use of the Software. Service bureau involves your use of the Software on behalf of third parties, instead of your own use. It is your responsibility to determine if your use of the Software is in compliance with applicable laws.

    +
  10. +
  11. +

    Export Restrictions. You must use the Software in accordance with export laws and this means that you may not export, ship, transmit or re-export the Software, in whole or in part, in violation of any applicable law or regulation including but not limited to applicable export administration regulations issued by the U.S. Department of Commerce.

    +
  12. +
  13. +

    Disclaimer of Warranties. The Software is provided "as is" which means that we are providing no warranty of any kind. WE MAKE NO WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. We do not warrant that the Software will perform without error or that it will run without interruption.

    +
  14. +
  15. +

    Limitation of Liability. IN NO EVENT WILL OUR LIABILITY ARISING OUT OF OR RELATED TO THIS LICENSE EXCEED THE AGGREGATE OF FEES PAYABLE TO US UNDER THIS LICENSE (INCLUDING FEES BOTH PAID AND DUE) AT THE TIME OF THE EVENT GIVING RISE TO THE LIABILITY. IN NO EVENT WILL WE BE LIABLE FOR ANY CONSEQUENTIAL, INDIRECT, SPECIAL, INCIDENTAL, OR PUNITIVE DAMAGES. THE LIABILITIES LIMITED BY THIS SECTION 8 APPLY: (A) TO LIABILITY FOR NEGLIGENCE; (B) REGARDLESS OF THE FORM OF ACTION, WHETHER IN CONTRACT, TORT, STRICT PRODUCT LIABILITY, OR OTHERWISE; (C) EVEN IF WE ARE ADVISED IN ADVANCE OF THE POSSIBILITY OF THE DAMAGES IN QUESTION AND EVEN IF SUCH DAMAGES WERE FORESEEABLE; AND (D) EVEN IF YOUR REMEDIES FAIL OF THEIR ESSENTIAL PURPOSE. If applicable law limits the application of the provisions of this Section 8, our liability will be limited to the maximum extent permissible.

    +
  16. +
  17. +

    Severability. To the extent permitted by law, we waive and you waive any provision of law that would render any clause of this License invalid or otherwise unenforceable in any respect. In the event that a provision of this License is held to be invalid or otherwise unenforceable, such provision will be interpreted to fulfill its intended purpose to the maximum extent permitted by applicable law, and the remaining provisions of this License will continue in full force and effect.

    +
  18. +
  19. +

    Independent Contractors. We are not your agent and you are not our agent and so neither party may bind the other in any way. The parties are independent contractors and will represent themselves in all regards as independent contractors.

    +
  20. +
  21. +

    No Waiver. Neither party will be deemed to have waived any of its rights under this License by lapse of time or by any statement or representation other than in an explicit written waiver. No waiver of a breach of this License will constitute a waiver of any prior or subsequent breach of this License.

    +
  22. +
  23. +

    Force Majeure. To the extent caused by force majeure, no delay, failure, or default will constitute a breach of this License.

    +
  24. +
  25. +

    Assignment & Successors. Neither party may assign this License or any of its rights or obligations hereunder without the other’s express written consent, except that either party may assign this License to the surviving party in a merger of that party into another entity. Except to the extent forbidden in the previous sentence, this License will be binding upon and inure to the benefit of the respective successors and assigns of the parties.

    +
  26. +
  27. +

    Choice of Law & Jurisdiction. This License will be governed solely by the internal laws of the State of Florida, without reference to such State’s principles of conflicts of law. The parties consent to the personal and exclusive jurisdiction of the federal and state courts in or for Brevard County, Florida.

    +
  28. +
+

Commercial License (COMPUTER)

+

BINARY NINJA SOFTWARE LICENSE AGREEMENT

+

IMPORTANT! BE SURE TO CAREFULLY READ AND UNDERSTAND ALL OF THE TERMS SET FORTH IN THIS LICENSE AGREEMENT ("LICENSE"). BY CLICKING THE "I ACCEPT" BUTTON OR OTHERWISE ACCEPTING THIS LICENSE THROUGH AN ORDERING DOCUMENT THAT INCORPORATES THIS LICENSE, YOU AGREE TO FOLLOW AND BE BOUND BY THE TERMS AND CONDITIONS OF THIS LICENSE. IF YOU ARE ENTERING INTO THIS LICENSE ON BEHALF OF A COMPANY OR OTHER LEGAL ENTITY, YOU REPRESENT THAT YOU HAVE THE AUTHORITY TO BIND SUCH ENTITY TO THE TERMS AND CONDITIONS OF THIS LICENSE AND, IN SUCH EVENT, "YOU" AND "YOUR" AS USED IN THIS LICENSE SHALL REFER TO SUCH ENTITY, IF YOU DO NOT HAVE SUCH AUTHORITY, OR IF YOU DO NOT AGREE TO ALL THE TERMS AND CONDITIONS IN THIS LICENSE, YOU MUST SELECT THE "I DECLINE" BUTTON AND MAY NOT USE THE SOFTWARE.

+

This License is entered into by and between you ("you" or "your") and Vector 35 Inc, a Delaware corporation ("us", "we" or "our").

+

We will license Binary Ninja™, a software application (the "Software"), to you under the mutual terms and conditions in this License. By installing the Software, you agree to be bound by the terms of this License. If you do not agree to the terms of this License, please do not install or attempt to use the Software.

+
    +
  1. +

    Non-Exclusive License Grant. Under the terms of this License, the Software is licensed on a non-exclusive basis and is not sold. You receive no title to or ownership of the Software itself. This License grants you the rights to a computer license that allows a copy of the Software to be installed and used by you on a particular single computer you own (the “Designated Computer”) which Designated Computer may be used by any user. In other words, you may install the Software only on one computer owned by you but you may allow multiple users to use the Software on such Designated Computer as long as the Designated Computer is the only physical computer running the Software at any time. This License does not permit any concurrent use. If you will use the Software on any computers other than the Designated Computer that the application will be installed on, then you are required to obtain additional licenses for each such computer upon which the Software will be installed. If your needs require concurrent use, please contact us for alternative licensing arrangements. All rights not expressly granted herein reserved by us.

    +
  2. +
  3. +

    License Fee. Prices are subject to change without prior notice and the price of a License today does not guarantee a similar price in the future.

    +
  4. +
  5. +

    Termination. Your license to the Software automatically terminates if you fail to comply with the terms of this License. Upon termination of this License, all licenses granted in Section 1 will terminate and you are required to stop using the Software and delete all copies in your possession or control. The following provisions will survive termination of this License: (i) your obligation to pay for services rendered before termination; (ii) Sections 6 through 14; and (iii) any other provision of this License that must survive termination to fulfill its essential purpose.

    +
  6. +
  7. +

    Modification and Upgrades. We may, from time to time, and in certain cases for a fee, replace, modify or upgrade the Software. The license fee includes one year of free upgrades. When accepted by you, any such replacement or modified Software code or upgrade to the Software will be considered part of the Software and subject to the terms of this License (unless this License is superseded by a further License accompanying such replacement or modified version of or upgrade to the Software).

    +
  8. +
  9. +

    Restrictions. Subject to applicable copyright, trade secret and other laws, you are permitted under this License to reverse engineer or de-compile the Software but you may not alter, duplicate, modify, rent, lease, loan, sublicense, create derivative works from or provide others with the Software in whole or part, or transmit or communicate any of the Software over a network in order to share it with others. These restrictions include prohibitions on the use the Software for service bureau or time-sharing purposes or in any other way allow third parties to exploit the Software. Time-sharing means sharing the Software with customers or other third parties and permitting their use of the Software. Service bureau involves your use of the Software on behalf of third parties, instead of your own use. It is your responsibility to determine if your use of the Software is in compliance with applicable laws.

    +
  10. +
  11. +

    Export Restrictions. You must use the Software in accordance with export laws and this means that you may not export, ship, transmit or re-export the Software, in whole or in part, in violation of any applicable law or regulation including but not limited to applicable export administration regulations issued by the U.S. Department of Commerce.

    +
  12. +
  13. +

    Disclaimer of Warranties. The Software is provided "as is" which means that we are providing no warranty of any kind. WE MAKE NO WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. We do not warrant that the Software will perform without error or that it will run without interruption.

    +
  14. +
  15. +

    Limitation of Liability. IN NO EVENT WILL OUR LIABILITY ARISING OUT OF OR RELATED TO THIS LICENSE EXCEED THE AGGREGATE OF FEES PAYABLE TO US UNDER THIS LICENSE (INCLUDING FEES BOTH PAID AND DUE) AT THE TIME OF THE EVENT GIVING RISE TO THE LIABILITY. IN NO EVENT WILL WE BE LIABLE FOR ANY CONSEQUENTIAL, INDIRECT, SPECIAL, INCIDENTAL, OR PUNITIVE DAMAGES. THE LIABILITIES LIMITED BY THIS SECTION 8 APPLY: (A) TO LIABILITY FOR NEGLIGENCE; (B) REGARDLESS OF THE FORM OF ACTION, WHETHER IN CONTRACT, TORT, STRICT PRODUCT LIABILITY, OR OTHERWISE; (C) EVEN IF WE ARE ADVISED IN ADVANCE OF THE POSSIBILITY OF THE DAMAGES IN QUESTION AND EVEN IF SUCH DAMAGES WERE FORESEEABLE; AND (D) EVEN IF YOUR REMEDIES FAIL OF THEIR ESSENTIAL PURPOSE. If applicable law limits the application of the provisions of this Section 8, our liability will be limited to the maximum extent permissible.

    +
  16. +
  17. +

    Severability. To the extent permitted by law, we waive and you waive any provision of law that would render any clause of this License invalid or otherwise unenforceable in any respect. In the event that a provision of this License is held to be invalid or otherwise unenforceable, such provision will be interpreted to fulfill its intended purpose to the maximum extent permitted by applicable law, and the remaining provisions of this License will continue in full force and effect.

    +
  18. +
  19. +

    Independent Contractors. We are not your agent and you are not our agent and so neither party may bind the other in any way. The parties are independent contractors and will represent themselves in all regards as independent contractors.

    +
  20. +
  21. +

    No Waiver. Neither party will be deemed to have waived any of its rights under this License by lapse of time or by any statement or representation other than in an explicit written waiver. No waiver of a breach of this License will constitute a waiver of any prior or subsequent breach of this License.

    +
  22. +
  23. +

    Force Majeure. To the extent caused by force majeure, no delay, failure, or default will constitute a breach of this License.

    +
  24. +
  25. +

    Assignment & Successors. Neither party may assign this License or any of its rights or obligations hereunder without the other’s express written consent, except that either party may assign this License to the surviving party in a merger of that party into another entity. Except to the extent forbidden in the previous sentence, this License will be binding upon and inure to the benefit of the respective successors and assigns of the parties.

    +
  26. +
  27. +

    Choice of Law & Jurisdiction. This License will be governed solely by the internal laws of the State of Florida, without reference to such State’s principles of conflicts of law. The parties consent to the personal and exclusive jurisdiction of the federal and state courts in or for Brevard County, Florida.

    +
  28. +
+

Demo License

+

BINARY NINJA™ TRIAL PERIOD SOFTWARE DEMONSTRATION LICENSE AGREEMENT

+

IMPORTANT! BE SURE TO CAREFULLY READ AND UNDERSTAND ALL OF THE TERMS SET FORTH IN THIS TRIAL PERIOD DEMONSTRATION LICENSE AGREEMENT ("DEMONSTRATION LICENSE"). BY CLICKING THE "I ACCEPT" BUTTON OR OTHERWISE ACCEPTING THIS DEMONSTRATION LICENSE THROUGH AN ORDERING DOCUMENT THAT INCORPORATES THIS DEMONSTRATION LICENSE, YOU AGREE TO FOLLOW AND BE BOUND BY THE TERMS AND CONDITIONS OF THIS DEMONSTRATION LICENSE. IF YOU ARE ENTERING INTO THIS DEMONSTRATION LICENSE ON BEHALF OF A COMPANY OR OTHER LEGAL ENTITY, YOU REPRESENT THAT YOU HAVE THE AUTHORITY TO BIND SUCH ENTITY TO THE TERMS AND CONDITIONS OF THIS DEMONSTRATION LICENSE AND, IN SUCH EVENT, "YOU" AND "YOUR" AS USED IN THIS DEMONSTRATION LICENSE SHALL REFER TO SUCH ENTITY, IF YOU DO NOT HAVE SUCH AUTHORITY, OR IF YOU DO NOT AGREE TO ALL THE TERMS AND CONDITIONS IN THIS DEMONSTRATION LICENSE, YOU MUST SELECT THE "I DECLINE" BUTTON AND MAY NOT USE THE SOFTWARE.

+

This Demonstration License is entered into by and between you ("you" or "your") and Vector 35 Inc, a Delaware corporation ("us", "we" or "our").

+

We will license a “free to use” demonstration version of Binary Ninja™, a software application (the "Demonstration Software"), to you under the mutual terms and conditions in this Demonstration License for your internal evaluation purposes only. Notwithstanding anything to the contrary in this Demonstration License, we reserve the right to revoke or terminate the Demonstration Software and this Demonstration License any at any time in our sole discretion. By installing the Demonstration Software, you agree to be bound by the terms of this Demonstration License. If you do not agree to the terms of this Demonstration License, please do not install or attempt to use the Demonstration Software.

+
    +
  1. +

    Non-Exclusive Demonstration License Grant. Under the terms of this Demonstration License, the Demonstration Software is licensed on a non-exclusive basis and is not sold. You receive no title to or ownership of the Demonstration Software itself. This License is for non- commercial purposes only. This Demonstration License grants you the rights a single user license that allows a copy of the Demonstration Software to be installed and used by you on other computers you own as a single designated person. In other words, you may install the Demonstration Software on more than one computer owned by you as long as there is only one physical computer running the Demonstration Software at any time and as long as it is only used by you. This Demonstration License does not permit any concurrent use. If other users will use the Demonstration Software on any of the computers that the application will be installed on, then you are required to obtain additional licenses for each user who plans to use the Demonstration Software. If your needs require concurrent use, please contact us for alternative licensing arrangements. If other users will use the Demonstration Software, then you are required to obtain additional licenses for each user who plans to use the Demonstration Software. All rights not expressly granted herein reserved by us.

    +
  2. +
  3. +

    Free Use Demonstration License. Subject to the terms of this Demonstration License, there is no fee for the use of the Demonstration Software. Upon revocation of the Demonstration License by us, you must obtain a paid end user license for Binary Ninja™ if you intend to continue use.

    +
  4. +
  5. +

    Termination. You may terminate this Demonstration License at any time (i) by destroying all copies of Demonstration Software and related documentation and purging same from memory devices (this is required at the termination of this Demonstration License).  Your license to the Demonstration Software automatically terminates if you fail to comply with the terms of this Demonstration License. Upon termination of this Demonstration License, all licenses granted in Section 1 will terminate and you are required to stop using the Demonstration Software and delete all copies in your possession or control. The following provisions will survive termination of this Demonstration License: (i) Sections 6 through 14; and (ii) any other provision of this Demonstration License that must survive termination to fulfill its essential purpose.

    +
  6. +
  7. +

    Modification and Upgrades. We may, from time to time replace, modify or upgrade the Demonstration Software. When accepted by you, any such replacement or modified Demonstration Software code or upgrade to the Demonstration Software will be considered part of the Demonstration Software and subject to the terms of this Demonstration License (unless this Demonstration License is superseded by a further Demonstration License accompanying such replacement or modified version of or upgrade to the Demonstration Software).

    +
  8. +
  9. +

    Restrictions. Unlike the licenses for our full versions of Binary Ninja™, you may not decompile, decrypt, reverse engineer, disassemble or otherwise reduce the Demonstration Software to human-readable form under this Demonstration License, or permit third parties to do the same. Further, you may not alter, duplicate, modify, rent, lease, loan, sublicense, create derivative works from, or provide others with the Demonstration Software in whole or part, or transmit or communicate any of the Demonstration Software over a network in order to share the Demonstration Software with others. These restrictions include prohibitions on the use the Demonstration Software for service bureau or time-sharing purposes or in any other way allow third parties to exploit the Demonstration Software. Time-sharing means sharing the Demonstration Software with customers or other third parties and permitting their use of the Demonstration Software. Service bureau involves your use of the Demonstration Software on behalf of third parties, instead of your own use. It is your responsibility to determine if your use of the Demonstration Software is in compliance with applicable laws.

    +
  10. +
  11. +

    Export Restrictions. You must use the Demonstration Software in accordance with export laws and this means that you may not export, ship, transmit or re-export the Demonstration Software, in whole or in part, in violation of any applicable law or regulation including but not limited to applicable export administration regulations issued by the U.S. Department of Commerce.

    +
  12. +
  13. +

    Disclaimer of Warranties. The Demonstration Software is provided "as is" which means that we are providing no warranty of any kind. WE MAKE NO WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. We do not warrant that the Demonstration Software will perform without error or that it will run without interruption.

    +
  14. +
  15. +

    Limitation of Liability. IN NO EVENT WILL OUR LIABILITY ARISING OUT OF OR RELATED TO THIS DEMONSTRATION LICENSE EXCEED $500. IN NO EVENT WILL WE BE LIABLE FOR ANY CONSEQUENTIAL, INDIRECT, SPECIAL, INCIDENTAL, OR PUNITIVE DAMAGES. THE LIABILITIES LIMITED BY THIS SECTION 8 APPLY: (A) TO LIABILITY FOR NEGLIGENCE; (B) REGARDLESS OF THE FORM OF ACTION, WHETHER IN CONTRACT, TORT, STRICT PRODUCT LIABILITY, OR OTHERWISE; (C) EVEN IF WE ARE ADVISED IN ADVANCE OF THE POSSIBILITY OF THE DAMAGES IN QUESTION AND EVEN IF SUCH DAMAGES WERE FORESEEABLE; AND (D) EVEN IF YOUR REMEDIES FAIL OF THEIR ESSENTIAL PURPOSE. If applicable law limits the application of the provisions of this Section 8, our liability will be limited to the maximum extent permissible.

    +
  16. +
  17. +

    Severability. To the extent permitted by law, we waive and you waive any provision of law that would render any clause of this Demonstration License invalid or otherwise unenforceable in any respect. In the event that a provision of this Demonstration License is held to be invalid or otherwise unenforceable, such provision will be interpreted to fulfill its intended purpose to the maximum extent permitted by applicable law, and the remaining provisions of this Demonstration License will continue in full force and effect.

    +
  18. +
  19. +

    Independent Contractors. We are not your agent and you are not our agent and so neither party may bind the other in any way. The parties are independent contractors and will represent themselves in all regards as independent contractors.

    +
  20. +
  21. +

    No Waiver. Neither party will be deemed to have waived any of its rights under this Demonstration License by lapse of time or by any statement or representation other than in an explicit written waiver. No waiver of a breach of this Demonstration License will constitute a waiver of any prior or subsequent breach of this Demonstration License.

    +
  22. +
  23. +

    Force Majeure. To the extent caused by force majeure, no delay, failure, or default will constitute a breach of this Demonstration License.

    +
  24. +
  25. +

    Assignment & Successors. Neither party may assign this Demonstration License or any of its rights or obligations hereunder without the other’s express written consent, except that either party may assign this Demonstration License to the surviving party in a merger of that party into another entity. Except to the extent forbidden in the previous sentence, this Demonstration License will be binding upon and inure to the benefit of the respective successors and assigns of the parties.

    +
  26. +
  27. +

    Choice of Law & Jurisdiction. This Demonstration License will be governed solely by the internal laws of the State of Florida, without reference to such State’s principles of conflicts of law. The parties consent to the personal and exclusive jurisdiction of the federal and state courts in or for Brevard County, Florida.

    +
  28. +
+

Enterprise License

+

The enterprise license is forthcoming.

+ +
+
+ + +
+
+ +
+ +
+ +
+ + + + « Previous + + + Next » + + +
+ + + + + + diff --git a/personal/docs/about/open-source.html b/personal/docs/about/open-source.html new file mode 100644 index 0000000..3086f5b --- /dev/null +++ b/personal/docs/about/open-source.html @@ -0,0 +1,283 @@ + + + + + + + + + + + Open Source - Binary Ninja User Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + + +
  • About »
  • + + + +
  • Open Source
  • +
  • + +
  • +
+
+
+
+
+ +

Binary Ninja

+

Open Source

+

Vector 35 is grateful for the following open source packages that are used in Binary Ninja directly or indirectly:

+ +

The previous tools are used in the generation of our documentation, but are not distributed themselves and are merely listed here in acknowledgement for the value they provide.

+ +

Building Qt

+

Binary Ninja uses Qt 5.12 under an LGPLv3 license which requires that we host the original sources used to build Qt for our application along with instructions on how that source may be re-built and can replace the version of Qt shipped with Binary Ninja.

+

Please note that we offer no support for running Binary Ninja with modified Qt libraries.

+
    +
  1. Follow the installation requirements on the Building Qt 5 from Git page.
  2. +
  3. Download the Qt 5.12.0 tarball from binary.ninja. (Note this is an unmodified 5.12 identical to that available from Qt's source control, but must be hosted locally according to the Qt 5.12 terms.)
  4. +
  5. Next, build QT using the aforementioned instructions.
  6. +
  7. On OS X, you will need to disable the code-signing signature since it would otherwise prevent changes to binaries or shared libraries. We recommend a tool such as unsign.
  8. +
  9. Finally, replace the built libraries:
      +
    • On OS X, replace the QtCore.framework, QtDBus.framework, QtGui.framework, QtNetwork.framework, QtPrintSupport.framework, QtWidgets.framework folders inside of /Applications/Binary Ninja.app/Contents/Frameworks
    • +
    • On Windows, replace the Qt5core.dll, Qt5Gui.dll, Qt5Network.dll, and Qt5Widgets.dll files in C:\Program Files\Vector35\BinaryNinja\
    • +
    • On Linux, replace the libQt5Core.so.5, libQt5DBus.so.5, libQt5Gui.so.5, libQt5Network.so.5, libQt5Widgets.so.5, libQt5XcbQpa.so.5 files wherever Binary Ninja was extracted
    • +
    +
  10. +
+ +
+
+ + +
+
+ +
+ +
+ +
+ + + + « Previous + + + +
+ + + + + + diff --git a/personal/docs/css/theme.css b/personal/docs/css/theme.css new file mode 100644 index 0000000..099a2d8 --- /dev/null +++ b/personal/docs/css/theme.css @@ -0,0 +1,12 @@ +/* + * This file is copied from the upstream ReadTheDocs Sphinx + * theme. To aid upgradability this file should *not* be edited. + * modifications we need should be included in theme_extra.css. + * + * https://github.com/rtfd/readthedocs.org/blob/master/readthedocs/core/static/core/css/theme.css + */ + +*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}[hidden]{display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:hover,a:active{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;color:#000;text-decoration:none}mark{background:#ff0;color:#000;font-style:italic;font-weight:bold}pre,code,.rst-content tt,kbd,samp{font-family:monospace,serif;_font-family:"courier new",monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:before,q:after{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}ul,ol,dl{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:0;margin:0;padding:0}label{cursor:pointer}legend{border:0;*margin-left:-7px;padding:0;white-space:normal}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top;resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:0.2em 0;background:#ccc;color:#000;padding:0.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none !important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{html,body,section{background:none !important}*{box-shadow:none !important;text-shadow:none !important;filter:none !important;-ms-filter:none !important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}.fa:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.btn,input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"],select,textarea,.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a,.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a,.wy-nav-top a{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.1.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.1.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff?v=4.1.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.1.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.icon{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:0.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:0.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.rst-content .pull-left.admonition-title,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content dl dt .pull-left.headerlink,.pull-left.icon{margin-right:.3em}.fa.pull-right,.rst-content .pull-right.admonition-title,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content dl dt .pull-right.headerlink,.pull-right.icon{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1)}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.rst-content .admonition-title:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.wy-dropdown .caret:before,.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-square:before,.fa-pied-piper:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.icon,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context{font-family:inherit}.fa:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before{font-family:"FontAwesome";display:inline-block;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa,a .rst-content .admonition-title,.rst-content a .admonition-title,a .rst-content h1 .headerlink,.rst-content h1 a .headerlink,a .rst-content h2 .headerlink,.rst-content h2 a .headerlink,a .rst-content h3 .headerlink,.rst-content h3 a .headerlink,a .rst-content h4 .headerlink,.rst-content h4 a .headerlink,a .rst-content h5 .headerlink,.rst-content h5 a .headerlink,a .rst-content h6 .headerlink,.rst-content h6 a .headerlink,a .rst-content dl dt .headerlink,.rst-content dl dt a .headerlink,a .icon{display:inline-block;text-decoration:inherit}.btn .fa,.btn .rst-content .admonition-title,.rst-content .btn .admonition-title,.btn .rst-content h1 .headerlink,.rst-content h1 .btn .headerlink,.btn .rst-content h2 .headerlink,.rst-content h2 .btn .headerlink,.btn .rst-content h3 .headerlink,.rst-content h3 .btn .headerlink,.btn .rst-content h4 .headerlink,.rst-content h4 .btn .headerlink,.btn .rst-content h5 .headerlink,.rst-content h5 .btn .headerlink,.btn .rst-content h6 .headerlink,.rst-content h6 .btn .headerlink,.btn .rst-content dl dt .headerlink,.rst-content dl dt .btn .headerlink,.btn .icon,.nav .fa,.nav .rst-content .admonition-title,.rst-content .nav .admonition-title,.nav .rst-content h1 .headerlink,.rst-content h1 .nav .headerlink,.nav .rst-content h2 .headerlink,.rst-content h2 .nav .headerlink,.nav .rst-content h3 .headerlink,.rst-content h3 .nav .headerlink,.nav .rst-content h4 .headerlink,.rst-content h4 .nav .headerlink,.nav .rst-content h5 .headerlink,.rst-content h5 .nav .headerlink,.nav .rst-content h6 .headerlink,.rst-content h6 .nav .headerlink,.nav .rst-content dl dt .headerlink,.rst-content dl dt .nav .headerlink,.nav .icon{display:inline}.btn .fa.fa-large,.btn .rst-content .fa-large.admonition-title,.rst-content .btn .fa-large.admonition-title,.btn .rst-content h1 .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.btn .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .btn .fa-large.headerlink,.btn .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .fa-large.admonition-title,.rst-content .nav .fa-large.admonition-title,.nav .rst-content h1 .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.nav .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.nav .fa-large.icon{line-height:0.9em}.btn .fa.fa-spin,.btn .rst-content .fa-spin.admonition-title,.rst-content .btn .fa-spin.admonition-title,.btn .rst-content h1 .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.btn .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .btn .fa-spin.headerlink,.btn .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .fa-spin.admonition-title,.rst-content .nav .fa-spin.admonition-title,.nav .rst-content h1 .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.nav .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.nav .fa-spin.icon{display:inline-block}.btn.fa:before,.rst-content .btn.admonition-title:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content dl dt .btn.headerlink:before,.btn.icon:before{opacity:0.5;-webkit-transition:opacity 0.05s ease-in;-moz-transition:opacity 0.05s ease-in;transition:opacity 0.05s ease-in}.btn.fa:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.btn.icon:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .rst-content .admonition-title:before,.rst-content .btn-mini .admonition-title:before,.btn-mini .rst-content h1 .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.btn-mini .rst-content dl dt .headerlink:before,.rst-content dl dt .btn-mini .headerlink:before,.btn-mini .icon:before{font-size:14px;vertical-align:-15%}.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.wy-alert-title,.rst-content .admonition-title{color:#fff;font-weight:bold;display:block;color:#fff;background:#6ab0de;margin:-12px;padding:6px 12px;margin-bottom:12px}.wy-alert.wy-alert-danger,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.admonition-todo{background:#fdf3f2}.wy-alert.wy-alert-danger .wy-alert-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .danger .wy-alert-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .danger .admonition-title,.rst-content .error .admonition-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title{background:#f29f97}.wy-alert.wy-alert-warning,.rst-content .wy-alert-warning.note,.rst-content .attention,.rst-content .caution,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.tip,.rst-content .warning,.rst-content .wy-alert-warning.seealso,.rst-content .admonition-todo{background:#ffedcc}.wy-alert.wy-alert-warning .wy-alert-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .attention .wy-alert-title,.rst-content .caution .wy-alert-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .admonition-todo .wy-alert-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .attention .admonition-title,.rst-content .caution .admonition-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .warning .admonition-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .admonition-todo .admonition-title{background:#f0b37e}.wy-alert.wy-alert-info,.rst-content .note,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.rst-content .seealso,.rst-content .wy-alert-info.admonition-todo{background:#e7f2fa}.wy-alert.wy-alert-info .wy-alert-title,.rst-content .note .wy-alert-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.rst-content .note .admonition-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .seealso .admonition-title,.rst-content .wy-alert-info.admonition-todo .admonition-title{background:#6ab0de}.wy-alert.wy-alert-success,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.warning,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.admonition-todo{background:#dbfaf4}.wy-alert.wy-alert-success .wy-alert-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .hint .wy-alert-title,.rst-content .important .wy-alert-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .hint .admonition-title,.rst-content .important .admonition-title,.rst-content .tip .admonition-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.admonition-todo .admonition-title{background:#1abc9c}.wy-alert.wy-alert-neutral,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.admonition-todo{background:#f3f6f6}.wy-alert.wy-alert-neutral .wy-alert-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .admonition-title{color:#404040;background:#e1e4e5}.wy-alert.wy-alert-neutral a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.admonition-todo a{color:#2980B9}.wy-alert p:last-child,.rst-content .note p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.rst-content .seealso p:last-child,.rst-content .admonition-todo p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0px;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,0.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all 0.3s ease-in;-moz-transition:all 0.3s ease-in;transition:all 0.3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27AE60}.wy-tray-container li.wy-tray-item-info{background:#2980B9}.wy-tray-container li.wy-tray-item-warning{background:#E67E22}.wy-tray-container li.wy-tray-item-danger{background:#E74C3C}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width: 768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px 12px;color:#fff;border:1px solid rgba(0,0,0,0.1);background-color:#27AE60;text-decoration:none;font-weight:normal;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:0px 1px 2px -1px rgba(255,255,255,0.5) inset,0px -2px 0px 0px rgba(0,0,0,0.1) inset;outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all 0.1s linear;-moz-transition:all 0.1s linear;transition:all 0.1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:0px -1px 0px 0px rgba(0,0,0,0.05) inset,0px 2px 0px 0px rgba(0,0,0,0.1) inset;padding:8px 12px 6px 12px}.btn:visited{color:#fff}.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:0.4;cursor:not-allowed;box-shadow:none}.btn-disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:0.4;cursor:not-allowed;box-shadow:none}.btn-disabled:hover,.btn-disabled:focus,.btn-disabled:active{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:0.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980B9 !important}.btn-info:hover{background-color:#2e8ece !important}.btn-neutral{background-color:#f3f6f6 !important;color:#404040 !important}.btn-neutral:hover{background-color:#e5ebeb !important;color:#404040}.btn-neutral:visited{color:#404040 !important}.btn-success{background-color:#27AE60 !important}.btn-success:hover{background-color:#295 !important}.btn-danger{background-color:#E74C3C !important}.btn-danger:hover{background-color:#ea6153 !important}.btn-warning{background-color:#E67E22 !important}.btn-warning:hover{background-color:#e98b39 !important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f !important}.btn-link{background-color:transparent !important;color:#2980B9;box-shadow:none;border-color:transparent !important}.btn-link:hover{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:active{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:visited{color:#9B59B6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:before,.wy-btn-group:after{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:solid 1px #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,0.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980B9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:solid 1px #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type="search"]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980B9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned input,.wy-form-aligned textarea,.wy-form-aligned select,.wy-form-aligned .wy-help-inline,.wy-form-aligned label{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{border:0;margin:0;padding:0}legend{display:block;width:100%;border:0;padding:0;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label{display:block;margin:0 0 0.3125em 0;color:#999;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;*zoom:1;max-width:68em;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#E74C3C}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full input[type="text"],.wy-control-group .wy-form-full input[type="password"],.wy-control-group .wy-form-full input[type="email"],.wy-control-group .wy-form-full input[type="url"],.wy-control-group .wy-form-full input[type="date"],.wy-control-group .wy-form-full input[type="month"],.wy-control-group .wy-form-full input[type="time"],.wy-control-group .wy-form-full input[type="datetime"],.wy-control-group .wy-form-full input[type="datetime-local"],.wy-control-group .wy-form-full input[type="week"],.wy-control-group .wy-form-full input[type="number"],.wy-control-group .wy-form-full input[type="search"],.wy-control-group .wy-form-full input[type="tel"],.wy-control-group .wy-form-full input[type="color"],.wy-control-group .wy-form-halves input[type="text"],.wy-control-group .wy-form-halves input[type="password"],.wy-control-group .wy-form-halves input[type="email"],.wy-control-group .wy-form-halves input[type="url"],.wy-control-group .wy-form-halves input[type="date"],.wy-control-group .wy-form-halves input[type="month"],.wy-control-group .wy-form-halves input[type="time"],.wy-control-group .wy-form-halves input[type="datetime"],.wy-control-group .wy-form-halves input[type="datetime-local"],.wy-control-group .wy-form-halves input[type="week"],.wy-control-group .wy-form-halves input[type="number"],.wy-control-group .wy-form-halves input[type="search"],.wy-control-group .wy-form-halves input[type="tel"],.wy-control-group .wy-form-halves input[type="color"],.wy-control-group .wy-form-thirds input[type="text"],.wy-control-group .wy-form-thirds input[type="password"],.wy-control-group .wy-form-thirds input[type="email"],.wy-control-group .wy-form-thirds input[type="url"],.wy-control-group .wy-form-thirds input[type="date"],.wy-control-group .wy-form-thirds input[type="month"],.wy-control-group .wy-form-thirds input[type="time"],.wy-control-group .wy-form-thirds input[type="datetime"],.wy-control-group .wy-form-thirds input[type="datetime-local"],.wy-control-group .wy-form-thirds input[type="week"],.wy-control-group .wy-form-thirds input[type="number"],.wy-control-group .wy-form-thirds input[type="search"],.wy-control-group .wy-form-thirds input[type="tel"],.wy-control-group .wy-form-thirds input[type="color"]{width:100%}.wy-control-group .wy-form-full{float:left;display:block;margin-right:2.35765%;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child{margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n+1){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child{margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control{margin:6px 0 0 0;font-size:90%}.wy-control-no-input{display:inline-block;margin:6px 0 0 0;font-size:90%}.wy-control-group.fluid-input input[type="text"],.wy-control-group.fluid-input input[type="password"],.wy-control-group.fluid-input input[type="email"],.wy-control-group.fluid-input input[type="url"],.wy-control-group.fluid-input input[type="date"],.wy-control-group.fluid-input input[type="month"],.wy-control-group.fluid-input input[type="time"],.wy-control-group.fluid-input input[type="datetime"],.wy-control-group.fluid-input input[type="datetime-local"],.wy-control-group.fluid-input input[type="week"],.wy-control-group.fluid-input input[type="number"],.wy-control-group.fluid-input input[type="search"],.wy-control-group.fluid-input input[type="tel"],.wy-control-group.fluid-input input[type="color"]{width:100%}.wy-form-message-inline{display:inline-block;padding-left:0.3em;color:#666;vertical-align:middle;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:0.3125em;font-style:italic}input{line-height:normal}input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;*overflow:visible}input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border 0.3s linear;-moz-transition:border 0.3s linear;transition:border 0.3s linear}input[type="datetime-local"]{padding:0.34375em 0.625em}input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0;margin-right:0.3125em;*height:13px;*width:13px}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}input[type="text"]:focus,input[type="password"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus{outline:0;outline:thin dotted \9;border-color:#333}input.no-focus:focus{border-color:#ccc !important}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:1px auto #129FEA}input[type="text"][disabled],input[type="password"][disabled],input[type="email"][disabled],input[type="url"][disabled],input[type="date"][disabled],input[type="month"][disabled],input[type="time"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="week"][disabled],input[type="number"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="color"][disabled]{cursor:not-allowed;background-color:#f3f6f6;color:#cad2d3}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#E74C3C;border:1px solid #E74C3C}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#E74C3C}input[type="file"]:focus:invalid:focus,input[type="radio"]:focus:invalid:focus,input[type="checkbox"]:focus:invalid:focus{outline-color:#E74C3C}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif}select,textarea{padding:0.5em 0.625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border 0.3s linear;-moz-transition:border 0.3s linear;transition:border 0.3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#fff;color:#cad2d3;border-color:transparent}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{padding:6px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:solid 1px #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#E74C3C}.wy-control-group.wy-control-group-error input[type="text"],.wy-control-group.wy-control-group-error input[type="password"],.wy-control-group.wy-control-group-error input[type="email"],.wy-control-group.wy-control-group-error input[type="url"],.wy-control-group.wy-control-group-error input[type="date"],.wy-control-group.wy-control-group-error input[type="month"],.wy-control-group.wy-control-group-error input[type="time"],.wy-control-group.wy-control-group-error input[type="datetime"],.wy-control-group.wy-control-group-error input[type="datetime-local"],.wy-control-group.wy-control-group-error input[type="week"],.wy-control-group.wy-control-group-error input[type="number"],.wy-control-group.wy-control-group-error input[type="search"],.wy-control-group.wy-control-group-error input[type="tel"],.wy-control-group.wy-control-group-error input[type="color"]{border:solid 1px #E74C3C}.wy-control-group.wy-control-group-error textarea{border:solid 1px #E74C3C}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:0.5em 0.625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27AE60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#E74C3C}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#E67E22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980B9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width: 480px){.wy-form button[type="submit"]{margin:0.7em 0 0}.wy-form input[type="text"],.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:0.3em;display:block}.wy-form label{margin-bottom:0.3em;display:block}.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:0.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0 0}.wy-form .wy-help-inline,.wy-form-message-inline,.wy-form-message{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width: 768px){.tablet-hide{display:none}}@media screen and (max-width: 480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.wy-table,.rst-content table.docutils,.rst-content table.field-list{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.wy-table caption,.rst-content table.docutils caption,.rst-content table.field-list caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td,.wy-table th,.rst-content table.docutils th,.rst-content table.field-list th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.wy-table td:first-child,.rst-content table.docutils td:first-child,.rst-content table.field-list td:first-child,.wy-table th:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list th:first-child{border-left-width:0}.wy-table thead,.rst-content table.docutils thead,.rst-content table.field-list thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.wy-table thead th,.rst-content table.docutils thead th,.rst-content table.field-list thead th{font-weight:bold;border-bottom:solid 2px #e1e4e5}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td{background-color:transparent;vertical-align:middle}.wy-table td p,.rst-content table.docutils td p,.rst-content table.field-list td p{line-height:18px}.wy-table td p:last-child,.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child{margin-bottom:0}.wy-table .wy-table-cell-min,.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min{width:1%;padding-right:0}.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:gray;font-size:90%}.wy-table-tertiary{color:gray;font-size:80%}.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td,.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td{background-color:#f3f6f6}.wy-table-backed{background-color:#f3f6f6}.wy-table-bordered-all,.rst-content table.docutils{border:1px solid #e1e4e5}.wy-table-bordered-all td,.rst-content table.docutils td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.wy-table-bordered-all tbody>tr:last-child td,.rst-content table.docutils tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0 !important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980B9;text-decoration:none}a:hover{color:#3091d1}a:visited{color:#9B59B6}html{height:100%;overflow-x:hidden}body{font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;font-weight:normal;color:#404040;min-height:100%;overflow-x:hidden;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#E67E22 !important}a.wy-text-warning:hover{color:#eb9950 !important}.wy-text-info{color:#2980B9 !important}a.wy-text-info:hover{color:#409ad5 !important}.wy-text-success{color:#27AE60 !important}a.wy-text-success:hover{color:#36d278 !important}.wy-text-danger{color:#E74C3C !important}a.wy-text-danger:hover{color:#ed7669 !important}.wy-text-neutral{color:#404040 !important}a.wy-text-neutral:hover{color:#595959 !important}h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif}p{line-height:24px;margin:0;font-size:16px;margin-bottom:24px}h1{font-size:175%}h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}code,.rst-content tt{white-space:nowrap;max-width:100%;background:#fff;border:solid 1px #e1e4e5;font-size:75%;padding:0 5px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;color:#E74C3C;overflow-x:auto}code.code-large,.rst-content tt.code-large{font-size:90%}.wy-plain-list-disc,.rst-content .section ul,.rst-content .toctree-wrapper ul,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.wy-plain-list-disc li,.rst-content .section ul li,.rst-content .toctree-wrapper ul li,article ul li{list-style:disc;margin-left:24px}.wy-plain-list-disc li p:last-child,.rst-content .section ul li p:last-child,.rst-content .toctree-wrapper ul li p:last-child,article ul li p:last-child{margin-bottom:0}.wy-plain-list-disc li ul,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li ul,article ul li ul{margin-bottom:0}.wy-plain-list-disc li li,.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,article ul li li{list-style:circle}.wy-plain-list-disc li li li,.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,article ul li li li{list-style:square}.wy-plain-list-disc li ol li,.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,article ul li ol li{list-style:decimal}.wy-plain-list-decimal,.rst-content .section ol,.rst-content ol.arabic,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.wy-plain-list-decimal li,.rst-content .section ol li,.rst-content ol.arabic li,article ol li{list-style:decimal;margin-left:24px}.wy-plain-list-decimal li p:last-child,.rst-content .section ol li p:last-child,.rst-content ol.arabic li p:last-child,article ol li p:last-child{margin-bottom:0}.wy-plain-list-decimal li ul,.rst-content .section ol li ul,.rst-content ol.arabic li ul,article ol li ul{margin-bottom:0}.wy-plain-list-decimal li ul li,.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,article ol li ul li{list-style:disc}.codeblock-example{border:1px solid #e1e4e5;border-bottom:none;padding:24px;padding-top:48px;font-weight:500;background:#fff;position:relative}.codeblock-example:after{content:"Example";position:absolute;top:0px;left:0px;background:#9B59B6;color:#fff;padding:6px 12px}.codeblock-example.prettyprint-example-only{border:1px solid #e1e4e5;margin-bottom:24px}.codeblock,pre.literal-block,.rst-content .literal-block,.rst-content pre.literal-block,div[class^='highlight']{border:1px solid #e1e4e5;padding:0px;overflow-x:auto;background:#fff;margin:1px 0 24px 0}.codeblock div[class^='highlight'],pre.literal-block div[class^='highlight'],.rst-content .literal-block div[class^='highlight'],div[class^='highlight'] div[class^='highlight']{border:none;background:none;margin:0}div[class^='highlight'] td.code{width:100%}.linenodiv pre{border-right:solid 1px #e6e9ea;margin:0;padding:12px 12px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;font-size:12px;line-height:1.5;color:#d9d9d9}div[class^='highlight'] pre{white-space:pre;margin:0;padding:12px 12px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;font-size:12px;line-height:1.5;display:block;overflow:auto;color:#404040}@media print{.codeblock,pre.literal-block,.rst-content .literal-block,.rst-content pre.literal-block,div[class^='highlight'],div[class^='highlight'] pre{white-space:pre-wrap}}.hll{background-color:#ffc;margin:0 -12px;padding:0 12px;display:block}.c{color:#998;font-style:italic}.err{color:#a61717;background-color:#e3d2d2}.k{font-weight:bold}.o{font-weight:bold}.cm{color:#998;font-style:italic}.cp{color:#999;font-weight:bold}.c1{color:#998;font-style:italic}.cs{color:#999;font-weight:bold;font-style:italic}.gd{color:#000;background-color:#fdd}.gd .x{color:#000;background-color:#faa}.ge{font-style:italic}.gr{color:#a00}.gh{color:#999}.gi{color:#000;background-color:#dfd}.gi .x{color:#000;background-color:#afa}.go{color:#888}.gp{color:#555}.gs{font-weight:bold}.gu{color:purple;font-weight:bold}.gt{color:#a00}.kc{font-weight:bold}.kd{font-weight:bold}.kn{font-weight:bold}.kp{font-weight:bold}.kr{font-weight:bold}.kt{color:#458;font-weight:bold}.m{color:#099}.s{color:#d14}.n{color:#333}.na{color:teal}.nb{color:#0086b3}.nc{color:#458;font-weight:bold}.no{color:teal}.ni{color:purple}.ne{color:#900;font-weight:bold}.nf{color:#900;font-weight:bold}.nn{color:#555}.nt{color:navy}.nv{color:teal}.ow{font-weight:bold}.w{color:#bbb}.mf{color:#099}.mh{color:#099}.mi{color:#099}.mo{color:#099}.sb{color:#d14}.sc{color:#d14}.sd{color:#d14}.s2{color:#d14}.se{color:#d14}.sh{color:#d14}.si{color:#d14}.sx{color:#d14}.sr{color:#009926}.s1{color:#d14}.ss{color:#990073}.bp{color:#999}.vc{color:teal}.vg{color:teal}.vi{color:teal}.il{color:#099}.gc{color:#999;background-color:#EAF2F5}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width: 480px){.wy-breadcrumbs-extra{display:none}.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:before,.wy-menu-horiz:after{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz ul,.wy-menu-horiz li{display:inline-block}.wy-menu-horiz li:hover{background:rgba(255,255,255,0.1)}.wy-menu-horiz li.divide-left{border-left:solid 1px #404040}.wy-menu-horiz li.divide-right{border-right:solid 1px #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical header{height:32px;display:inline-block;line-height:32px;padding:0 1.618em;display:block;font-weight:bold;text-transform:uppercase;font-size:80%;color:#2980B9;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:solid 1px #404040}.wy-menu-vertical li.divide-bottom{border-bottom:solid 1px #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:gray;border-right:solid 1px #c9c9c9;padding:0.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a{color:#404040;padding:0.4045em 1.618em;font-weight:bold;position:relative;background:#fcfcfc;border:none;border-bottom:solid 1px #c9c9c9;border-top:solid 1px #c9c9c9;padding-left:1.618em -4px}.wy-menu-vertical li.on a:hover,.wy-menu-vertical li.current>a:hover{background:#fcfcfc}.wy-menu-vertical li.toctree-l2.current>a{background:#c9c9c9;padding:0.4045em 2.427em}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical .local-toc li ul{display:block}.wy-menu-vertical li ul li a{margin-bottom:0;color:#b3b3b3;font-weight:normal}.wy-menu-vertical a{display:inline-block;line-height:18px;padding:0.4045em 1.618em;display:block;position:relative;font-size:90%;color:#b3b3b3}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:active{background-color:#2980B9;cursor:pointer;color:#fff}.wy-side-nav-search{z-index:200;background-color:#2980B9;text-align:center;padding:0.809em;display:block;color:#fcfcfc;margin-bottom:0.809em}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto 0.809em auto;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a{color:#fcfcfc;font-size:100%;font-weight:bold;display:inline-block;padding:4px 6px;margin-bottom:0.809em}.wy-side-nav-search>a:hover,.wy-side-nav-search .wy-dropdown>a:hover{background:rgba(255,255,255,0.1)}.wy-nav .wy-menu-vertical header{color:#2980B9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980B9;color:#fff}[data-menu-wrap]{-webkit-transition:all 0.2s ease-in;-moz-transition:all 0.2s ease-in;transition:all 0.2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:left repeat-y #fcfcfc;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxOERBMTRGRDBFMUUxMUUzODUwMkJCOThDMEVFNURFMCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxOERBMTRGRTBFMUUxMUUzODUwMkJCOThDMEVFNURFMCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjE4REExNEZCMEUxRTExRTM4NTAyQkI5OEMwRUU1REUwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjE4REExNEZDMEUxRTExRTM4NTAyQkI5OEMwRUU1REUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+EwrlwAAAAA5JREFUeNpiMDU0BAgwAAE2AJgB9BnaAAAAAElFTkSuQmCC);background-size:300px 1px}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:absolute;top:0;left:0;width:300px;overflow:hidden;min-height:100%;background:#343131;z-index:200}.wy-nav-top{display:none;background:#2980B9;color:#fff;padding:0.4045em 0.809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:before,.wy-nav-top:after{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:bold}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,0.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:#999}footer p{margin-bottom:12px}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:before,.rst-footer-buttons:after{display:table;content:""}.rst-footer-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:solid 1px #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:solid 1px #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:gray;font-size:90%}@media screen and (max-width: 768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width: 1400px){.wy-nav-content-wrap{background:rgba(0,0,0,0.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,footer,.wy-nav-side{display:none}.wy-nav-content-wrap{margin-left:0}}nav.stickynav{position:fixed;top:0}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;border-top:solid 10px #343131;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .icon{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}img{width:100%;height:auto}}.rst-content img{max-width:100%;height:auto !important}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure.align-center{text-align:center}.rst-content .section>img{margin-bottom:24px}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content .note .last,.rst-content .attention .last,.rst-content .caution .last,.rst-content .danger .last,.rst-content .error .last,.rst-content .hint .last,.rst-content .important .last,.rst-content .tip .last,.rst-content .warning .last,.rst-content .seealso .last,.rst-content .admonition-todo .last{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,0.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent !important;border-color:rgba(0,0,0,0.1) !important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha li{list-style:upper-alpha}.rst-content .section ol p,.rst-content .section ul p{margin-bottom:12px}.rst-content .line-block{margin-left:24px}.rst-content .topic-title{font-weight:bold;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0px 0px 24px 24px}.rst-content .align-left{float:left;margin:0px 24px 24px 0px}.rst-content .align-center{margin:auto;display:block}.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink{display:none;visibility:hidden;font-size:14px}.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content dl dt .headerlink:after{visibility:visible;content:"";font-family:FontAwesome;display:inline-block}.rst-content h1:hover .headerlink,.rst-content h2:hover .headerlink,.rst-content h3:hover .headerlink,.rst-content h4:hover .headerlink,.rst-content h5:hover .headerlink,.rst-content h6:hover .headerlink,.rst-content dl dt:hover .headerlink{display:inline-block}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:solid 1px #e1e4e5}.rst-content .sidebar p,.rst-content .sidebar ul,.rst-content .sidebar dl{font-size:90%}.rst-content .sidebar .last{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif;font-weight:bold;background:#e1e4e5;padding:6px 12px;margin:-24px;margin-bottom:24px;font-size:100%}.rst-content .highlighted{background:#F1C40F;display:inline-block;font-weight:bold;padding:0 6px}.rst-content .footnote-reference,.rst-content .citation-reference{vertical-align:super;font-size:90%}.rst-content table.docutils.citation,.rst-content table.docutils.footnote{background:none;border:none;color:#999}.rst-content table.docutils.citation td,.rst-content table.docutils.citation tr,.rst-content table.docutils.footnote td,.rst-content table.docutils.footnote tr{border:none;background-color:transparent !important;white-space:normal}.rst-content table.docutils.citation td.label,.rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}.rst-content table.field-list{border:none}.rst-content table.field-list td{border:none;padding-top:5px}.rst-content table.field-list td>strong{display:inline-block;margin-top:3px}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left;padding-left:0}.rst-content tt{color:#000}.rst-content tt big,.rst-content tt em{font-size:100% !important;line-height:normal}.rst-content tt .xref,a .rst-content tt{font-weight:bold}.rst-content a tt{color:#2980B9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:bold}.rst-content dl p,.rst-content dl table,.rst-content dl ul,.rst-content dl ol{margin-bottom:12px !important}.rst-content dl dd{margin:0 0 12px 24px}.rst-content dl:not(.docutils){margin-bottom:24px}.rst-content dl:not(.docutils) dt{display:inline-block;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980B9;border-top:solid 3px #6ab0de;padding:6px;position:relative}.rst-content dl:not(.docutils) dt:before{color:#6ab0de}.rst-content dl:not(.docutils) dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dl dt{margin-bottom:6px;border:none;border-left:solid 3px #ccc;background:#f0f0f0;color:gray}.rst-content dl:not(.docutils) dl dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dt:first-child{margin-top:0}.rst-content dl:not(.docutils) tt{font-weight:bold}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descclassname{background-color:transparent;border:none;padding:0;font-size:100% !important}.rst-content dl:not(.docutils) tt.descname{font-weight:bold}.rst-content dl:not(.docutils) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:bold}.rst-content dl:not(.docutils) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-link,.rst-content .viewcode-back{display:inline-block;color:#27AE60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:bold}@media screen and (max-width: 480px){.rst-content .sidebar{width:100%}}span[id*='MathJax-Span']{color:#404040}.math{text-align:center} diff --git a/personal/docs/css/theme_extra.css b/personal/docs/css/theme_extra.css new file mode 100644 index 0000000..ab107ba --- /dev/null +++ b/personal/docs/css/theme_extra.css @@ -0,0 +1,197 @@ +/* + * Sphinx doesn't have support for section dividers like we do in + * MkDocs, this styles the section titles in the nav + * + * https://github.com/mkdocs/mkdocs/issues/175 + */ +.wy-menu-vertical span { + line-height: 18px; + padding: 0.4045em 1.618em; + display: block; + position: relative; + font-size: 90%; + color: #838383; +} + +.wy-menu-vertical .subnav a { + padding: 0.4045em 2.427em; +} + +/* + * Long navigations run off the bottom of the screen as the nav + * area doesn't scroll. + * + * https://github.com/mkdocs/mkdocs/pull/202 + * + * Builds upon pull 202 https://github.com/mkdocs/mkdocs/pull/202 + * to make toc scrollbar end before navigations buttons to not be overlapping. + */ +.wy-nav-side { + height: calc(100% - 45px); + overflow-y: auto; + min-height: 0; +} + +.rst-versions{ + border-top: 0; + height: 45px; +} + +@media screen and (max-width: 768px) { + .wy-nav-side { + height: 100%; + } +} + +/* + * readthedocs theme hides nav items when the window height is + * too small to contain them. + * + * https://github.com/mkdocs/mkdocs/issues/#348 + */ +.wy-menu-vertical ul { + margin-bottom: 2em; +} + +/* + * Wrap inline code samples otherwise they shoot of the side and + * can't be read at all. + * + * https://github.com/mkdocs/mkdocs/issues/313 + * https://github.com/mkdocs/mkdocs/issues/233 + * https://github.com/mkdocs/mkdocs/issues/834 + */ +code { + white-space: pre-wrap; + word-wrap: break-word; + padding: 2px 5px; +} + +/** + * Make code blocks display as blocks and give them the appropriate + * font size and padding. + * + * https://github.com/mkdocs/mkdocs/issues/855 + * https://github.com/mkdocs/mkdocs/issues/834 + * https://github.com/mkdocs/mkdocs/issues/233 + */ +pre code { + white-space: pre; + word-wrap: normal; + display: block; + padding: 12px; + font-size: 12px; +} + +/* + * Fix link colors when the link text is inline code. + * + * https://github.com/mkdocs/mkdocs/issues/718 + */ +a code { + color: #2980B9; +} +a:hover code { + color: #3091d1; +} +a:visited code { + color: #9B59B6; +} + +/* + * The CSS classes from highlight.js seem to clash with the + * ReadTheDocs theme causing some code to be incorrectly made + * bold and italic. + * + * https://github.com/mkdocs/mkdocs/issues/411 + */ +pre .cs, pre .c { + font-weight: inherit; + font-style: inherit; +} + +/* + * Fix some issues with the theme and non-highlighted code + * samples. Without and highlighting styles attached the + * formatting is broken. + * + * https://github.com/mkdocs/mkdocs/issues/319 + */ +.no-highlight { + display: block; + padding: 0.5em; + color: #333; +} + + +/* + * Additions specific to the search functionality provided by MkDocs + */ + +.search-results { + margin-top: 23px; +} + +.search-results article { + border-top: 1px solid #E1E4E5; + padding-top: 24px; +} + +.search-results article:first-child { + border-top: none; +} + +form .search-query { + width: 100%; + border-radius: 50px; + padding: 6px 12px; /* csslint allow: box-model */ + border-color: #D1D4D5; +} + +.wy-menu-vertical li ul { + display: inherit; +} + +.wy-menu-vertical li ul.subnav ul.subnav{ + padding-left: 1em; +} + +.wy-menu-vertical .subnav li.current > a { + padding-left: 2.42em; +} +.wy-menu-vertical .subnav li.current > ul li a { + padding-left: 3.23em; +} + +/* + * Improve inline code blocks within admonitions. + * + * https://github.com/mkdocs/mkdocs/issues/656 + */ + .admonition code { + color: #404040; + border: 1px solid #c7c9cb; + border: 1px solid rgba(0, 0, 0, 0.2); + background: #f8fbfd; + background: rgba(255, 255, 255, 0.7); +} + +/* + * Account for wide tables which go off the side. + * Override borders to avoid wierdness on narrow tables. + * + * https://github.com/mkdocs/mkdocs/issues/834 + * https://github.com/mkdocs/mkdocs/pull/1034 + */ +.rst-content .section .docutils { + width: 100%; + overflow: auto; + display: block; + border: none; +} + +td, th { + border: 1px solid #e1e4e5 !important; /* csslint allow: important */ + border-collapse: collapse; +} + diff --git a/personal/docs/dev/api.html b/personal/docs/dev/api.html new file mode 100644 index 0000000..d0cb63f --- /dev/null +++ b/personal/docs/dev/api.html @@ -0,0 +1,189 @@ + + + + + + + + + + + Api - Binary Ninja User Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + + +
  • Api
  • +
  • + +
  • +
+
+
+
+
+ + + +
+
+ + +
+
+ +
+ +
+ +
+ + + + + +
+ + + + + + diff --git a/personal/docs/dev/bnil-llil.html b/personal/docs/dev/bnil-llil.html new file mode 100644 index 0000000..d098668 --- /dev/null +++ b/personal/docs/dev/bnil-llil.html @@ -0,0 +1,477 @@ + + + + + + + + + + + BNIL Guide: LLIL - Binary Ninja User Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + + +
  • Developer Guide »
  • + + + +
  • BNIL Guide: LLIL
  • +
  • + +
  • +
+
+
+
+
+ +

Binary Ninja Intermediate Language Series, Part 1: Low Level IL

+

The Binary Ninja Intermediate Language (BNIL) is a semantic representation of the assembly language instructions for a native architecture in Binary Ninja. BNIL is actually a family of intermediate languages that work together to provide functionality at different abstraction layers. This developer guide is intended to cover some of the mechanics of the LLIL to distinguish it from the other ILs in the BNIL family.

+

BNIL-LLIL Selected

+

The Lifted IL is very similar to the LLIL and is primarily of interest for Architecture plugin authors. If you're writing an analysis plugin, you'll always want to be working at LLIL or higher. During each stage of the lifting process a number of transformations take place, and each layer of IL can have different instructions. Because of this, you can not rely on an instruction from one layer existing in another.

+

Introduction by example

+

Since doing is the easiest way to learn let's start with a simple example binary and step through analyzing it using the python console.

+

Low Level IL Option >

+
    +
  • Download chal1 and open it with Binary Ninja
  • +
  • Next, bring up the Low Level IL view by clicking in the options pane at the bottom of the screen + (or alternatively, use the i key)
  • +
  • Navigate to main (g, then "main", or double-click it in the function list)
  • +
  • Finally, bring up the python console using: ~
  • +
+

Next, enter the following in the console:

+
>>> for block in current_function.low_level_il:
+...     for instr in block:
+...         print instr.address, instr.instr_index, instr
+... 
+4196422 0 push(rbp)
+4196423 1 rbp = rsp {var_8}
+4196426 2 rsp = rsp - 0x110
+4196433 3 rax = rbp - 0xc0 {var_c8}
+...
+
+ + +

This will print out all the LLIL instructions in the current function. How does this code work?

+

First we use the global magic variable current_function which gives us the python object function.Function for whatever function is currently selected in the UI. The variable is only usable from the python console, and shouldn't be used for headless plugins. In a script you can either use the function that was passed in if you registered your plugin to handle functions, or you can compute the function based on a specific address, or maybe even just iterate over all the functions in a BinaryView (for func in bv.functions:).

+

Next we get the lowlevelil.LowLevelILFunction from the Function class: current_function.low_level_il. Iterating over the LowLevelILFunction class provides access to the lowlevelil.LowLevelILBasicBlock classes for this function. Inside the loop we can now iterate over the LowLevelILBasicBlock class which provides access to the individual lowlevelil.LowLevelILInstruction classes.

+

Finally, we can print out the attributes of the instruction. We first print out address which is the address of the corresponding assembly language instruction. Next, we print the instr_index, this you can think of as the address of the IL instruction. Since translating assembly language is a many-to-many relationship, we may see multiple IL instructions needed to represent a single assembly language instruction, and thus each IL instruction needs to have its own index separate from its address. Finally, we print out the instruction text.

+

In python, iterating over a class is a distinct operation from subscripting. This separation is used in the LowLevelILFunction class. If you iterate over a LowLevelILFunction you get a list of LowLevelILBasicBlocks, however if you subscript a LowLevelILFunction you actually get the LowLevelILInstruction whose instr_index corresponds to the subscript:

+
>>> list(current_function.low_level_il)
+[<block: x86_64@0x0-0x3f>, <block: x86_64@0x3f-0x45>, <block: x86_64@0x45-0x47>,
+ <block: x86_64@0x47-0x53>, <block: x86_64@0x53-0x57>, <block: x86_64@0x57-0x5a>]
+>>> type(current_function.low_level_il[0])
+<class 'binaryninja.lowlevelil.LowLevelILInstruction'>
+>>> current_function.low_level_il[0]
+<il: push(rbp)>
+
+ + +

Low Level IL Instructions

+

Now that we've established how to access LLIL Functions, Blocks, and Instructions, let's focus in on the instructions themselves. LLIL instructions are infinite length and structured as an expression tree. An expression tree means that instruction operands can be composed of operation. Thus we can have an IL instruction like this:

+
eax = eax + ecx * 4
+
+ + +

The tree for such an instruction would look like:

+
   =
+  / \
+eax  +
+    / \
+  eax  *
+      / \
+    ecx  4
+
+ + +

There are quite a few reasons that we chose to use expression trees that we won't go into in detail here, but suffice it to say lifting to this form and reading this form are both much easier than other forms.

+

Now let's get back to the examples. First let's pick an instruction to work with:

+
>>> instr = current_function.low_level_il[2]
+>>> instr
+<il: rsp = rsp - 0x110>
+
+ + +

For the above instruction, we have a few operations we can perform:

+
    +
  • address - returns the virtual address
  • +
+
>>> hex(instr.address)
+'0x40084aL'
+
+ + +
    +
  • dest - returns the destination operand
  • +
+
>>> instr.dest
+'rsp'
+
+ + +
    +
  • function - returns the containing function
  • +
+
>>> instr.function
+<binaryninja.lowlevelil.LowLevelILFunction object at 0x111c79810>
+
+ + +
    +
  • instr_index - returns the LLIL index
  • +
+
>>> instr.instr_index
+2
+
+ + +
    +
  • operands - returns a list of all operands.
  • +
+
>>> instr.operands
+['rsp', <il: rsp - 0x110>]
+
+ + +
    +
  • operation - returns the enumeration value of the current operation
  • +
+
>>> instr.operation
+<LowLevelILOperation.LLIL_SET_REG: 1>
+
+ + +
    +
  • src - returns the source operand
  • +
+
>>> instr.src
+<il: rsp - 0x110>
+
+ + +
    +
  • dest - returns the destination operand
  • +
+
>>> instr.dest
+'rsp'
+
+ + +
    +
  • size - returns the size of the operation in bytes (in this case we have an 8 byte assigment)
  • +
+
>>> instr.size
+8L
+
+ + +

Now with some knowledge of the LowLevelIL class let's try to do something with it. Let's say our goal is to find all the times the register rdx is written to in the current function. This code is straight forward:

+
>>> for block in current_function.low_level_il:
+...  for instr in block:
+...   if instr.operation == LowLevelILOperation.LLIL_SET_REG and instr.dest.name == 'rdx':
+...    print instr.address, instr.instr_index, instr
+... 
+4196490 14 rdx = [rax].q
+4196500 16 rdx = [rax + 8].q
+4196511 18 rdx = [rax + 0x10].q
+4196522 20 rdx = [rax + 0x18].q
+4196533 22 rdx = [rax + 0x20].q
+4196544 24 rdx = [rax + 0x28].q
+4196798 77 rdx = [0x602090].q
+
+ + +

The Instructions

+

Going into gross detail on all the instructions is out of scope of this article, but we'll go over the different instructions types and speak generally about how they are used.

+

Registers, Constants & Flags

+

When parsing an instruction tree the terminals are registers, constants and flags. This provide the basis from which all instructions are built.

+
    +
  • LLIL_REG - A register, terminal
  • +
  • LLIL_CONST - A constant integer value, terminal
  • +
  • LLIL_SET_REG - Sets a register to the results of the IL operation in src attribute.
  • +
  • LLIL_SET_REG_SPLIT - Uses a pair of registers as one double sized register, setting both registers at once.
  • +
  • LLIL_SET_FLAG - Sets the specified flag to the IL operation in src attribute.
  • +
+

Memory Load & Store

+

Reading and writing memory is accomplished through the following instructions.

+
    +
  • LLIL_LOAD - Load a value from memory.
  • +
  • LLIL_STORE - Store a value to memory.
  • +
  • LLIL_PUSH - Store value to stack; adjusting stack pointer by sizeof(value) after the store.
  • +
  • LLIL_POP - Load value from stack; adjusting stack pointer by sizeof(value) after the store.
  • +
+

Control Flow & Conditionals

+

Control flow transfering- and comparison instructions are straightforward enough, but one instruction that deserves more attention is the if instruction. To understand the if instruction we need to first understand the concept of labels.

+

Labels function much like they do in C code. They can be put anywhere in the emitted IL and serve as a destination for the if and goto instructions. Labels are required because one assembly language instruction can translate to multiple IL instructions, and you need to be able to branch to any of the emitted IL instructions. Let's consider the following x86 instruction cmove (Conditional move if equal flag is set):

+
test    eax, eax
+cmove  eax, ebx
+
+ + +

To translate this instruction to IL we have to first create true and false labels. Then we emit the if instruction, passing it the proper conditional and labels. Next we emit the true label, then we emit the set register instruction and a goto false label instruction. This results in the following output:

+
0 @ 00000002 if (eax == 0) then 1 else 3
+1 @ 00000002 eax = ebx
+2 @ 00000002 goto 3
+
+ + +

As you can see from the above code, labels are really just used internaly and aren't explicitly marked. In addition to if and goto, the jump_to IL instruction is the only other instruction that operates on labels. The rest of the IL control flow instructions operate on addresses rather than labels, much like actual assembly language instructions. Note that an architecture plugin author should not be emitting jump_to IL instructions as those are generated by the analysis automatically.

+
    +
  • LLIL_JUMP - Branch execution to the result of the IL operation.
  • +
  • LLIL_JUMP_TO - Jump table construct, contains an expression and list of possible targets.
  • +
  • LLIL_CALL - Branch execution to the result of the IL operation.
  • +
  • LLIL_RET - Return execution to the caller.
  • +
  • LLIL_NORET - Instruction emitted automatically after syscall or call instruction which cause the program to terminate.
  • +
  • LLIL_IF - If provides conditional execution. If condition is true execution branches to the true label and false label otherwise.
  • +
  • LLIL_GOTO - Goto is used to branch to an IL label, this is different than jump since jump can only jump to addresses.
  • +
  • LLIL_FLAG_COND - Returns the flag condition expression for the specified flag condition.
  • +
  • LLIL_CMP_E - equality
  • +
  • LLIL_CMP_NE - not equal
  • +
  • LLIL_CMP_SLT - signed less than
  • +
  • LLIL_CMP_ULT - unsigned less than
  • +
  • LLIL_CMP_SLE - signed less than or equal
  • +
  • LLIL_CMP_ULE - unsigned less than or equal
  • +
  • LLIL_CMP_SGE - signed greater than or equal
  • +
  • LLIL_CMP_UGE - unsigned greater than or equal
  • +
  • LLIL_CMP_SGT - signed greater than
  • +
  • LLIL_CMP_UGT - unsigned greater than
  • +
+

The Arithmetic & Logical Instructions

+

LLIL implements the most common arithmetic as well as a host of more complicated instruction which make translating from assembly much easier. Most arithmetic and logical instruction contain left and right attributes which can themselves be other IL instructions.

+

The double precision instruction multiply, divide, modulus instructions are particularly helpful for instruction sets like x86 whose output/input can be double the size of the input/output.

+
    +
  • LLIL_ADD - Add
  • +
  • LLIL_ADC - Add with carry
  • +
  • LLIL_SUB - Subtract
  • +
  • LLIL_SBB - Subtract with borrow
  • +
  • LLIL_AND - Bitwise and
  • +
  • LLIL_OR - Bitwise or
  • +
  • LLIL_XOR - Exclusive or
  • +
  • LLIL_LSL - Logical shift left
  • +
  • LLIL_LSR - Logical shift right
  • +
  • LLIL_ASR - Arithmetic shift right
  • +
  • LLIL_ROL - Rotate left
  • +
  • LLIL_RLC - Rotate left with carry
  • +
  • LLIL_ROR - Rotate right
  • +
  • LLIL_RRC - Rotate right with carry
  • +
  • LLIL_MUL - Multiply single precision
  • +
  • LLIL_MULU_DP - Unsigned multiply double precision
  • +
  • LLIL_MULS_DP - Signed multiply double precision
  • +
  • LLIL_DIVU - Unsigned divide single precision
  • +
  • LLIL_DIVU_DP - Unsigned divide double precision
  • +
  • LLIL_DIVS - Signed divide single precision
  • +
  • LLIL_DIVS_DP - Signed divide double precision
  • +
  • LLIL_MODU - Unsigned modulus single precision
  • +
  • LLIL_MODU_DP - Unsigned modulus double precision
  • +
  • LLIL_MODS - Signed modulus single precision
  • +
  • LLIL_MODS_DP - Signed modulus double precision
  • +
  • LLIL_NEG - Sign negation
  • +
  • LLIL_NOT - Bitwise complement
  • +
+

Special instructions

+

The rest of the instructions are pretty much self-explanatory to anyone with familiarity with assembly languages.

+
    +
  • LLIL_NOP - No operation
  • +
  • LLIL_SX - Sign extend
  • +
  • LLIL_ZX - Zero extend
  • +
  • LLIL_SYSCALL - System call instruction
  • +
  • LLIL_BP - Breakpoint instruction
  • +
  • LLIL_TRAP - Trap instruction
  • +
  • LLIL_UNDEF - Undefined instruction
  • +
  • LLIL_UNIMPL - Unimplemented instruction
  • +
  • LLIL_UNIMPL_MEM - Unimplemented memory access instruction
  • +
+ +
+
+ + +
+
+ +
+ +
+ +
+ + + + « Previous + + + Next » + + +
+ + + + + + diff --git a/personal/docs/dev/documentation.html b/personal/docs/dev/documentation.html new file mode 100644 index 0000000..62e9f45 --- /dev/null +++ b/personal/docs/dev/documentation.html @@ -0,0 +1,251 @@ + + + + + + + + + + + Contributing Documentation - Binary Ninja User Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + + +
  • Developer Guide »
  • + + + +
  • Contributing Documentation
  • +
  • + +
  • +
+
+
+
+
+ +

Building Documentation

+

CLA

+

To contribute to the Binary Ninja documentation, first sign the contribution license agreement and send it to Vector 35.

+

Prerequisites

+ +

Building

+
git clone https://github.com/Vector35/binaryninja-api/
+cd binaryninja-api
+cd api
+mkdocs build
+echo User documentation available in site/
+cd api-docs
+make html
+echo API documentation available in build/html
+
+ + +

Changing

+

Changing documentation for the API itself is fairly straight forward. Use doxygen style comment blocks in C++ and C, and restructured text blocks for python for the source. The user documentation is located in the api/docs/ folder and the API documentation is generated from the config in the api/api-docs folder.

+
+

Tip

+

When updating user documentation, the mkdocs serve feature is particularly helpful.

+
+ +
+
+ + +
+
+ +
+ +
+ +
+ + + + « Previous + + + Next » + + +
+ + + + + + diff --git a/personal/docs/dev/plugins.html b/personal/docs/dev/plugins.html new file mode 100644 index 0000000..021a7eb --- /dev/null +++ b/personal/docs/dev/plugins.html @@ -0,0 +1,189 @@ + + + + + + + + + + + Plugins - Binary Ninja User Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + + +
  • Plugins
  • +
  • + +
  • +
+
+
+
+
+ + + +
+
+ + +
+
+ +
+ +
+ +
+ + + + + +
+ + + + + + diff --git a/personal/docs/docs.css b/personal/docs/docs.css new file mode 100644 index 0000000..6009a10 --- /dev/null +++ b/personal/docs/docs.css @@ -0,0 +1,93 @@ +/* +code { +color: #000; +} + +.article pre code { +background: rgba(0, 0, 0, 0); +} + */ + +.admonition.warning .admonition-title, .admonition.warning { +background-color: #d73726 !important; +color: #fff !important; +} + +.admonition.tip .admonition-title, .admonition.tip { +background: #6e6e6e !important; +color: #fff !important; +} + +a { +color: #d73726; +} + +a:visited { +color: #990000; +} + +a:hover { +color: #ff8080; +} + + +img[alt$=">"] { + float:right; + display: inline-block; + padding-left: 10px; +} + +img[alt$="<"] { + float:left; + display: inline-block; + padding-right: 10px; +} + +img[alt$="><"] { + display: block; + max-width: 100%; + height: auto; + margin: auto; + float: none!important; +} + +@media only screen and (min-width: 76.25em) { + .md-main__inner { + max-width: none; + } + .md-sidebar--primary { + left: 0; + } + .md-sidebar--secondary { + right: 0; + margin-left: 0; + -webkit-transform: none; + transform: none; + } + .wy-nav-content { + max-width: 100%; + } +} + +pre { + overflow-x: auto; +} + +.wy-side-nav-search { + background-color: #d73726; + color: #fff; +} + +.toctree-l1 a:visited, .toctree-l1 a:hover, .toctree-l1 a { +color: #ccc; +} + +.wy-nav-top { + background-color: #d73726 !important; + color: #fff !important; +} + +.wy-nav-top a:visited, .wy-nav-top a:hover, .wy-nav-top a, .wy-side-nav-search a:visited, .wy-side-nav-search a:hover, .wy-side-nav-search a { +color: #fff; +} + diff --git a/personal/docs/files/chal1 b/personal/docs/files/chal1 new file mode 100644 index 0000000..faacef0 Binary files /dev/null and b/personal/docs/files/chal1 differ diff --git a/personal/docs/fonts/fontawesome-webfont.eot b/personal/docs/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..0662cb9 Binary files /dev/null and b/personal/docs/fonts/fontawesome-webfont.eot differ diff --git a/personal/docs/fonts/fontawesome-webfont.svg b/personal/docs/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..2edb4ec --- /dev/null +++ b/personal/docs/fonts/fontawesome-webfont.svg @@ -0,0 +1,399 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/personal/docs/fonts/fontawesome-webfont.ttf b/personal/docs/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..d365924 Binary files /dev/null and b/personal/docs/fonts/fontawesome-webfont.ttf differ diff --git a/personal/docs/fonts/fontawesome-webfont.woff b/personal/docs/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..b9bd17e Binary files /dev/null and b/personal/docs/fonts/fontawesome-webfont.woff differ diff --git a/personal/docs/getting-started.html b/personal/docs/getting-started.html new file mode 100644 index 0000000..ed0ae91 --- /dev/null +++ b/personal/docs/getting-started.html @@ -0,0 +1,656 @@ + + + + + + + + + + + Getting Started Guide - Binary Ninja User Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + + +
  • Getting Started Guide
  • +
  • + +
  • +
+
+
+
+
+ +

Getting Started

+

Welcome to Binary Ninja. This introduction document is meant to quickly guide you over some of the most common uses of Binary Ninja.

+

Directories

+

Binary Ninja uses two main locations. The first is the install path of the binary itself and the second is the user folders for user-installed content.

+

Binary Path

+

Binaries are installed in the following locations by default:

+
    +
  • OS X: /Applications/Binary Ninja.app
  • +
  • Windows: C:\Program Files\Vector35\BinaryNinja
  • +
  • Linux: Wherever you extract it! (No standard location)
  • +
+
+

Warning

+

Do not put any user content in the install-path of Binary Ninja. The auto-update process of Binary Ninja may replace any files included in these folders.

+
+

User Folder

+

The base locations of user folders are:

+
    +
  • OS X: ~/Library/Application Support/Binary Ninja
  • +
  • Linux: ~/.binaryninja
  • +
  • Windows: %APPDATA%\Binary Ninja
  • +
+

Contents of the user folder includes:

+
    +
  • lastrun: A text file containing the directory of the last BinaryNinja binary path -- very useful for plugins to resolve the install locations in non-default settings or on linux.
  • +
  • license.dat: License file
  • +
  • plugins/: Folder containing all manually installed user plugins
  • +
  • repositories/: Folder containing files and plugins managed by the Plugin Manager API
  • +
  • settings.json: Advanced settings (see settings)
  • +
  • keybindings.json: Custom keybindings (see keybindings)
  • +
+

license popup >

+

License

+

When you first run Binary Ninja, it will prompt you for your license key. You should have received your license key via email after your purchase. If not, please contact support.

+

Once the license key is installed, you can change it, back it up, or otherwise inspect it simply by looking inside the base of the user folder for license.dat.

+

Linux Setup

+

Because linux install locations can vary widely, we do not assume a Binary Ninja has been installed in any particular folder on linux. Rather, you can simply run binaryninja/scripts/linux-setup.sh after extracting the zip and various file associations, icons, and other settings will be set up. Run it with -h to see the customization options.

+

Loading Files

+

You can load files in many ways:

+
    +
  1. Drag-and-drop a file onto the Binary Ninja window
  2. +
  3. Use the File/Open menu or Open button on the start screen
  4. +
  5. Clicking an item in the recent files list
  6. +
  7. Running Binary Ninja with an optional command-line parameter
  8. +
  9. Opening a file from a URL via the ⌘-l or ⌃-l hotkey
  10. +
  11. Opening a file using the binaryninja: url handler. For security reasons, the url handler requires you to confirm a warning before opening a file via the url handler. The url handler can open remote URLs like: binaryninja:https://captf2.captf.com/2015/plaidctf/pwnable/datastore_7e64104f876f0aa3f8330a409d9b9924.elf, or even local files like binarynina://bin/ls in cases where you wish to script up Binary Ninja from a local webapp.
  12. +
+

recent files

+

Analysis

+

auto analysis ><

+

As soon as you open a file, Binary Ninja begins its auto-analysis.

+

Even while Binary Ninja is analyzing a binary, the UI should be responsive. Not only that, but because the analysis prioritizes user-requested analysis, you can start navigating a binary immediately and any functions you select will be added to the top of the analysis queue. The current progress through a binary is shown in the status bar, but note that the total number of items left to analyze will go up as well as the binary is processed and more items are discovered that require analysis.

+

Errors or warnings during the load of the binary are also shown in the status bar, along with an icon (in the case of the image above, a large number of warnings were shown). The most common warnings are from incomplete lifting and can be safely ignored. If the warnings include a message like Data flow for function at 0x41414141 did not terminate, then please report the binary to the bug database.

+

Interacting

+ +

Navigating code in Binary Ninja is usually a case of just double-clicking where you want to go. Addresses, references, functions, jmp edges, etc, can all be double-clicked to navigate. Additionally, The g hotkey can navigate to a specific address in the current view.

+

graph view

+

Switching views happens multiple ways. In some instances, it's automatic (clicking a data reference from graph view will navigate to linear view as data is not shown in the graph view), and there are multiple ways to manually change views as well. While navigating, you can use the view hotkeys (see below) to switch to a specific view at the same location as the current selection. Alternatively, the view menu in the bottom-right can be used to change views without navigating to any given location.

+

Hotkeys

+
    +
  • h : Switch to hex view
  • +
  • p : Create a function
  • +
  • [ESC] : Navigate backward
  • +
  • [CMD] [ (OS X) : Navigate backward
  • +
  • [CMD] ] (OS X) : Navigate forward
  • +
  • [CTRL] [ (Windows/Linux) : Navigate backward
  • +
  • [CTRL] ] (Windows/Linux) : Navigate forward
  • +
  • [SPACE] : Toggle between linear view and graph view
  • +
  • g : Go To Address dialog
  • +
  • n : Name a symbol
  • +
  • u : Undefine an existing symbol (only for removing new user-defined names)
  • +
  • e : Edits an instruction (by modifying the original binary -- currently only enabled for x86, and x64)
  • +
  • x : Focuses the cross-reference pane
  • +
  • ; : Adds a comment
  • +
  • i : Cycles between disassembly, low-level il, and medium-level il in graph view
  • +
  • t : Switch to type view
  • +
  • y : Change type
  • +
  • a : Change the data type to an ASCII string
  • +
  • [1248] : Change type directly to a data variable of the indicated widths
  • +
  • d : Switches between data variables of various widths
  • +
  • r : Change the data type to single ASCII character
  • +
  • o : Create a pointer data type
  • +
  • [CMD-SHIFT] + (OS X) : Graph view zoom in
  • +
  • [CMD-SHIFT] - (OS X) : Graph view zoom out
  • +
  • [CTRL-SHIFT] + (Windows/Linux) : Graph view zoom in
  • +
  • [CTRL-SHIFT] - (Windows/Linux) : Graph view zoom out
  • +
+

Graph View

+

graph view

+

The default view in Binary Ninja when opening a binary is a graph view that groups the basic blocks of disassembly into visually distinct blocks with edges showing control flow between them.

+

graph view context >

+

Features of the graph view include:

+
    +
  • Ability to double click edges to quickly jump between locations
  • +
  • Zoom (CTRL-mouse wheel)
  • +
  • Vertical Scrolling (Side scroll bar as well as mouse wheel)
  • +
  • Horizontal Scrolling (Bottom scroll bar as well as SHIFT-mouse wheel)
  • +
  • Individual highlighting of arguments, addresses, immediate values
  • +
  • Edge colors indicate whether the path is the true or false case of a conditional jump (a color-blind option in the preferences is useful for those with red-green color blindness)
  • +
  • Context menu that can trigger some function-wide actions as well as some specific to the highlighted instruction (such as inverting branch logic or replacing a specific function with a NOP)
  • +
+

View Options

+

options ><

+

Each of the views (Hex, Graph, Linear) have a variety of options configurable in the bottom-right of the UI.

+

Current options include:

+
    +
  • Hex
      +
    • Background highlight
        +
      • None
      • +
      • Column
      • +
      • Byte value
      • +
      +
    • +
    • Color highlight
        +
      • None
      • +
      • ASCII and printable
      • +
      • Modification
      • +
      +
    • +
    • Contrast
        +
      • Normal
      • +
      • Medium
      • +
      • Highlight
      • +
      +
    • +
    +
  • +
  • Graph
      +
    • Show address
    • +
    • Show opcode bytes
    • +
    • Assembly
    • +
    • Lifted IL
        +
      • Show IL flag usage (if showing Lifted IL)
      • +
      +
    • +
    • Low Level IL
        +
      • Show basic block register state (if showing Low Level IL)
      • +
      +
    • +
    +
  • +
  • Linear
      +
    • Show address
    • +
    • Show opcode bytes
    • +
    +
  • +
+

Hex View

+

hex >

+

The hexadecimal view is useful for view raw binary files that may or may not even be executable binaries. The hex view is particularly good for transforming data in various ways via the Copy as, Transform, and Paste from menus. Note that Transform menu options will transform the data in-place, and that these options will only work when the Hex View is in the Raw mode as opposed to any of the binary views (such as "ELF", "Mach-O", or "PE").

+

Note that any changes made in the Hex view will take effect immediately in any other views open into the same file (new views can be created via the Split to new tab, or Split to new window options under View.). This can, however, cause large amounts of re-analysis so be warned before making large edits or transformations in a large binary file.

+

Xrefs View

+

xrefs >

+

The xrefs view in the lower-left shows all cross-references to a given location or reference. Note that the cross-references pane will change depending on whether an entire line is selected (all cross-references to that address are shown), or whether a specific token within the line is selected.

+

One fun trick that the xrefs view has up its sleeve: when in Hex View, a large range of memory addresses can be selected and the xrefs pane will show all xrefs to any location within that range of data.

+

Linear View

+

linear

+

Linear view is a hybrid view between a graph-based disassembly window and the raw hex view. It lists the entire binary's memory in a linear fashion and is especially useful when trying to find sections of a binary that were not properly identified as code or even just examining data.

+

Linear view is most commonly used for identifying and adding type information for unknown data. To this end,

+

Function List

+

function list >

+

The function list in Binary Ninja shows the list of functions currently identified. As large binaries are analyzed, the list may grow during analysis. The function list starts with known functions such as the entry point, exports, or using other features of the binary file format and explores from there to identify other functions.

+

The function list also highlights imports, and functions identified with symbols in different colors to make them easier to identify.

+
+

Tip

+

To search in the function list, just click to make sure it's focused and start typing!

+
+

Script (Python) Console

+

console >

+

The integrated script console is useful for small scripts that aren't worth writing as full plugins.

+

To trigger the console, either use <CTRL>-<BACKTICK>, or use the View/Script console menu.

+

Once loaded, the script console can be docked in different locations or popped out into a stand-alone window. Note that at this time window locations are not saved on restart.

+

Multi-line input is possible just by doing what you'd normally do in python. If you leave a trailing : at the end of a line, the box will automatically turn into a multi-line edit box, complete with a command-history. To submit that multi-line input, use <CTRL>-<ENTER>

+

By default the interactive python prompt has a number of convenient helper functions and variables built in:

+
    +
  • here / current_address: address of the current selection
  • +
  • bv / current_view / : the current BinaryView
  • +
  • current_function: the current Function
  • +
  • current_basic_block: the current BasicBlock
  • +
  • current_llil: the current LowLevelILFunction
  • +
  • current_mlil: the current MediumLevelILFunction
  • +
  • current_selection: a tuple of the start and end addresses of the current selection
  • +
  • write_at_cursor(data): function that writes data to the start of the current selection
  • +
  • get_selected_data(): function that returns the data in the current selection
  • +
+
+

Note

+

The current script console only supports Python at the moment, but it's fully extensible for other programming languages for advanced users who wish to implement their own bindings.

+
+

Using Plugins

+

Plugins can be installed by one of two methods. First, they can be manually installed by adding the plugin (either a .py file or a folder implementing a python module with a __init__.py file) to the appropriate path:

+
    +
  • OS X: ~/Library/Application Support/Binary Ninja/plugins/
  • +
  • Linux: ~/.binaryninja/plugins/
  • +
  • Windows: %APPDATA%\Binary Ninja\plugins
  • +
+

Alternatively, plugins can be installed with the new pluginmanager API.

+

For more detailed information, see the plugin guide.

+

PDB Plugin

+

Binary Ninja supports loading PDB files through the built in PDB plugin. When selected from the plugin menu it attempts to find where the corresponding PDB file is located using the following search order:

+
    +
  1. Look for in the same directory as the opened file/bndb (e.g. If you ahve c:\foo.exe or c:\foo.bndb open the pdb plugin looks for c:\foo.pdb)
  2. +
  3. Look in the local symbol store. This is the directory specified by the settings: local-store-relative or local-store-absolute. The format of this directory is foo.pdb\<guid>\foo.pdb.
  4. +
  5. Attempt to connect and download the PDB from the list of symbol servers specified in setting symbol-server-list.
  6. +
  7. Prompt the user for the pdb.
  8. +
+

Preferences/Updates

+

preferences >

+

Binary Ninja automatically updates itself by default. This functionality can be disabled in the preferences by turning off the Update to latest version automatically option. Updates are silently downloaded in the background and when complete an option to restart is displayed in the status bar. Whenever Binary Ninja restarts next, it will replace itself with the new version as it launches.

+

On windows, this is achieved through a separate launcher that loads first and replaces the installation before launching the new version. On OS X and Linux, the original installation is overwritten after the update occurs as these operating systems allow files to be replaced while running. The update on restart is thus immediate.

+

Settings

+

Settings are stored in the user directory in the file settings.json. Each top level object in this file is represents a different plugin. As of build 860 the following settings are available:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PluginSettingTypeDefaultDescription
analysisautorunLinearSweepbooleanTrueAutomatically run linear sweep when opening a binary for analysis
analysisenableUTF8booleanTrueWhether or not to consider UTF-8 code points when searching for strings
analysisenableUTF16booleanTrueWhether or not to consider UTF-16 code points when searching for strings
analysisenableUTF32booleanTrueWhether or not to consider UTF-32 code points when searching for strings
analysisenabledUnicodeBlockslist(string)[]Defines which Unicode blocks to consider when searching for strings
analysismax-function-sizeinteger65536Any functions over this size will not be automatically analyzed and require manual override
archx86.disassemblyFlavorstring"BN_INTEL""BN_INTEL", "INTEL", or "AT&T"
archx86.disassemblyLowercaseboolTrueLowercase opcodes, operands, and registers (False for uppercase)
archx86.disassemblySeperatorstring", "What to put between operands in disassembly tokens
corelinux_ca_bundlestring""Certificate authority (.pem or .crt) file to be used for secure downloads
corelinux_ca_dirstring""Certificate authority directory (for distributions without a CA bundle)
download-clienthttps-proxystring""urllib proxyhandler (probably not what you want--by default urllib follows system proxy settings)
pdbauto-download-pdbbooleanTrueAutomatically download pdb files from specified symbol servers
pdblocal-store-absolutestring""Absolute path specifying where the pdb symbol store exists on this machine, overrides relative path
pdblocal-store-relativestring"symbols"Path relative to the binaryninja user directory, sepcifying the pdb symbol store
pdbsymbol-server-listlist(string)["http://msdl.microsoft.com/download/symbols"]List of servers to query for pdb symbols.
pythoninterpreterstring"{/path/,C:\\Path\\}python27.{dylib,dll,so.1}"Python interpreter to load if one is not already present when plugins are loaded
uiactiveContentbooleanTrueAllow Binary Ninja to connect to the web to check for updates
uicolorblindbooleanTrueChoose colors that are visible to those with red/green colorblind
uidebugbooleanFalseEnable developer debugging features (Additional views: Lifted IL, and SSA forms)
uirecent-file-limitinteger10Specify limit for number of recent files
uiscriptingProviderstring"Python"Specify the registered ScriptingProvider that controls the 'Console' in the UI
+

Below is an example settings.json setting various options:

+
{
+    "ui" :
+    {
+        "activeContent" : false,
+        "colorblind" : false,
+        "debug" : true,
+        "recent-file-limit" : 10
+    }
+    "pdb" :
+    {
+        "local-store-absolute" : "C:\\Symbols",
+        "local-store-relative" : "",
+        "symbol-server-list" : ["http://mysymbolserver.company.lan"]
+    },
+    "python":
+    {
+        "interpreter": "C:\\Users\\Binja\\AppData\\Local\\Programs\\Python\\Python37\\python37.dll"
+    }
+}
+
+ + +

Custom Keybindings

+

Custom keybindings can be stored in the user directory in the file keybindings.json. Actions can be referenced for keybindings using the name that appears in the menu. If the desired action is in a submenu, use the full path to the item separated by \\ (for example, "New\\Binary Data"). Below is an example keybindings file:

+
{
+    "Reanalyze" : "Ctrl+Shift+R",
+    "Log" : "Ctrl+L"
+}
+
+ + +
+

Note

+

On Mac OS X, Ctrl refers to the Command key, while Meta refers to the Control key. This is a remapping performed by Qt to make cross-platform keybindings easier to define.

+
+

Unicode Support

+

Currently, Unicode support for Big Endian strings is very limited. Also, UTF-16 only supports Basic Latin code points.

+

Getting Support

+

Vector 35 offers a number of ways to get Binary Ninja support.

+ +
+
+ + +
+
+ +
+ +
+ +
+ + + + « Previous + + + Next » + + +
+ + + + + + diff --git a/personal/docs/guide/installing.html b/personal/docs/guide/installing.html new file mode 100644 index 0000000..ab6770c --- /dev/null +++ b/personal/docs/guide/installing.html @@ -0,0 +1,189 @@ + + + + + + + + + + + Installing - Binary Ninja User Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + + +
  • Installing
  • +
  • + +
  • +
+
+
+
+
+ + + +
+
+ + +
+
+ +
+ +
+ +
+ + + + + +
+ + + + + + diff --git a/personal/docs/guide/interface.html b/personal/docs/guide/interface.html new file mode 100644 index 0000000..a2bd018 --- /dev/null +++ b/personal/docs/guide/interface.html @@ -0,0 +1,195 @@ + + + + + + + + + + + Interface - Binary Ninja User Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + + +
  • Interface
  • +
  • + +
  • +
+
+
+
+
+ +

Interface

+

UI

+

Zoom

+

You can change the zoom of level of the graph view by holding CTRL and scrolling with the mouse.

+

Views

+

Options

+

Hotkeys

+ +
+
+ + +
+
+ +
+ +
+ +
+ + + + + +
+ + + + + + diff --git a/personal/docs/guide/plugins.html b/personal/docs/guide/plugins.html new file mode 100644 index 0000000..7b016cc --- /dev/null +++ b/personal/docs/guide/plugins.html @@ -0,0 +1,286 @@ + + + + + + + + + + + Using and Writing Plugins - Binary Ninja User Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + + +
  • User Guide »
  • + + + +
  • Using and Writing Plugins
  • +
  • + +
  • +
+
+
+
+
+ +

Plugins

+

Plugins really show off the power of Binary Ninja. This guide should help give you an overview of both using and writing plugins.

+

The most common Binary Ninja plugins are Python which we are covering here. That said, there are some C++ plugins which must be built for the appropriate native architecture and will usually include build instructions for each platform. Several C++ examples are included in the API repository.

+

Using Plugins

+

Plugins are loaded from the user's plugin folder:

+
    +
  • OS X: ~/Library/Application Support/Binary Ninja/plugins/
  • +
  • Linux: ~/.binaryninja/plugins/
  • +
  • Windows: %APPDATA%\Binary Ninja\plugins
  • +
+

Note that plugins installed via the PluginManager API are installed in the repositories folder in the same path as the previous plugin folder listed above. You should not need to manually touch anything in that folder, but should access them via the API instead.

+

Manual installation

+

You can manually install a plugin either by adding a folder which contains it (the plugin folder must contain an __init__.py at the top of the folder, or a python file can be included directly in the plugin folder though this is not recommended).

+

Note, if manually cloning the api repository, make sure to:

+
git submodule update --init --recursive
+
+ + +

after cloning or else the submodules will not actually be downloaded.

+

Installing via the API

+

(NOTE THAT THIS API IS TEMPORARILY DISABLED TO BETTER SUPPORT A WIDER VARIETY OF LINUX DISTRIBUTIONS)

+

Binary Ninja now offers a PluginManager API which can simplify the process of finding and installing plugins. From the console:

+
>>> mgr = RepositoryManager()
+>>> dir(mgr)
+['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'add_repository', 'check_for_updates', 'default_repository', 'disable_plugin', 'enable_plugin', 'handle', 'install_plugin', 'plugins', 'repositories', 'uninstall_plugin', 'update_plugin']
+>>> mgr.plugins
+{'default': [<binaryninja-bookmarks not-installed/disabled>, <binaryninja-msp430 not-installed/disabled>, <binaryninja-radare2 not-installed/disabled>, <binaryninja-spu not-installed/disabled>, <binja-avr not-installed/disabled>, <binja_smali not-installed/disabled>, <binjatron not-installed/disabled>, <binoculars not-installed/disabled>, <easypatch not-installed/disabled>, <liil installed/enabled>, <list_comments not-installed/disabled>, <x64dbgbinja not-installed/disabled>]}
+>>> mgr.install_plugin("easypatch")
+True
+>>> mgr.enable_plugin("easypatch")
+True
+
+ + +

Then just restart, and your plugin will be loaded.

+

Installing Prerequisites

+

Because Windows ships with an embedded version of Python, if you want to install plugins inside that Python, you'll need to either adjust your sys.path to include the locations for the other libraries (making sure they're compatible with the built-in version), or else install them directly in the environment via:

+
import pip
+pip.main(['install', '--quiet', 'packagename'])
+
+ + +

--quiet is required to minimize some of the normal output of pip that doesn't work within the context of our scripting console

+

For both OS X and Linux, Binary Ninja can utilize the built in system Python so any installed packages should be available there via whatever typical mechanism you use.

+

Troubleshooting

+

Troubleshooting many Binary Ninja problems is helped by enabling debug logs and logging the output to a file. Just launch Binary Ninja with

+
/Applications/Binary\ Ninja.app/Contents/MacOS/binaryninja -d -l /tmp/bnlog.txt
+
+ + +

And check /tmp/bnlog.txt when you're done.

+

Writing Plugins

+

First, take a look at some of the example plugins, or some of the community plugins to get a feel for different APIs you might be interested in. Of course, the full API docs are online and available offline via the Help/Open API Reference....

+

To start, we suggest you download the sample plugin as a template since it contains all of the elements you're likely to need.

+
    +
  • Begin by editing the plugin.json file
  • +
  • Next, update the LICENSE
  • +
  • For small scripts, you can include all the code inside of __init__.py, though we recommend for most larger scripts that init just act as an initializer and call into functions organized appropriately in other files.
  • +
+

Plugin Debugging Mode

+

Available via the [preferences] dialog, enabling plugin debugging mode will not only enable additional IL types via the UI.

+

UI Elements

+

While it is possible to use Qt to directly create UI enhancements to Binary Ninja, we don't recommend it. First, there's a chance that we'll change UI platforms in the future (in particular because Qt's QWidget performance is actually getting worse with newer versions and they're trying to move everyone to QTQuick which might as well be Electron). Secondly, it is much more difficult for other users to install your plugin given the much more complicated dependencies and cross-platform headache of setup.

+

The officially supported mechanism (until the 1.2 release which will include much more featureful UI API enhancements) are available from the interaction API and shown off in the angr and nampa plugins.

+

Testing

+

It's useful to be able to reload your plugin during testing. On the Commercial edition of Binary Ninja, this is easily accomplished with a stand-alone headless install using import binaryninja after installing the API. (install_api.py is included in every install in the installation folder)

+

For the Personal edition, we recommend simply commenting out the register_ function normally used to register the plugin via whatever mechanism it uses and instead simply using the built-in Python console along with the python reload function to load new changes and test them by directly calling functions in the module. This work-around unfortunately is not supported for Binary View or Architecture plugins which unfortunately do require a restart to test if not running on Commercial.

+ +
+
+ + +
+
+ +
+ +
+ +
+ + + + « Previous + + + Next » + + +
+ + + + + + diff --git a/personal/docs/guide/running.html b/personal/docs/guide/running.html new file mode 100644 index 0000000..d0f2ec1 --- /dev/null +++ b/personal/docs/guide/running.html @@ -0,0 +1,189 @@ + + + + + + + + + + + Running - Binary Ninja User Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + + +
  • Running
  • +
  • + +
  • +
+
+
+
+
+ + + +
+
+ + +
+
+ +
+ +
+ +
+ + + + + +
+ + + + + + diff --git a/personal/docs/guide/troubleshooting.html b/personal/docs/guide/troubleshooting.html new file mode 100644 index 0000000..37b15eb --- /dev/null +++ b/personal/docs/guide/troubleshooting.html @@ -0,0 +1,338 @@ + + + + + + + + + + + Troubleshooting - Binary Ninja User Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + + +
  • User Guide »
  • + + + +
  • Troubleshooting
  • +
  • + +
  • +
+
+
+
+
+ +

Troubleshooting

+

Basics

+
    +
  • Have you searched known issues?
  • +
  • Have you tried rebooting? (Kidding!)
  • +
  • Did you read all the items on this page?
  • +
  • Then you should contact support!
  • +
+

Bug Reproduction

+

Running Binary Ninja with debug logging will make your bug report more useful.

+
./binaryninja --debug --stderr-log
+
+ + +

Alternatively, it might be easier to save debug logs to a file instead:

+
./binaryninja -d -l logfile.txt
+
+ + +

(note that both long and short-form of the command-line arguments are demonstrated in the above examples)

+

Plugin Troubleshooting

+

While third party plugins are not officially supported, there are a number of troubleshooting tips that can help identify the cause. The most important is to enable debug logging as suggested in the previous section. This will often highlight problems with python paths or any other issues that prevent plugins from running.

+

Additionally, if you're having trouble running a plugin in headless mode (without a GUI calling directly into the core), make sure you'er running the Commercial version of Binary Ninja as the Student/Non-Commercial edition does not support headless processing.

+

Next, if running a python plugin, make sure the python requirements are met by your existing installation. Note that on windows, the bundled python is used and python requirements should be installed either by manually copying the modules to the plugins folder.

+

License Problems

+
    +
  • If experiencing problems with Windows UAC permissions during an update, the easiest fix is to completely un-install and recover the latest installer and license. Preferences are saved outside the installation folder and are preserved, though you might want to remove your license.
  • +
  • If you need to change the email address on your license, contact support.
  • +
+

Windows

+
    +
  • While Windows 7 is not officially supported (by us, or Microsoft for that matter), it's possible to have Binary Ninja work if all available windows updates are installed as a library pack update somewhere in the updates is required for us to run.
  • +
  • If you install Windows without internet access and have never run windows updates to install an update, you may have an incomplete windows certificate store. You'll see errors when attempting to update about CERTIFICATE VERIFICATION FAILED. If that is the case, you can either use something like certutil.exe -generateSSTFromWU roots.sst and then manually copy over the DST and Amazon certificates into your root store, or wait until the next time you have an update from Windows Update which should automatically refresh your certificate store.
  • +
+

OS X

+

While OS X is generally the most trouble-free environment for Binary Ninja, very old versions may have problems with the RPATH for our binaries and libraries. There are two solutions. First, run Binary Ninja with:

+
DYLD_LIBRARY_PATH="/Applications/Binary Ninja.app/Contents/MacOS" /Applications/Binary\ Ninja.app/Contents/MacOS/binaryninja
+
+ + +

Or second, modify the binary itself using the install_name_tool.

+

Linux

+

Given the diversity of Linux distributions, some work-arounds are required to run Binary Ninja on platforms that are not officially supported.

+

Headless Ubuntu

+

If you're having trouble getting Binary Ninja installed in a headless server install where you want to be able to X-Forward the GUI on a remote machine, the following should meet requiremetns (for at least 14.04 LTS):

+
apt-get install libgl1-mesa-glx libfontconfig1 libxrender1 libegl1-mesa libxi6 libnspr4 libsm6
+
+ + +

Arch Linux

+
    +
  • Install python2 from the official repositories (sudo pacman -S python2) and create a sym link: sudo ln -s /usr/lib/libpython2.7.so.1.0 /usr/lib/libpython2.7.so.1
  • +
  • Install the libcurl-compat library with sudo pacman -S libcurl-compat, and run Binary Ninja via LD_PRELOAD=libcurl.so.3 ~/binaryninja/binaryninja
  • +
+

KDE

+

To run Binary Ninja in a KDE based environment, set the QT_PLUGIN_PATH to the QT sub-folder:

+
cd ~/binaryninja
+QT_PLUGIN_PATH=./qt ./binaryninja
+
+ + +

Debian

+

For Debian variants that (Kali, eg) don't match packages with Ubuntu LTS or the latest stable, the following might fix problems with libssl and libcrypto:

+
$ cd binaryninja
+$ ln -s plugins/libssl.so libssl.so.1.0.0
+$ ln -s plugins/libcrypto.so libcrypto.so.1.0.0
+
+ + +

Alternatively, you might need to (as root):

+
apt-get install libssl-dev
+ln -s /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.2 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
+ln -s /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2 /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0
+
+ + +

Gentoo

+

One Gentoo user reported a failed SSL certificate when trying to update. The solution was to copy over /etc/ssl/certs/ca-certificates.crt from another Linux distribution.

+

NixOS

+

Here's a customer-provided nix derivation file for the Binary Ninja demo. Adapt as necessary for other versions, or hop onto our slack (specifically the #unsupported-distros channel) to find out more:

+
{ stdenv, autoPatchelfHook, makeWrapper, fetchurl, unzip, libGL, glib, fontconfig, xlibs, dbus, xkeyboard_config }:
+stdenv.mkDerivation rec {
+  name = "binary-ninja-demo";
+  buildInputs = [ autoPatchelfHook makeWrapper unzip libGL stdenv.cc.cc.lib glib fontconfig xlibs.libXi xlibs.libXrender dbus ];
+  src = fetchurl {
+    url = "https://cdn.binary.ninja/installers/BinaryNinja-demo.zip";
+    sha256 = "1yq2kgrhrwdi7f66jm1w5sc6r49hdhqnff9b0ysr5k65w9kxhl1k";
+  };
+
+  buildPhase = ":";
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/opt
+    cp -r * $out/opt
+    chmod +x $out/opt/binaryninja
+    makeWrapper $out/opt/binaryninja \
+          $out/bin/binaryninja \
+          --prefix "QT_XKB_CONFIG_ROOT" ":" "${xkeyboard_config}/share/X11/xkb"
+  '';
+}
+
+ + +

API

+
    +
  • If the GUI launches but the license file is not valid when launched from the command-line, check that you're using the right version of Python. Only a 64-bit Python 2.7 is supported at this time. Additionally, the personal edition does not support headless operation.
  • +
+ +
+
+ + +
+
+ +
+ +
+ +
+ + + + « Previous + + + Next » + + +
+ + + + + + diff --git a/personal/docs/guide/type.html b/personal/docs/guide/type.html new file mode 100644 index 0000000..f8e1fc0 --- /dev/null +++ b/personal/docs/guide/type.html @@ -0,0 +1,189 @@ + + + + + + + + + + + Types and Structures - Binary Ninja User Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + + +
  • Types and Structures
  • +
  • + +
  • +
+
+
+
+
+ +

Types and Structures

+ +
+
+ + +
+
+ +
+ +
+ +
+ + + + + +
+ + + + + + diff --git a/personal/docs/img/BNIL.png b/personal/docs/img/BNIL.png new file mode 100644 index 0000000..37fc999 Binary files /dev/null and b/personal/docs/img/BNIL.png differ diff --git a/personal/docs/img/analysis.png b/personal/docs/img/analysis.png new file mode 100644 index 0000000..088d4f3 Binary files /dev/null and b/personal/docs/img/analysis.png differ diff --git a/personal/docs/img/console.png b/personal/docs/img/console.png new file mode 100644 index 0000000..e4401de Binary files /dev/null and b/personal/docs/img/console.png differ diff --git a/personal/docs/img/favicon.ico b/personal/docs/img/favicon.ico new file mode 100644 index 0000000..e85006a Binary files /dev/null and b/personal/docs/img/favicon.ico differ diff --git a/personal/docs/img/functionlist.png b/personal/docs/img/functionlist.png new file mode 100644 index 0000000..2fb2d47 Binary files /dev/null and b/personal/docs/img/functionlist.png differ diff --git a/personal/docs/img/graphcontext.png b/personal/docs/img/graphcontext.png new file mode 100644 index 0000000..d453f5e Binary files /dev/null and b/personal/docs/img/graphcontext.png differ diff --git a/personal/docs/img/graphview.png b/personal/docs/img/graphview.png new file mode 100644 index 0000000..0d190a9 Binary files /dev/null and b/personal/docs/img/graphview.png differ diff --git a/personal/docs/img/hex.png b/personal/docs/img/hex.png new file mode 100644 index 0000000..f30440a Binary files /dev/null and b/personal/docs/img/hex.png differ diff --git a/personal/docs/img/license-popup.png b/personal/docs/img/license-popup.png new file mode 100644 index 0000000..d61b2b1 Binary files /dev/null and b/personal/docs/img/license-popup.png differ diff --git a/personal/docs/img/linear.png b/personal/docs/img/linear.png new file mode 100644 index 0000000..8eaeb50 Binary files /dev/null and b/personal/docs/img/linear.png differ diff --git a/personal/docs/img/llil_option.png b/personal/docs/img/llil_option.png new file mode 100644 index 0000000..ee42c3b Binary files /dev/null and b/personal/docs/img/llil_option.png differ diff --git a/personal/docs/img/logo.png b/personal/docs/img/logo.png new file mode 100644 index 0000000..c1e1ecb Binary files /dev/null and b/personal/docs/img/logo.png differ diff --git a/personal/docs/img/options.png b/personal/docs/img/options.png new file mode 100644 index 0000000..10af692 Binary files /dev/null and b/personal/docs/img/options.png differ diff --git a/personal/docs/img/preferences.png b/personal/docs/img/preferences.png new file mode 100644 index 0000000..29b3033 Binary files /dev/null and b/personal/docs/img/preferences.png differ diff --git a/personal/docs/img/recent.png b/personal/docs/img/recent.png new file mode 100644 index 0000000..13f3ebe Binary files /dev/null and b/personal/docs/img/recent.png differ diff --git a/personal/docs/img/view-choices.png b/personal/docs/img/view-choices.png new file mode 100644 index 0000000..9ea16dc Binary files /dev/null and b/personal/docs/img/view-choices.png differ diff --git a/personal/docs/img/xrefs.png b/personal/docs/img/xrefs.png new file mode 100644 index 0000000..ab7f056 Binary files /dev/null and b/personal/docs/img/xrefs.png differ diff --git a/personal/docs/index.html b/personal/docs/index.html new file mode 100644 index 0000000..387220a --- /dev/null +++ b/personal/docs/index.html @@ -0,0 +1,212 @@ + + + + + + + + + + + Home - Binary Ninja User Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + + +
  • Home
  • +
  • + +
  • +
+
+
+
+
+ +

Binary Ninja

+

A new kind of reverse engineering platform

+
+

Binary Ninja is a reverse engineering platform. It focuses on a clean and easy to use interface with a powerful multithreaded analysis built on a custom IL to quickly adapt to a variety of architectures, platforms, and compilers.

+ +
+
+ + +
+
+ +
+ +
+ +
+ + + + + Next » + + +
+ + + + + + + + diff --git a/personal/docs/js/jquery-2.1.1.min.js b/personal/docs/js/jquery-2.1.1.min.js new file mode 100644 index 0000000..e5ace11 --- /dev/null +++ b/personal/docs/js/jquery-2.1.1.min.js @@ -0,0 +1,4 @@ +/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b) +},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("